Seite 1 von 1

Local Links MOD nicht nur für eigene Seite

Verfasst: 16.06.2007 00:44
von Parse Error
Hallo,

ich hätte gern, dass beim Local Links MOD nicht nur Links zur eigenen Website sondern z.B. auch zu www.zdf.de im selben Fenster (target="_self") geöffnet werden. (Externe Links werden ja üblicherweise in einem neuen Fenster geöffnet. Das soll auch so bleiben - nur halt für www.zdf.de nicht.)

Leider habe ich keinen Plan, wie der im Grunde genommen recht kurze MOD diesbezüglich angepasst werden müsste.

Kann mir jemand helfen? :)

P.E.

Verfasst: 17.06.2007 01:47
von Parse Error
Hi,

ich habe es jetzt wie folgt versucht. Und zwar habe ich in der bbcode.php in der function bbencode_second_pass($text, $uid) unterhalb von...

Code: Alles auswählen

    // MOD LOCAL URL BEGIN
    // do any local urls first...

    // [url]xxxx://www.phpbb.com[/url] code..
   $local_patterns[1] = "#\[url\]([a-z]+?://){1}(".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[1] = $bbcode_tpl['url_local1'];

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $local_patterns[2] = "#\[url\](".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[2] = $bbcode_tpl['url_local2'];

   // [url=xxxx://www.phpbb.com]phpBB[/url] code..
   $local_patterns[3] = "#\[url=([a-z]+?://){1}(".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\](.*?)\[/url\]#si";
   $local_replacements[3] = $bbcode_tpl['url_local3'];

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
   $local_patterns[4] = "#\[url=(".$_SERVER["SERVER_NAME"].")([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\](.*?)\[/url\]#si";
   $local_replacements[4] = $bbcode_tpl['url_local4'];
... folgendes hinzugefügt:

Code: Alles auswählen

    // [url]xxxx://www.phpbb.com[/url] code..
   $local_patterns[5] = "#\[url\]([a-z]+?://){1}(zdf.de)([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[5] = $bbcode_tpl['url_local1'];

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $local_patterns[6] = "#\[url\](zdf.de)([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[6] = $bbcode_tpl['url_local2'];
Funktioniert aber leider nicht. Auch nicht, wenn man zdf.de in zdf\.de ändert. Wie bringe ich den MOD dazu, nicht nur $_SERVER["SERVER_NAME"] sondern auch zdf.de als "local" zu behandeln?

P.E.

Verfasst: 17.06.2007 02:46
von gn#36
Ich nehme doch an, dass du die Adresse mit www. angeben willst, oder? Dann sollte das auch in dem Pattern drin vorkommen:

Code: Alles auswählen

    // [url]xxxx://www.phpbb.com[/url] code..
   $local_patterns[5] = "#\[url\]([a-z]+?://){1}(www\.zdf\.de)([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[5] = $bbcode_tpl['url_local1'];

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $local_patterns[6] = "#\[url\](www\.zdf\.de)([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)\[/url\]#si";
   $local_replacements[6] = $bbcode_tpl['url_local2'];
Wenn du das machst solltest du über www.zdf.de zugreifen können, deine Variante deckt nur zdf.de ab (ohne www.). Ich gehe jetzt mal davon aus dass der Inhalt von $bbcode_tpl['url_local1'] passend ist.

Verfasst: 17.06.2007 23:10
von Parse Error
Hallo gn#36,

besten Dank - das war es. Auf das www hatte ich ganz vergessen. Es scheint übrigens egal zu sein, ob man einen \ vor .de setzt oder nicht - scheint beides zu funktionieren.
Hier noch schnell die Lösung für die Magic URLs in der function make_clickable($text): Unterhalb von

Code: Alles auswählen

// MOD LOCAL URL BEGIN
// match a local URL and replace with a target="_self" href
$ret = preg_replace("#([\n ])([a-z]+?)://(".$_SERVER["SERVER_NAME"].")((?:/[^\t <\n\r]*)?)#i", "\\1<a href=\"\\2://\\3\\4\" target=\"_self\" class=\"postlink\">\\2://\\3\\4</a>", $ret);
$ret = preg_replace("#([\n ])(".$_SERVER["SERVER_NAME"].")((?:/[^\t <\n\r]*)?)#i", "\\1<a href=\"http://\\2\\3\" target=\"_self\" class=\"postlink\">\\2\\3</a>", $ret);
füge hinzu:

Code: Alles auswählen

// behandle einen Link zu www.zdf.de als local link
$ret = preg_replace("#([\n ])([a-z]+?)://(www\.zdf\.de)((?:/[^\t <\n\r]*)?)#i", "\\1<a href=\"\\2://\\3\\4\" target=\"_self\" class=\"postlink\">\\2://\\3\\4</a>", $ret);
$ret = preg_replace("#([\n ])(www\.zdf\.de)((?:/[^\t <\n\r]*)?)#i", "\\1<a href=\"http://\\2\\3\" target=\"_self\" class=\"postlink\">\\2\\3</a>", $ret);
Danke noch einmal!
P.E.

Verfasst: 18.06.2007 00:26
von gn#36
es ist nicht egal ob der Backslash vor dem Punkt ist oder nicht. Der Unterschied ist, dass ein Punkt jegliches Zeichen erlaubt, u.a. auch den Punkt, somit ginge dann ohne Slash auch wwwxzdf.de oder etwas ähnliches. Du solltest daher den Slash einbauen, dieser hebt die besondere Bedeutung des Punkts auf und wandelt ihn in einen "normalen" Punkt um. Das gleiche gilt für Klammern () [] {}, das Fragezeichen ? das Plus +, den Stern * ...
-> Alle Zeichen mit Sonderbedeutung können in "normale" Zeichen umgewandelt werden indem der Backslash davor steht.
-> Das gleiche gilt für den Backslash, der ist auch zu behandeln wie ein Zeichen mit Sonderbedeutung (ist es ja auch)
Falls du noch mehr dazu wissen willst such mal nach regulären Ausdrücken.

Verfasst: 18.06.2007 01:45
von Parse Error
Danke. :) Hatte das nur gedacht, weil Du weiter oben in Deinem Code selbst einmal den Backslash vor einem Punkt weggelassen hast (www\.zdf.de). Aber nun ist alles klar.

P.E.

Verfasst: 18.06.2007 20:05
von gn#36
Das lag wohl am Copy & Paste, der Backslash sollte da schon rein...