Seite 1 von 1
BBCode um Text zu ersetzen?
Verfasst: 09.03.2006 14:49
von WTB
Hi, ich bastel grad an einem BBCode für mein Forum und komme da gerade nicht weiter...
Und zwar habe ich im Profil ein neues Feld eingefügt über das die User zwischen 2 Optionen wählen können.
Nun möchte ich einen BBCode erstellen, z.B. [bla]Hier ein Text[/bla] welche bewirkt dass User, welche im Profil Option 1 gewählt haben den Text "Hier ein Text" zu sehen bekommen, aber User die Option 2 gewählt haben einen anderen Text, z.B. "Um diesen Text zu sehen musst du im Profil Option 1 auswählen".
Ich habe schon versucht andere BBCode Mods einfach umzubauen, aber die ersetzen ja meist nur den BBCode selber und nicht das was dazwischen ist...
Verfasst: 09.03.2006 15:44
von punkface
Hallo
3 Fragen:
- Wie soll der BBCode heißen? Also was soll man bei [bla][/bla] anstelle von eben bla eingeben müssen?
- Wie heißt die Spalte in der prefix_users in der der Wert des neuen Feldes gespeichert wird?
- Welche beiden Werte gibt es (die im neuen Feld in der Datenbank gespeichert werden können), und welcher von beiden bedeutet übertragen "Der Text zwischen den neuen BBCode soll angezeigt werden"?
Verfasst: 09.03.2006 15:57
von WTB
1. [spoiler] (soll im Grunde ein Spoiler Mod ohne "hidden Text" werden)
2. user_spoiler
3. Das Feld kann den Wert 1 oder 0 haben, bei 1 soll der normale Text angezeigt werden, bei 0 der Ersatztext.
Verfasst: 09.03.2006 16:53
von punkface
edit 16.50: Fuck.. war ein Fehler in der Anleitung .. sollte jetzt so stimmen

edit 17.40: So, jetzt sollte es aber stimmen
Versuchs mal damit:
bbcode.php
suche
Code: Alles auswählen
function bbencode_second_pass($text, $uid)
{
global $lang, $bbcode_tpl;
ersetzten mit
Code: Alles auswählen
function bbencode_second_pass($text, $uid)
{
global $lang, $bbcode_tpl, $userdata;
suche
Code: Alles auswählen
// Patterns and replacements for URL and email tags..
$patterns = array();
$replacements = array();
danach einfügen
Code: Alles auswählen
// [spoiler] and [/spoiler]
if(!$userdata['user_spoiler'])
{
$patterns[] = "#\[spoiler:$uid\](.*?)\[/spoiler:$uid\]#si";
$replacements[] = $bbcode_tpl['kein_spoiler'];
}
else
{
$text = str_replace("[spoiler:$uid]", $bbcode_tpl['spoiler_open'], $text);
$text = str_replace("[/spoiler:$uid]", $bbcode_tpl['spoiler_close'], $text);
}
suche
Code: Alles auswählen
// Remove our padding from the string..
return substr($text, 1);;
} // bbencode_first_pass()
davor einfügen
Code: Alles auswählen
// [spoiler] and [/spoiler]
$text = preg_replace("#\[spoiler\](.*?)\[/spoiler\]#si", "[spoiler:$uid]\\1[/spoiler:$uid]", $text);
bbcode.tpl
(musst du für jedes Installiertes Template ändern)
am Ende einfügen
Code: Alles auswählen
<!-- BEGIN kein_spoiler -->HTML Code und Text wenn der Spoiler nicht angezeigt werden soll<!-- END kein_spoiler -->
<!-- BEGIN spoiler_open -->HTML Code für Anfang des Spoilers<!-- END spoiler_open -->
<!-- BEGIN spoiler_close -->HTML Code für Ende des Spoilers<!-- END spoiler_close -->
(Das muss natürlich noch entsprechend ersetzt werden)
Verfasst: 09.03.2006 17:02
von WTB
Funktioniert leider nicht, es wird nur folgendes angezeigt:
[spoiler:972e8285c2]Dies ist ein Spoiler![/spoiler:972e8285c2]
Verfasst: 09.03.2006 17:04
von punkface
Hast du das auch eingebaut:
punkface hat geschrieben:bbcode.php
suche
Code: Alles auswählen
// Patterns and replacements for URL and email tags..
$patterns = array();
$replacements = array();
danach einfügen
Code: Alles auswählen
// [spoiler] and [/spoiler]
if(!$userdata['user_spoiler'])
{
$patterns[] = "#\[spoiler:$uid\](.*?)\[/spoiler:$uid\]#si";
$replacements[] = $bbcode_tpl['kein_spoiler'];
}
else
{
$text = str_replace("[spoiler:$uid]", $bbcode_tpl['spoiler_open'], $text);
$text = str_replace("[/spoiler:$uid]", $bbcode_tpl['spoiler_close'], $text);
}
Verfasst: 09.03.2006 17:06
von WTB
Jo, das is eingebaut.
Verfasst: 09.03.2006 17:08
von punkface
Verlink mal bitte die bbcode.php als .txt-Datei (siehe KB:datei)
Verfasst: 09.03.2006 17:11
von WTB
//Edit: Habs geschafft
Das:
Code: Alles auswählen
// [spoiler] and [/spoiler]
$text = preg_replace("#\[spoiler\](.*?)\[/spoiler\]#si", "[spoiler:$uid]\\1[/spoiler:$uid]", $text);
musste an anderer Stelle eingefügt werden, nämlich vor
Code: Alles auswählen
// Patterns and replacements for URL and email tags..
$patterns = array();
$replacements = array();
Verfasst: 09.03.2006 17:40
von punkface
Naja, eigentlich sollte es so sein:
suche
Code: Alles auswählen
$text = preg_replace($patterns, $replacements, $text);
// [spoiler] and [/spoiler]
$text = preg_replace("#\[spoiler\](.*?)\[/spoiler\]#si", "[spoiler:$uid]\\1[/spoiler:$uid]", $text);
// Remove our padding from the string..
$text = substr($text, 1);
return $text;
} // bbencode_second_pass()
ersetzte mit
Code: Alles auswählen
$text = preg_replace($patterns, $replacements, $text);
// Remove our padding from the string..
$text = substr($text, 1);
return $text;
} // bbencode_second_pass()
suche
Code: Alles auswählen
// Remove our padding from the string..
return substr($text, 1);;
} // bbencode_first_pass()
ersetzten mit
Code: Alles auswählen
// [spoiler] and [/spoiler]
$text = preg_replace("#\[spoiler\](.*?)\[/spoiler\]#si", "[spoiler:$uid]\\1[/spoiler:$uid]", $text);
// Remove our padding from the string..
return substr($text, 1);;
} // bbencode_first_pass()
Die Anleitung war immernoch nicht fehlerfrei..
bzw. Ich hab grad noch was entdeckt:
Wenn man ein Beitrag mit einem Spoiler zitiert, sieht man den Spoiler in dem Textfeld auch wenn man im Profil ausgewählt hat, dass man Spoiler nicht sehen will. Dafür muss ich mir noch was überlegen...