bbcode's umwandeln?

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.
Benutzeravatar
pilgrims
Mitglied
Beiträge: 15
Registriert: 06.07.2006 17:55
Wohnort: Berlin

bbcode's umwandeln?

Beitrag von pilgrims »

Hallo,

ich habe mir ein kleines Script gebastelt, um die letzten Postings der Topics in einem anderen Teil der Website einzubauen.

Dabei habe ich festgestellt, dass die BBCode's und der Text total unbrauchbar angezeigt werden:

Code: Alles auswählen

<table>

<?php
	$beitrag=mysql_query("SELECT topic_id, topic_title FROM phpbb_topics WHERE forum_id=8 ORDER BY topic_id DESC");
	$i=0;
		while ($daten=mysql_fetch_array($beitrag))   {
			 if ($i<1) {
			$topic=mysql_fetch_array(mysql_query("SELECT post_id, topic_id FROM phpbb_posts WHERE topic_id='$daten[topic_id]' ORDER BY topic_id DESC"));
			$posttext=mysql_fetch_array(mysql_query("SELECT post_id, post_text FROM phpbb_posts_text WHERE post_id='$topic[post_id]'"));

			$desc=substr($posttext[post_text],0,420);
			$href="forum/viewtopic.php?t=".$daten[topic_id];
			echo "<tr><td><br>\n";
			echo "<a href=\"".$href."\"><b>".$daten[topic_title]."</b></a><br>\n".$desc."...\n";
			echo "<div align=\"right\"><a href=\"".$href."\">[mehr]</a></div>\n</td></tr>\n";
			$i++;
   	                     }
                                                    }
?>
</table>
Ergebnis:
(hier steht der Topic-Title)
[b:e8b86eacac]Überschrift[/b:e8b86eacac] Blabla blabla blabla blabla[b:e8b86eacac]Überschrift[/b:e8b86eacac] Blabla blabla blabla blabla [b:e8b86eacac]Überschrift[/b:e8b86eacac] Blabla blabla blabla blabla...
Also alles hintereinander im Fließtext und hinter der BBCodes, dann irgendwelche Codes.
Kann man das irgendwie brauchbar umwandeln?

(möchte kein überfrachtetes rss-Script einsetzen, wenn es simpel gehen kann)

Für alle konstriktiven Hinweise bin ich dankbar.

gruss pilgrims
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Für den BBCode musst du bbencode_second_pass() aufrufen. um den Beitrag dann korrekt anzeigen zu lassen, sind aber noch ein paar mehr Sachen nötig (z.B. nl2br() und make_clickable()). Guck dir am besten an, wie das in viewtopic.php gemacht wird.
KB:knigge
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

Hallo,

hab mir mal erlaubt deinen Code etwas zu überarbeiten...versuch das mal:

Code: Alles auswählen

//
// Do Basic Inclusion
//
include "forum/includes/bbcode.php";
 
$sql = "SELECT *
		FROM phpbb_topics t, phpbb_posts_text pt
		WHERE t.forum_id = 8
		AND t.topic_first_post_id = pt.post_id
		ORDER by t.topic_time DESC";
$result = mysql_query($sql);

while ( $row = mysql_fetch_array($result) )
{
	$topic_id = $row['topic_id'];
	$topic_title = $row['topic_title'];
	$bbcode_uid = $row['bbcode_uid'];
	$post_text = $row['post_text'];
	
	//
	// We have the BBcode UID...format the text...
	//
	$post_text = bbencode_first_pass($post_text, $bbcode_uid);
	$post_text = bbencode_second_pass($post_text, $bbcode_uid);
	$post_text = make_clickable($post_text);
	
	$topic_link = "forum/viewtopic.php?t=" . $topic_id; 
	
	//
	// Now we're ready to spit out the data
	//
	echo "<tr><td><br>\n"; 
    echo "<a href='" . $topic_link . "'><b>" . $row['topic_title'] . "</b></a><br>\n" . $post_text . "...\n"; 
    echo "<div align='right'><a href='" . $topic_link. "'>[mehr]</a></div>\n</td></tr>\n";
}
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
pilgrims
Mitglied
Beiträge: 15
Registriert: 06.07.2006 17:55
Wohnort: Berlin

Beitrag von pilgrims »

Hallo,

vielen herzlichen Dank für die Tipps. :grin:

Besonderer Dank an kratzer54847 für seine Überarbeitung, die ich prompt aufgegriffen und getestet habe.
Aber eine Frage habe ich noch an kratzer54847:

Wenn ich deinen Code bei mir verwende, dann erhalte ich im Browser ein
Fatal Error: Call to a member function on a non-object in .../forum/includes/bbcode.php on line 46
Das liegt an den Aufruf der Funktion

Code: Alles auswählen

   $post_text = bbencode_second_pass($post_text, $bbcode_uid);
Ich konnte in bbcode.php für die betroffene Funktion keine andere Aufrufmöglichkeit festfestellen und bin jetzt etwas in der Sackgasse.
Woran kann es liegen?

gruss pilgrims
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

füge mal nach $bbcode_uid = $row['bbcode_uid']; zum Testen

Code: Alles auswählen

echo "BBCode-UID ist " . $bbcode_uid;
ein und poste die Ausgabe
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
pilgrims
Mitglied
Beiträge: 15
Registriert: 06.07.2006 17:55
Wohnort: Berlin

