Dynamischer BBCode
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Dynamischer BBCode
Moin,
ich weiß nicht genau, ob das hier das richtige Forum ist, aber ich versuch's mal. Und zwar möchte ich einen BBCode haben, dessen Funktionsweise durch dynamische Komponenten beeinflusst wird. Simpel ausgedrückt: Ich möchte durch einen BBCode einen Link einfügen, der sich je nach Einstellung ändern (Domain, Pfad etc.) kann.
Wie es aussieht muss ich dafür die bbcode.php und/oder message_parser.php ändern. Aber inwiefern? Weiß jemand, wie sich das bewerkstelligen lässt?
Gruß faraday
ich weiß nicht genau, ob das hier das richtige Forum ist, aber ich versuch's mal. Und zwar möchte ich einen BBCode haben, dessen Funktionsweise durch dynamische Komponenten beeinflusst wird. Simpel ausgedrückt: Ich möchte durch einen BBCode einen Link einfügen, der sich je nach Einstellung ändern (Domain, Pfad etc.) kann.
Wie es aussieht muss ich dafür die bbcode.php und/oder message_parser.php ändern. Aber inwiefern? Weiß jemand, wie sich das bewerkstelligen lässt?
Gruß faraday
Re: Dynamischer BBCode
Okay danke. Bis hier hin genau das, was ich brauche. Allerdings verzweifel ich gerade daran, ein "=" einzufügen, wie es bei euch mit der KB geht. Wie habt ihr das dort gemacht?
P.S. ich fände es sogar besser, wenn das Ganze nicht über die Datenbank liefe, sondern im Quellcode implementiert ist, damit ich es nach belieben an- und abstellen kann und nicht irgend ein Trottel den BBCode im ACP versehentlich ändert.
P.S. ich fände es sogar besser, wenn das Ganze nicht über die Datenbank liefe, sondern im Quellcode implementiert ist, damit ich es nach belieben an- und abstellen kann und nicht irgend ein Trottel den BBCode im ACP versehentlich ändert.
Re: Dynamischer BBCode
Einfach über den BBCode-Editor eingegeben Der BBCode wurde noch nicht mal in der Datenbank modifiziert, sondern mit Bordmitteln realisiert:faraday hat geschrieben:Allerdings verzweifel ich gerade daran, ein "=" einzufügen, wie es bei euch mit der KB geht. Wie habt ihr das dort gemacht?
Code: Alles auswählen
BBCode: [kb={IDENTIFIER}]{TEXT}[/kb]
HTML-Ersetzung: <a href="/kb/{IDENTIFIER}" class="postlink kb-link">{TEXT}</a>
In deinem Forum haben irgendwelche Trottel Adminrechte? Vielleicht solltest du dann mal überdenken, nach welchen Kriterien du Teammitglieder aufnimmstfaraday hat geschrieben:P.S. ich fände es sogar besser, wenn das Ganze nicht über die Datenbank liefe, sondern im Quellcode implementiert ist, damit ich es nach belieben an- und abstellen kann und nicht irgend ein Trottel den BBCode im ACP versehentlich ändert.

Wenn du es händisch machen willst, dann musst du die entsprechenden regulären Ausdrücke in die Funktion bbcode_second_pass() einbauen. Dann entfallen jedoch die Optimierungen von phpBB, d.h. dein regulärer Ausdruck wird immer ausgeführt, egal ob der BBCode überhaupt genutzt wird oder nicht.
KB:knigge
Re: Dynamischer BBCode
Das heißt also quasi zwei verschiedene BBCodes kreieren: einmal mit "=" und einmal ohne?Pyramide hat geschrieben:Einfach über den BBCode-Editor eingegeben Der BBCode wurde noch nicht mal in der Datenbank modifiziert, sondern mit Bordmitteln realisiert:Code: Alles auswählen
BBCode: [kb={IDENTIFIER}]{TEXT}[/kb] HTML-Ersetzung: <a href="/kb/{IDENTIFIER}" class="postlink kb-link">{TEXT}</a>
Nein, nein. Das wär's noch.Pyramide hat geschrieben:In deinem Forum haben irgendwelche Trottel Adminrechte? Vielleicht solltest du dann mal überdenken, nach welchen Kriterien du Teammitglieder aufnimmst
Wenn du es händisch machen willst, dann musst du die entsprechenden regulären Ausdrücke in die Funktion bbcode_second_pass() einbauen. Dann entfallen jedoch die Optimierungen von phpBB, d.h. dein regulärer Ausdruck wird immer ausgeführt, egal ob der BBCode überhaupt genutzt wird oder nicht.

