PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : plugin/eigener bbcode


cycomate
05.02.2006, 13:31
Hallo,

da ich leider keine Schreibrechte im "vB 3.5 Code-Modifikationen und Plugins"-Forum habe, poste ich mal hier.

Ich habe ein plugin erstellt, welches den eingeklammerten Text zeilenweise einfärbt und Zeilennummern davorschreibt, dazu noch ein kleiner Rahmen drumrum, alles funktioniert auch wunderbar.
Wenn man allerdings jetzt diesen bbcode nutzt und sich eine Vorschau anzeigen läßt, bevor man den Beitrag abschickt oder nach dem Erstellen den Beitrag nochmal editieren will, erscheint der Text im wysiwyg-Editor bereits fertig geparsed. Schickt man den Beitrag dann entgültig ab, verliert der Text die Hintergrundfarben der jeweiligen Zeilen, den Rahmen und die Textformatierungen. Kurz: es sieht grauenhaft aus.

Die Lösung war die Auflistung meines bbcodes in der includes/class_bbcode_alt.php, Klasse vB_BbCodeParser_Wysiwyg im Array $unparsed_tags. Jetzt wird der Text im wysiwyg-Editor zwischen meinen tags nicht mehr geparsed, sondern als text dargestellt. Perfekt.

Latürnich ist eine Code-Modifikation suboptimal.
Das plugin wird vom hook bbcode_fetch_tags aufgerufen und sieht etwa so aus:
if (!function_exists('handle_bbcode_meinbbcode')) {
function handle_bbcode_meinbbcode(&$parser, $text) {
[...]
}
}

$tag_list['no_option']['meinbbcode'] = array(
'callback' => 'handle_external',
'external_callback' => 'handle_bbcode_meinbbcode',
'strip_empty' => true,
'stop_parse' => true,
'disable_smilies' => true,
'disable_wordwrap' => true,
'strip_space_after' => 1
);
Ich habe noch mit sowas herumexperimentiert:
if (get_class($this) == 'vB_BbCodeParser_Wysiwyg') {
$unparsed_tags[] = 'meinbbcode';
}
(hook bbcode_create), aber das hat keinen Erfolg gebracht.

Hat da vielleicht jemand eine Idee, wie ich das ohne Codemodifikation lösen kann?

Andreas
07.02.2006, 04:07
Eigentlich hast du es ja schon fast :)

bbcode_create

if ($this->is_wysiwyg())
{
$this->unparsed_tags[] = 'meinbbcode';
}


(Die Abfrage mit get_class() geht natürlich auch, so finde ich es aber schöner ;))

cycomate
07.02.2006, 10:19
Funktioniert, danke :)