BBCodes bei phpbb3

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Sanchez17
Mitglied
Beiträge: 913
Registriert: 10.12.2005 22:21
Wohnort: Moers / Sevilla
Kontaktdaten:

BBCodes bei phpbb3

Beitrag 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?
Viva el betís, mi amor :-)
Wir gehn voran, als euer zwölfter Mann, scheiß egal wie weit, ob Sturm oder Schnee, MSV Duisburg oé
Benutzeravatar
Sanchez17
Mitglied
Beiträge: 913
Registriert: 10.12.2005 22:21
Wohnort: Moers / Sevilla
Kontaktdaten:

Beitrag von Sanchez17 »

Konnte es bis jetzt leider immernoch nicht lösen.... :-?
Viva el betís, mi amor :-)
Wir gehn voran, als euer zwölfter Mann, scheiß egal wie weit, ob Sturm oder Schnee, MSV Duisburg oé
Benutzeravatar
Sanchez17
Mitglied
Beiträge: 913
Registriert: 10.12.2005 22:21
Wohnort: Moers / Sevilla
Kontaktdaten:

Beitrag 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?
Viva el betís, mi amor :-)
Wir gehn voran, als euer zwölfter Mann, scheiß egal wie weit, ob Sturm oder Schnee, MSV Duisburg oé
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
Sanchez17
Mitglied
Beiträge: 913
Registriert: 10.12.2005 22:21
Wohnort: Moers / Sevilla
Kontaktdaten:

Beitrag 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>';

		}
Viva el betís, mi amor :-)
Wir gehn voran, als euer zwölfter Mann, scheiß egal wie weit, ob Sturm oder Schnee, MSV Duisburg oé
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
Sanchez17
Mitglied
Beiträge: 913
Registriert: 10.12.2005 22:21
Wohnort: Moers / Sevilla
Kontaktdaten:

Beitrag von Sanchez17 »

Ah ok.

Habs geändert, getestet und klappt alles wunderbar.

Vielen dank :wink:
Viva el betís, mi amor :-)
Wir gehn voran, als euer zwölfter Mann, scheiß egal wie weit, ob Sturm oder Schnee, MSV Duisburg oé
Antworten

Zurück zu „Coding & Technik“