scriptkiddy
Goto Top

Mit php Links ein icon voranstellen

Hallo zusammen,

Ich habe da mal ein bisschen ein komplexeres problem...

Ich arbeite gerade an einer website bei der ich den content der seite per fckeditor erstelle und dann als html in die datenbank schreibe und
entsprechend wieder auf der seite ausgebe... dies funktioniert soweit auch prima. Allerdings werden teilweise auch dateien direkt verlinkt... der upload klappt da auch jedoch macht der editor beim einfügen einen unschönen link
den ich dann immer wieder von hand ändern muss ... heist also ich möchte beim abschicken des forms bevor dieser in die datenbank geschrieben wird die links entsprechend manipulieren also sprich den namen des links in

dateiname.endung ändern und dem link ein fileicon entsprechend der endung voranstellen.

Ich habe mir da gedacht ich könnte dies mit preg_replace realisieren ...bzw mit preg_match_all allerdings bekomme ich hier kein gescheites ergebnis

<code type="php>
Links aus der Variable holen

preg_match_all('~<a[^>]*href="(.*)".*>(.*)</a>~Uis',$content,$ergebnisse);

Alle Links ausgeben
foreach ($ergebnisse as $link)
{
echo "<pre>";
print_r($link);
echo "</pre>";
}


Hier die Ausgabe davon... das obere file ist so wie ich es haben will und das untere ist so wie es der editor im moment automatisch macht.
und darunter die arrays sind die ausgabe von der php funktion ...

d76cc742081cb0f3d96610e7d07cdf6d-unbenannt

Hoffe ihr habt verstanden was ich eigendlich will ich kann das immer so schlecht erklären .. wenn nicht fragt unklares nochmal nach face-smile
Für eure Hilfe bin ich euch schonmal im vorraus dankbar

Gruß

Patrick

Content-ID: 122480

Url: https://administrator.de/contentid/122480

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

godlie
godlie 11.08.2009 um 13:02:08 Uhr
Goto Top
hy,

also wenn wir davon ausgehen das diese Zeile:
admin.architekt-...../.../../Architektengesetz.pdf 
die generierte aus dem fck ist, und du aber
Architektengesetz.pdf 
haben möchtest, dann wäre das nicht so das problem.
Du brauchst ja nur das was nach dem letzten / vorkommt nehmen.
$tmp = explode("/",$link);  
$wantedLink = $tmp[count($tmp)-1];
Mit diesen 2 Zeilen erhälst du das Element nach dem letzen /
scriptkiddy
scriptkiddy 11.08.2009 um 13:07:02 Uhr
Goto Top
ja das ist auch nicht das problem sondern ich bekomme einen html source ... mit allem drum und dran undmöchte aus dem sourcegewirr ALLE links die auf eine Datei zeigen mit eine icon versehen ... also sprich den aktuellen mit einem neuen link ersetzen dazu muss ich es aber erstma dazu bringen mir den kompletten link zu ersetzen .... die sachen wie dateiname und so aus dem dann auszulesen ist nicht mein problem....
godlie
godlie 11.08.2009 um 13:27:44 Uhr
Goto Top
Hm,

ich überlege grad wie man das angehen kann.
Eine möglichkeit wäre es folgendes zu machen.
Erstmal mit preg_match_all alle Links auslesen,
die Ersetzungslinks in ein array zu packen,
das ganze danach mit preg_replace zu ersetzn.

Wenn du preg_replace mit einem array bei replace fütterst, sollte er das durchlaufen und alles Vorkomnisse der Reihe nach ersetzen.
Ich hab grad keine Sources da zum testen aber theoretisch dürfte das funktionieren.
16568
16568 11.08.2009 um 13:38:39 Uhr
Goto Top
Hm, ich frage mich jedes Mal, warum vom Rücken durch die Brust ins Auge...?

Die Lösung lautet hier CSS...


Lonesome Walker
scriptkiddy
scriptkiddy 11.08.2009 um 13:44:26 Uhr
Goto Top
Zitat von @16568:
Hm, ich frage mich jedes Mal, warum vom Rücken durch die Brust
ins Auge...?

Die Lösung lautet hier CSS...


Lonesome Walker


