Seite 1 von 1

BBCodes bei phpbb3

Verfasst: 27.09.2007 18:03
von Sanchez17
Hola,


wollte heute nun ein paar Mods von mir mal updaten, um mich in phpbb3 ein bisschen besser einzuarbeiten. Bis jetzt klappt es relativ gut, nur bei den BBCodes stockt es ein wenig.

Hab mir diesen Artikel (Klick mich) jetzt schon den ganzen tag durchgelesen,und versucht dies umzusetzen, bis jetzt aber ohne Erfolg.

Hier erstmal der Code:

Code: Alles auswählen

		$sql = "SELECT id, titel, message, bbcode_uid FROM stream_pages WHERE id = '1' ";
    	if ( !($result = $db->sql_query($sql)) )
      	{
      		message_die(GENERAL_ERROR, 'Konnte keine Daten laden', '', __LINE__,__FILE__, $sql);
      	}

      	while( $row = $db->sql_fetchrow($result) )
      	{

$bbcode_options = ((1) ? OPTION_FLAG_BBCODE : 0) +
    ((1) ? OPTION_FLAG_SMILIES : 0) + 
    ((1) ? OPTION_FLAG_LINKS : 0);
    
      	$message = generate_text_for_display($row['message'], $row['bbcode_uid'], '', $bbcode_options);
}
Da BBCodes, Smilies und Link immer geparst werden sollen, fand ich es überflüssig dies in die Datenbank zu schreiben, und hab die wie man sieht manuel auf 1 gestellt.

Was bei $row['bbcode_bitfield'] rein muss, weiß ich nicht. Da in meinen Posts aber nirgends dort was steht, hab ich dies einfach leer gelassen.

Mein Problem ist jetzt, das die BBCodes nicht geparst werden. Die BBcode_uid wird allerdings entfernt.

Kann mir da vll. jemand helfen?

Und mal so eine kleine Nabenfrage: Die alten SQL Anweisungen kann man die lassen?

Verfasst: 29.09.2007 02:07
von Sanchez17
Konnte es bis jetzt leider immernoch nicht lösen.... :-?

Verfasst: 29.09.2007 23:27
von Sanchez17
Hab zwar eine Übergangslösung gefunden, nämlich die BBcode autoamtisch zu lösschen und dann in HTML umzuwandeln, aber das ist keine Brauchbare Lösung.

Wo ist den oben mein Denkfehler?

Und vll. noch was hinterher: Obwohl ich aus der Datenbank geladene Texte via utf8_encode() umschreibe, werden die Umlaute und Co falsch dargestellt. Was mach ich falsch?

Verfasst: 30.09.2007 00:21
von Pyramide
In welcher Form liegt der Text denn in der Datenbank vor? Wie bei phpBB2 erfolgt die Umwandlung der BBCodes bei phpBB3 nämlich auch in zwei Schritten. generate_text_for_storage() entspricht dabei bbencode_first_pass() und generate_text_for_display() entspricht bbencode_second_pass().

Das bitfield enthält eine Liste, welche BBCodes in dem Text verwendet werden, damit beim Anzeigen auch nur die wirklich benötigten BBCodes aus der DB geladen werden müssen. Der Wert wird von generate_text_for_storage gesetzt, muss dann in der DB gespeichert werden und wieder an generate_text_for_display übergeben werden.

utf8_encode() sollte nur erforderlich sein, wenn du Daten aus phpBB2-Tabellen oder externen Quellen importieren willst - innerhalb von phpBB3 wird nämlich überall UTF-8 genutzt.

Wenn die Optionen sowieso immer fest sind, kannst du anstatt deines Codes oben auch einfach

Code: Alles auswählen

$bbcode_options = OPTION_FLAG_BBCODE + OPTION_FLAG_SMILIES + OPTION_FLAG_LINKS;
schreiben.

Verfasst: 30.09.2007 02:05
von Sanchez17
Vielen Dank :wink:

Dann ist es doch viel einfacher, als ich dachte.

Leider klappt das Einspeichern aber nicht.

Wenn ich generate_text_for_storage() benutze gibt er mir eine leere Variabeln zurück, sprich: Ich speichere wenn ich BBCodes benutzte eine leere Seite. Lasse ich diesen Schritt aus, wird alles korrekt, natürliche ohne BBCodes, gespeichert.


Ich kann den Fehler nicht finden. Liegt es vll darain, weil ich

$message = generate_text_for_storage() benutzte statt generate_text_for_storage() allein stehen zu lassen, wie es im Wiki steht?

Nur, dann wüsste ich nicht, welche Variabel ich benutzten müsste um diese in die SQL Anweisung zu stecken.

Hier mal der ganze Code für das Einspeichern:

Code: Alles auswählen

		$page_id = intval($_POST['page_id']);

		if($_POST['save'] == 'true')
		{
			$uid = $bitfield = $options = '';
			$allow_bbcode = $allow_urls = $allow_smilies = true;
			$titel = generate_text_for_storage($_POST['titel'], $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);
			$message = generate_text_for_storage($_POST['message'], $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);

			$sql = "UPDATE stream_pages Set titel = '$titel', message = '$message', bbcode_uid = '$uid', bbcode_bitfield = '$bitfield' WHERE id = '$page_id'";
			$result = $db->sql_return_on_error(true);
			$result = $db->sql_query($sql);
      		$note_save = '<font color="darkgreen">Seite wurde erfolgreich gespeichert</font>';

		}

Verfasst: 30.09.2007 04:11
von Pyramide
Sanchez17 hat geschrieben:Liegt es vll darain, weil ich

$message = generate_text_for_storage() benutzte statt generate_text_for_storage() allein stehen zu lassen, wie es im Wiki steht?

Nur, dann wüsste ich nicht, welche Variabel ich benutzten müsste um diese in die SQL Anweisung zu stecken.
Ja liegt es. generate_text_for_storate() modifiziert die übergebene Variablen und gibt nichts zurück.

Verfasst: 30.09.2007 12:13
von Sanchez17
Ah ok.

Habs geändert, getestet und klappt alles wunderbar.

Vielen dank :wink: