Weiterverwendung von BBCode extern möglich? Wie?

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
xepho
Mitglied
Beiträge: 7
Registriert: 05.02.2008 08:47

Weiterverwendung von BBCode extern möglich? Wie?

Beitrag von xepho »

Grüßt euch!

Ich bin gerade dabei, mein PhpBB ein wenig anzupassen, und möchte daher eine Newsseite schaffen, die aus Foren Beiträge ausliest und diese als News ausgibt.
Alles soweit kein Problem.

ALLERDINGS kommen mir jetzt die von phpBB vordefinierten Container [/b ], [/i ] und so weiter in die Quere.

Ein in der Datenbank abgespeicherter und vorher als Bold markierter Text sieht demnach bei mir so aus:

Code: Alles auswählen

[b:01e02eee58]mein Text[/b:01e02eee58]
Meine Frage ist nun, ob ich auf irgendeine Art und Weise auf die "Übersetzungsfunktionen" des PHPBB zugreifen kann. Das Forum und die Website liegen auf dem selben Server, sind durch Verzeichnisse aufeinander verbunden, hier gibt es keine Blockade.

Also... entweder würde ich gerne die Newseinträge ebenso so formatiert sehen ODER wenn das nicht geht, fragen ob außer einem Stringsplitten eine andere Möglichkeit besteht, dass man diese vorgefertigten Codeschnipsel entfernen kann aus der Ausgabe.

Es geht im übrigen durchaus darum, dass ich das "von Hand" machen möchte, vorgefertigte Newsscripts sind begrenzt gewünscht, außer eben zum abgucken, da die grafische und doch recht spezielle Oberfläche meiner Site ein einbinden nur begrenzt zulässt. Außerdem möchte ich tatsächlich einfach nur basteln und rumprobieren :)

Schon einmal ein Danke im Voraus..

.:xepho
Zuletzt geändert von xepho am 06.02.2008 10:20, insgesamt 1-mal geändert.
xepho
Mitglied
Beiträge: 7
Registriert: 05.02.2008 08:47

Beitrag von xepho »

Also... ich bin einen Schritt weitergekommen, aber ich denke ich machs noch viel zu kompliziert:

Der BBCode scheint verankert in mehreren Dateien:

templates/*templatename*/bbcode.tpl
includes/bbcode.php

Zweitere Datei hat anfangs eine Abfrage drin, die ich rausgenommen habe:

Code: Alles auswählen

if ( !defined('IN_PHPBB') )
{
	die("Hacking attempt");
}
Die TPL und die PHP habe ich also für mein Script verfügbar gemacht, ergo, kopiert und per include reingeholt.
Wenn ich nun den aus "bb2_posts_text" ausgelesenen String da durchjage ("$bbcode_uid" ist ebenfalls aus "bb2_posts_text" auszulesen):

Code: Alles auswählen

	$message = ($board_config['allow_bbcode']) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace("/\:$bbcode_uid/si", '', $message);
Wird aus

Code: Alles auswählen

[b:01e02eee58]mein Text[/b:01e02eee58]
ein

Code: Alles auswählen

[b]mein Text[/b]
Das kann HTML so noch nicht interpretieren, klar, darum suche ich jetzt gerade noch nach der Funktion/dem Codeschnipsel der das möglich macht.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Es ist eigentlich gar kein Problem Dir sofort die Lösung zu posten. Jedoch weiß ich aus eigener Erfahrung, dass man sehr viel besser lernt, wenn man sich selber "duchquält" und wie ich sehe, stehst Du nicht auf verlorenem Posten, sondern kommst Schritt für Schritt weiter.

Mein Tip: Schau einfach nach wie im viewtopic.php vorgegangen wird um die Postings anzuzeigen.

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
xepho
Mitglied
Beiträge: 7
Registriert: 05.02.2008 08:47

Beitrag von xepho »

Grah *g*

Guter Gedanke, du hast im Grunde Recht. Ich mach das hier um mal wieder in die Materie reinzukommen... von daher ist selbst-ausprobieren definitiv nicht die falscheste Variante.

In der viewtopic.php frickel ich schon die ganze Zeit rum:

Momentan habe ich die variable $message als das letztendliche Posting identifiziert, die am Ende geparst wird unter
//
// Parse message and/or sig for BBCode if reqd
//
Da ich aber NUR den BBCode haben möchte, habe ich aus den folgenden Abschnitten das
if ($bbcode_uid != '')
{
$message = ($board_config['allow_bbcode']) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace("/\:$bbcode_uid/si", '', $message);
}
rausgelutscht, wie bereits angedeutet.
Dazu noch das Newline-parsing und gut ist.
Wenn ich die hier durchgejagte $message jetzt ausgebe kommt das oben genannte Ergebnis, also nix finito.
Ich möchte zudem weder ein Template nutzen noch die Signaturen überprüfen... von daher stehe ich jetzt ein wenig auf dem Schlauch.
Es steht kommentiert drin, dass die Reihenfolge der einzelnen Parsings benötigt wird, ABER, ich möchte ja NUR den BBCode - inwiefern ist das für eine Ausgabe also wichtig?

Also... ich denke ich habe schon so einiges verstanden, mir fehlt jetzt gerade der anstubsende Faktor, der mich zum Ergebnis treibt. Grad ein wenig frustend.
Wenn du also einen Hinweis geben kannst, würde ich dich bitten das zu tun, danach erwartet mich noch einiges an Codeschnipselei, von daher würde ich gern damit fertigwerden *g*
8)