Beitrag von pilgrims »

Die beiden Variablen enthalten Werte:
post_text: [b:e8b86eacac]Überschrift[/b:e8b86eacac] Blablabla[b:e8b86eacac]Überschrift[/b:e8b86eacac] Dubidudubidu...
bbcode_uid: e8b86eacac
Benutzeravatar
pilgrims
Mitglied
Beiträge: 15
Registriert: 06.07.2006 17:55
Wohnort: Berlin

Beitrag von pilgrims »

bin ich mit dem Problem in einer Sackgasse?

gruss pilgrims
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

okay wir versuchen es mal ganz anders: nimm dir nochmal deinen Ur-Code zur Hand und ersetze ihn mit:

Code: Alles auswählen

<table> 

<?php
include('forum/includes/bbcode.php');
   $beitrag=mysql_query("SELECT topic_id, topic_title FROM phpbb_topics WHERE forum_id=8 ORDER BY topic_id DESC"); 
   $i=0; 
      while ($daten=mysql_fetch_array($beitrag))   { 
          if ($i<1) { 
         $topic=mysql_fetch_array(mysql_query("SELECT post_id, topic_id FROM phpbb_posts WHERE topic_id='$daten[topic_id]' ORDER BY topic_id DESC")); 
         $posttext=mysql_fetch_array(mysql_query("SELECT post_id, post_text, bbcode_uid FROM phpbb_posts_text WHERE post_id='$topic[post_id]'")); 

         $desc = $posttext[post_text];
         $uid = $posttext[bbcode_uid];
         $desc = bbencode_second_pass($desc, $uid);

         $href="forum/viewtopic.php?t=".$daten[topic_id]; 
         echo "<tr><td><br>\n"; 
         echo "<a href=\"".$href."\"><b>".$daten[topic_title]."</b></a><br>\n".$desc."...\n"; 
         echo "<div align=\"right\"><a href=\"".$href."\">[mehr]</a></div>\n</td></tr>\n"; 
         $i++; 
                           } 
                                                    } 
?> 
</table>
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
pilgrims
Mitglied
Beiträge: 15
Registriert: 06.07.2006 17:55
Wohnort: Berlin

Beitrag von pilgrims »

vielen Dank für deine Mühe und Anregungen.

Das hatte ich bereits schon ausprobiert und noch einige andere Dinge auch.
Wenn ich die Zeile

$desc = bbencode_second_pass($desc,$uid);

auskommentiere, dann wird die ganze Seite ohne Fehlermeldung angezeigt. Aber eben ohne Umwandlung der bbcodes.

Die beiden übergebenen Variablen enthalten Werte, so dass die Meldung irritiert und vielleicht vom eigentlichen Grund ablenkt.

An den Dateirechten habe ich schon einiges ausprobiert, aber hier gibt es keine Veränderungen.
Offensichtlich geht es ohne die Funktion bbencode_second_pass() gar nicht. Richtig?

Meine Spielwiese sieht im Augenblick so aus:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = '/forum/';
include("forum/includes/bbcode.php");
include("includes/db_connect.inc");
?>
<HTML><HEAD><TITLE>meine tolle seite</TITLE>
</HEAD>
<body>
<h1>willkommen welt</h1>
<!------ ****************************************************************  //------->
<b>die letzten News im Forum</b><br>
<table border="1" bordercolor="red" cellspacing="0" cellspacing="0">

<?php
	$beitrag=mysql_query("SELECT topic_id, topic_title FROM phpbb_topics WHERE forum_id=8 ORDER BY topic_id DESC");
	$i=0;
		while ($daten=mysql_fetch_array($beitrag))   {
			 if ($i<1) {
			$topic=mysql_fetch_array(mysql_query("SELECT post_id, topic_id FROM phpbb_posts WHERE topic_id='$daten[topic_id]' ORDER BY topic_id DESC, post_id DESC"));
			$posttext=mysql_fetch_array(mysql_query("SELECT post_id, bbcode_uid, post_text FROM phpbb_posts_text WHERE post_id='$topic[post_id]'"));

   $uid = $posttext[bbcode_uid];
   $desc = $posttext[post_text];

   $desc = bbencode_first_pass($desc, $uid);
   print "<tr><td>post_text: ".$desc."<br>bbcode_uid: ".$uid."</td></tr>";

   // $desc = bbencode_second_pass($desc,$uid);
   // print "<tr><td>post_text: ".$desc."<br>bbcode_uid: ".$uid."</td></tr>";


   $desc = make_clickable($desc);

			$href="forum/viewtopic.php?t=".$daten[topic_id];

			echo "<tr><td valign=\"top\"><br>\n";
			echo "<a href=\"".$href."\"><b>".$daten[topic_title]."</b></a><br>\n".$desc."...\n";
			echo "<div align=\"right\"><a href=\"".$href."\">[mehr]</a></div>\n</td></tr>\n";
			$i++;
   	                     }
                                                    }
?>
</table>
<?php mysql_close($dbverbindung); ?>
<!------ ****************************************************************  //------->

</body></html>

gruss pilgrims
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

Offensichtlich geht es ohne die Funktion bbencode_second_pass() gar nicht. Richtig?
Korrekt

Die Fehlermeldung ist immer noch:
Fatal Error: Call to a member function on a non-object in .../forum/includes/bbcode.php on line 46
?
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Antworten

Zurück zu „Coding & Technik“