css ist ja schön und gut dann müsste ich aber dynamisch klassen den links zuordenen da nich alle links ein symbol bekommen und auch nich alle das selbe .... somit selbes problem komme also nich um php rum.
ich denke ich muss irgendwie ein passenden regulären ausdruck finden der mir das auch so zurückgibt wie ich die links habe dann kann ich die einfach mit dem was ich eigendlich haben will ersetzen .... aber zuerst muss ich die richtig auslesen können...
16568
16568 11.08.2009 um 13:53:00 Uhr
Goto Top
Ich sach's ja, man will helfen, und dann sowas... :-p

Anyway, alleine schon aus Usability-Gründen würde ich Dir dennoch CSS ans Herz legen...

klick mich


Lonesome Walker
godlie
godlie 11.08.2009 um 14:14:44 Uhr
Goto Top
So bin grad dabei rumzuspielen damit face-smile
Interessante aufgabenstellung.
godlie
godlie 11.08.2009 um 14:29:04 Uhr
Goto Top
So jetzt hätte ich schon mal was aber eine frage:

Wie sieht denn das aus mit dem <a href> sind da noch andere argumente drinen?
wie z.b. ein target eine class oder sonst was?
godlie
godlie 11.08.2009 um 14:37:51 Uhr
Goto Top
Naja auch egal obs dabei ist oder nicht hab die Lösung erweitert sodass die auch mitgenommen werden face-smile

$test = preg_replace('{<a[^>]href="(.*?)"(.*?)>(.*?)</a>}','{<a href="$3"$2>$3</a>}',$content);  

Damit dürftest du dann alle Links finden und diese auch ersetzen durch etwas was du brauchst.
Wenn noch fragen da sind einfach stellen.

gruß
scriptkiddy
scriptkiddy 11.08.2009 um 14:57:12 Uhr
Goto Top
Zitat von @16568:
Ich sach's ja, man will helfen, und dann sowas... :-p

Anyway, alleine schon aus Usability-Gründen würde ich Dir
dennoch CSS ans Herz legen...

[http://webseiten-professionell.wikidot.com/schnipsel:css-automatische-link-icons
klick mich]


Lonesome Walker

repekt vielen dank ich nehme alles zurück... ich merke ich habe bei css noch sehr viel zu lernen ;)
scriptkiddy
scriptkiddy 11.08.2009 um 15:09:41 Uhr
Goto Top
Zitat von @godlie:
Naja auch egal obs dabei ist oder nicht hab die Lösung erweitert
sodass die auch mitgenommen werden face-smile

> $test =
> preg_replace('{<a[^>]href="(.*?)"(.*?)>(.*?)</a>}','{<a  
> href="$3"$2>$3</a>}',$content);  
> 

Damit dürftest du dann alle Links finden und diese auch ersetzen
durch etwas was du brauchst.
Wenn noch fragen da sind einfach stellen.

gruß

Hi godlie,

Danke für deine Bemühungen deines scheint soweit auch zu fast zu funktionieren ich denke ich werde dies nutzen um den namen des files noch zu ändern...
allerdings scheint ed doch noch nicht ganz zu funktionieren hier mal der screen oben original unten mit deiner funktion ... scheint 1. nicht alle zu ändern (das mittlere nich) und 2. steht da unten einsam und verlassen noch eine 1 keine ahnung wieso ...

http://img220.imageshack.us/i/unbenanntvwh.jpg/

Gruß


Patrick
16568
16568 11.08.2009 um 15:10:34 Uhr
Goto Top
Nun ja, gewisse Sachen wirst Du aber mit PHP lösen müssen (z.B. speziellen Links spezielle Klassen zuzuweisen), damit CSS dann die nötigen Icons liefert.


Alex
godlie
godlie 11.08.2009 um 15:32:02 Uhr
Goto Top
Hoi,

nunja wenn du mir den html source zukommen lässt dann kann ich ja mal schaun was da lost ist.
Hab bei mir ja nur einen Testcontent erstellt.

gruß
scriptkiddy
scriptkiddy 11.08.2009 um 15:39:02 Uhr
Goto Top
Zitat von @godlie:
Hoi,

nunja wenn du mir den html source zukommen lässt dann kann ich
ja mal schaun was da lost ist.
Hab bei mir ja nur einen Testcontent erstellt.

gruß

