Seite 1 von 2

bbcode's umwandeln?

Verfasst: 08.07.2006 13:59
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

Verfasst: 08.07.2006 14:13
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.

Verfasst: 08.07.2006 14:19
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";
}

Verfasst: 08.07.2006 17:06
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

Verfasst: 08.07.2006 17:25
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

Verfasst: 08.07.2006 17:28
von pilgrims
Die beiden Variablen enthalten Werte:
post_text: [b:e8b86eacac]Überschrift[/b:e8b86eacac] Blablabla[b:e8b86eacac]Überschrift[/b:e8b86eacac] Dubidudubidu...
bbcode_uid: e8b86eacac

Verfasst: 08.07.2006 23:37
von pilgrims
bin ich mit dem Problem in einer Sackgasse?

gruss pilgrims

Verfasst: 09.07.2006 00:01
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>

Verfasst: 09.07.2006 01:03
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

Verfasst: 09.07.2006 08:15
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
?