Seite 1 von 1

Erweiterung BBCode um interne Links

Verfasst: 29.07.2006 16:50
von iovialis
Habe eine Änderung für mich durchgeführt, um zwischen internen (selbiges Fenster) und externen Links (neues Fenster -> Target) zu unterscheiden:
die externen Links gehen alle über folgende BBCode-Angaben (standard):

Code: Alles auswählen

[url]xxxx://www.phpbb.com[/url]
[url]www.phpbb.com[/url]
[url=xxxx://www.phpbb.com]phpBB[/url]
[url=www.phpbb.com]phpBB[/url]
Meine Erweiterung ist, daß nun folgendes als interner Link gehandhabt wird:

Code: Alles auswählen

[link=xxxx://www.phpbb.com]phpBB[/link]
Dabei habe ich folgende Dinge in der Datei includes/bbcode.php eingefügt:
nach:

Code: Alles auswählen

  $bbcode_tpl['url4'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']);
  $bbcode_tpl['url4'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url4']);
folgendes eingefügt:

Code: Alles auswählen

  $bbcode_tpl['link'] = str_replace('{LINK}', '\\1', $bbcode_tpl['link']);
  $bbcode_tpl['link'] = str_replace('{DESCRIPTION}', '\\2', $bbcode_tpl['link']);
nach:

Code: Alles auswählen

  // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
  $patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
  $replacements[] = $bbcode_tpl['url4'];
folgendes eingefügt:

Code: Alles auswählen

  // [link=xxxx://www.phpbb.com]phpBB[/link] code..
  $patterns[] = "#\[link=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/link\]#is";
  $replacements[] = $bbcode_tpl['link'];
nach:

Code: Alles auswählen

  // matches an email@domain type address at the start of a line, or after a space.
  // Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
  $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
folgendes eingefügt:

Code: Alles auswählen

  // DJ: matches an "link://yyyy" URL at the start of a line, or after a space.
  // DJ: link can only be alpha characters.
  // DJ: yyyy is anything up to the first space, newline, comma, double quote or <
  $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\">\\2</a>", $ret);
In der Datei templates/template_name/bbcode.tpl habe ich noch folgende Änderung gemacht:
nach:

Code: Alles auswählen

<!-- BEGIN url --><a href="{URL}" target="_blank">{DESCRIPTION}</a><!-- END url -->
folgendes eingefügt:

Code: Alles auswählen

<!-- BEGIN link --><a href="{LINK}">{DESCRIPTION}</a><!-- END link -->
Das Ganze funktioniert soweit, wobei ich betonen möchte, daß ich das aus Eigenbedarf geschrieben hatte und nix passendes dazu fand (einen MOD) - jedenfalls funktioniert es und stelle es hier zur Diskussion, damit jemand einen MOD schreiben kann, denn ich denke, daß es nicht unbedingt eine "saubere" Methode ist.

Viele Grüße und Danke für Meinungen!

Iovialis