<div class="left_2">  
            	<p><u><strong><span style="font-size: larger;">Projekte&nbsp;</span></strong></u><br /> &nbsp;</p> <table width="100%" height="124" cellspacing="1" cellpadding="1" border="0" style="">     <tbody>         <tr>             <td><p>Umbau / Neuplanung einer Arztpraxis f&uuml;r Allgemeinmedizin in Weil am Rhein&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p></td>             <td><a href="http://admin.architekturbuero-huegel.de/files/Referenz-Projekte-Arztpraxis.pdf" target="_blank">Referenz-Projekte-Arztpraxis.pdf</a></td>         </tr>         <tr>             <td>&nbsp;test2</td>             <td><a target="_blank" href="http://admin.architekturbuero-huegel.de/pageresources/file/Architektengesetz.pdf">Architektengesetz.pdf</a></td>         </tr>         <tr>             <td>&nbsp;test3</td>             <td><a href="http://admin.architekturbuero-huegel.de/pageresources/file/Referenz-Projekte-Buerogebaeude.pdf">Referenz-Projekte-Buerogebaeude.pdf</a></td>         </tr>         <tr>             <td>&nbsp;</td>             <td>&nbsp;</td></tr></tbody></table><p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p><p><u><strong><span style="font-size: larger;">Projekte&nbsp;</span></strong></u><br /> &nbsp;</p> <table width="100%" height="124" cellspacing="1" cellpadding="1" border="0" style="">     <tbody>         <tr>             <td><p>Umbau / Neuplanung einer Arztpraxis f&uuml;r Allgemeinmedizin in Weil am Rhein&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p></td>             <td>{<a href="Referenz-Projekte-Arztpraxis.pdf" target="_blank">Referenz-Projekte-Arztpraxis.pdf</a>}</td>         </tr>         <tr>             <td>&nbsp;test2</td>             <td><a target="_blank" href="http://admin.architekturbuero-huegel.de/pageresources/file/Architektengesetz.pdf">Architektengesetz.pdf</a></td>         </tr>         <tr>             <td>&nbsp;test3</td>             <td>{<a href="Referenz-Projekte-Buerogebaeude.pdf">Referenz-Projekte-Buerogebaeude.pdf</a>}</td>         </tr>         <tr>             <td>&nbsp;</td>             <td>&nbsp;</td></tr></tbody></table><p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p>			</div>  

          
            <!-- LEFT 2 ENDE -->
        </div><!-- LEFT ENDE -->

ich weis ist unschön aber habe die formatierung vom editor entfernen lassen um platz in der datenbank zu sparen ;)
godlie
godlie 11.08.2009 um 16:15:03 Uhr
Goto Top
Sodala,
ich konnte zwar keinen Fehler direkt feststellen, aber ich hab mir noch ein wenig den Kopf zerbrochen darüber.
Zum glück gibs eine sehr lässige Funktion die sich preg_replace_callback nennt.
Mit Hilfe derer können wir uns eine fkt anlegen mit derer Hilfe wir dann unseren Link überarbeiten können.
$test = preg_replace_callback('{<a[^>](.*?)href="(.*?)"(.*?)>(.*?)</a>}','reW',$content);  
var_dump($test);

function reW($matches) {
  $tm = explode("/",$matches[2]);  
  $aLink = $tm[count($tm)-1];
  return "<a $matches[1] href=\"http://what/ever/you/need/$aLink\" $matches[3]>$matches[4]</a>";  
}

Ich hab hier noch eingebaut das aus der URL in dem HREF der letzte "Zipfel" abgetrennt wird ..... dürfte ersichtlich sein oder?
Probier das mal aus
scriptkiddy
scriptkiddy 11.08.2009 um 17:34:35 Uhr
Goto Top
hi,

klasse so funktionierts ... muss jetzt nurnoch verhindern das der das auf die normalen links anwendet ....aber das bekomm ich jetzt sicher hin

Danke für deine Hilfe...


Gruß

Patrick
godlie
godlie 11.08.2009 um 17:53:33 Uhr
Goto Top
Hoi,

nunja wenn es nur darum geht links mit pdfs zu veränder, dann braucsht ja nur in der fkt reW prüfen ob ein .pdf vorhanden ist am schluss, andernfalls einfach den link normal zusammenpflastern und zurückgeben.....
scriptkiddy
scriptkiddy 11.08.2009 um 17:57:18 Uhr
Goto Top
jo hab ich bereits getan und das ganze noch schön in eine funktion zusammengefasst und dann eingebaut funktioniert perfekt.... ;)