edit: So siehts im gesamten aus bei mir:

-------------------------------------------------

Code: Alles auswählen

	$bbcode_uid = $row_news_ic2[bbcode_uid];
	$message = $row_news_ic2[post_text];

	if ( !$board_config['allow_html'] || !$userdata['user_allowhtml'])
	{
		if ( $user_sig != '' )
		{
			$user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $user_sig);
		}

		if ( $postrow[$i]['enable_html'] )
		{
			$message = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $message);
		}
	}

	//
	// Parse message and/or sig for BBCode if reqd
	//


	if ($bbcode_uid != '')
	{
		$message = ($board_config['allow_bbcode']) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace("/\:$bbcode_uid/si", '', $message);
	}

	$message = make_clickable($message);

	//
	// Parse smilies
	//
	if ( $board_config['allow_smilies'] )
	{
		if ( $postrow[$i]['user_allowsmile'] && $user_sig != '' )
		{
			$user_sig = smilies_pass($user_sig);
		}

		if ( $postrow[$i]['enable_smilies'] )
		{
			$message = smilies_pass($message);
		}
	}

	//
	// Replace newlines (we use this rather than nl2br because
	// till recently it wasn't XHTML compliant)
	//
	if ( $user_sig != '' )
	{
		$user_sig = '<br />_________________<br />' . str_replace("\n", "\n<br />\n", $user_sig);
	}

	$message = str_replace("\n", "\n<br />\n", $message);
	$message = make_clickable($message);
Zu Erklärung:

Code: Alles auswählen

   $bbcode_uid = $row_news_ic2[bbcode_uid];
   $message = $row_news_ic2[post_text];
Ersteres ist meine Datenbankbeschaffung der bbcode_uid und zweiteres die des geposteten und somit zu HTML zu machenden Textes.
Sollte aber eigentlich klar geworden sein, denke ich.

Die momentane Ausgabe sieht so aus:

Code: Alles auswählen

Normaler text

[b]Bold Text[/b]
[i]kursiver Text[/i]
[u]unterstrichener Text[/u]
[code:1]Code-Text[/code:1]
[list]
[*]Liste1
[*]Liste2
[/list:u]

[img]bild.jpg[/img]
[url]www.url.de[/url]
[quote]ein Quote[/quote]
Soll bedeuten, Tags werden noch nicht umgewandelt.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Frage: Du verwendest diesen Code ja phpBB extern, richtig? Woher holst Du dann die Werte für $userdata, $postrow und $board_config her? Solange zum Beispiel $board_config['allow_bbcode'] leer ist (da ungesetzt), wird die UID im Posting nur via preg_replace gelöscht, der BBCode jedoch nicht umgewandelt.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
xepho
Mitglied
Beiträge: 7
Registriert: 05.02.2008 08:47

Beitrag von xepho »

So, hm. $board_config['allow_bbcode'] habe ich mir jetzt über eine Abfrage aus der DB geholt.
Weil das ja eigentlich unnötig ist, weil ich ja weiß dass sie "1" sein muss, habe ich ebenfalls versucht sie schlicht als variable zu verpacken ($allow_bbcode, bspw).
In beiden Fällen bekomme ich die Fehlermeldung

Fatal error: Call to a member function on a non-object in (...) bbcode.php on line 43

$postrow habe ich meiner Meinung nach ausschließen können, weil ich die damit verknüpften Funktionen nicht brauche. $userdata ebenso.


EDIT:

Habs. *sfz*
In der bbcode.php an der genannten Stelle habe ich anstelle der üblichen Pfadangabe
$tpl_filename = 'bbcode.tpl'; eingesetzt, weil die bbcode.tpl im selben Verzeichnis liegt.


Danke für die Hilfe, auch wenns alles ein wenig gedauert hat ;)
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Na siehste.. etwas Hilfestellung, sehr viel eigener Schweiss und es klappt. Ausserdem hast Du nun ne Menge dazu gelernt. :)
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Kunstbanause
Mitglied
Beiträge: 2
Registriert: 19.02.2008 04:35

Beitrag von Kunstbanause »

Hallo ich habe diesen Beitrag mit der Suchfunktion gefunden.
Es ist zwar lustig anzusehen wie der gute xepho seinen Weg zur Lösung gefunden hat. Schade ist aber, dass ich als Außenstehender jetzt kaum nach vollziehen kann wie ich das gleiche Ergebnis hin bekomme.

Vielleicht könnte einer von euch beiden, da ihr ja jetzt wisst wie die Sache zu meistern ist, einen kleinen strukturierten Überblick geben wie ich eine Newsseite hinbekomme.

Ich freue mich über eine konstruktive Antwort, da ich nicht so der Typ bin, der Tagelang an einem kleinen Fitzel Programmierarbeit hockt.
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Wenn du nicht selbst programmieren willst solltest du einfach nach news phpBB2 oder phpBB3 suchen; ich bin mir sicher du stößt auf ein Portal das "News" hat.

Der beschriebene Weg ist eigendlich Recht ausführlich, wenn man sich nun die Dateien anschaut kann man das Schritt für Schritt nach gehen, und mit etwas Zeit auch verstehen.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“