Re: Dynamischer BBCode
Für die Nachwelt und diejenigen, die Verbesserungsvorschläge haben einmal, wie ich vorgegangen bin:
includes/message_parser.php geöffnet
gesucht und danach eingefügt:
gesucht und davor eingefügt:
dann includes/bbcode.php geöffnet und
gesucht und davor eingefügt:
und in includes/functions_wiki.php nun die Funktion wiki_second_pass_replace() eingefügt:
Vielleicht ist das Ganze ja zu umständlich. Ich lasse mich gerne belehren (vielleicht Methoden zur Klasse bbcode hinzufügen über functions_wiki.php?). Aber ich denke, dass diese Methode Funktionalität und Dynamik gewährleistet.
Gruß faraday
includes/message_parser.php geöffnet
Code: Alles auswählen
'email' => array('bbcode_id' => 10, 'regexp' => array('#\[email=?(.*?)?\](.*?)\[/email\]#ise' => "\$this->validate_email('\$1', '\$2')")),
Code: Alles auswählen
'wiki' => array('bbcode_id' => 99, 'regexp' => array('#\[wiki(=([a-zA-Z0-9-+.,_:]+))?\](.*)\[/wiki\]#iUe' => "\$this->bbcode_wiki('\$2', '\$3')")),
Code: Alles auswählen
/**
* Validate url
*
* @param string $var1 optional url parameter for url bbcode: [url(=$var1)]$var2[/url]
* @param string $var2 url bbcode content: [url(=$var1)]$var2[/url]
*/
function validate_url($var1, $var2)
Code: Alles auswählen
/**
* bbcode_wiki
*/
function bbcode_wiki($var1, $var2)
{
global $config;
$id = ($var1) ? $var1 : $var2;
$id = trim($id);
if(!$config['wiki_bbcode_enabled'] || !$id)
{
return '[wiki' . (($var1) ? '=' . $var1 : '') . ']' . $var2 . '[/wiki]';
}
$this->parsed_items['wiki']++;
return ($var1) ? '[wiki=' . $this->bbcode_specialchars($id) . ':' . $this->bbcode_uid . ']' . $var2 . '[/wiki:' . $this->bbcode_uid . ']' : '[wiki:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($id) . '[/wiki:' . $this->bbcode_uid . ']';
}
Code: Alles auswählen
default:
if (isset($rowset[$bbcode_id]))
{
Code: Alles auswählen
case 99:
global $phpbb_root_path, $phpEx, $config;
include($phpbb_root_path . 'includes/functions_wiki.' . $phpEx);
$this->bbcode_cache[$bbcode_id] = array(
'preg' => array(
'#\[wiki:$uid\]((.*?))\[/wiki:$uid\]#se' => "\wiki_second_pass_replace('\$1')",
'#\[wiki=([^\[]+?):$uid\](.*?)\[/wiki:$uid\]#se' => "\wiki_second_pass_replace('\$1','\$2')",
)
);
break;
Code: Alles auswählen
function wiki_second_pass_replace($var1, $var2='')
{
global $config, $user;
if(defined('CORRECT_WIKI_PATH') && $config['wiki_bbcode_enabled'] && $config['wikimod_activate'])
{
list($id, $hash) = explode('#',$var1,2);
$id = cleanID($id);
$desc = ($var2) ? $var2 : $id;
$title = $id;
$link = wl($id,null,null,null,true);
$link .= ($hash) ? '#' . $hash : '';
if(useHeading('content') && p_get_first_heading($id))
{
$title = p_get_first_heading($id);
if(!$var2) $desc = $title;
}
if(page_exists($id))
{
$style = 'style="color: #090 !important"';
}
else
{
$style = 'style="color: #f30 !important"';
}
return '<a ' . $style . ' href="' . $link . '" title="' . $title . '">' . $desc . '</a>';
}
return "[wiki" . (($var2) ? "=" . $var1 : '') . "]" . (($var2) ? $var2 : $var1) . "[/wiki]";
}
Gruß faraday