[StringParser_BBCode] parse() nur einmal verwenden?

bisselbock

Grünschnabel
Guten Tag,

ich verwende die StringParser_BBCode Klasse von Christian Seiler.

Nun habe ich die Inititalisierung des Objektes sowie eine wichtige Funktionen in eine bbcode.inc.php gepackt:
PHP:
<?php
  require_once './inc/forum/bbcode/stringparser_bbcode.class.php';

  $bbcode = new StringParser_BBCode();

  function do_bbcode_img ($action, $attributes, $content, $params, $node_object) {
    if ($action == 'validate') {
        return true;
    }
    return '<img src="'.htmlspecialchars($content).'" alt=""/>';
	}

  function do_bbcode_url ($action, $attributes, $content, $params, $node_object) {
    if ($action == 'validate') {
        return true;
    }
    if (!isset ($attributes['default'])) {
        return '<a target="_blank" href="'.htmlspecialchars ($content).'">'.htmlspecialchars ($content).'</a>';
    }
    return '<a target="_blank" href="'.htmlspecialchars ($attributes['default']).'">'.$content.'</a>';
	}

  $bbcode->addCode ('b', 'simple_replace', null, array ('start_tag' => '<b>', 'end_tag' => '</b>'),
                  	'inline', array ('block', 'inline'), array ());
  $bbcode->addCode ('i', 'simple_replace', null, array ('start_tag' => '<i>', 'end_tag' => '</i>'),
                  	'inline', array ('block', 'inline'), array ());
  $bbcode->addCode ('u', 'simple_replace', null, array ('start_tag' => '<u>', 'end_tag' => '</u>'),
                  	'inline', array ('block', 'inline'), array ());
  $bbcode->addCode ('img', 'usecontent', 'do_bbcode_img', array (),
                  	'image', array ('listitem', 'block', 'inline', 'link'), array ());
	$bbcode->addCode ('bild', 'usecontent', 'do_bbcode_img', array (),
                  	'image', array ('listitem', 'block', 'inline', 'link'), array ());
  $bbcode->addCode ('url', 'usecontent?', 'do_bbcode_url', array ('usecontent_param' => 'default'),
                  	'link', array ('listitem', 'block', 'inline'), array ('link'));
	$bbcode->addCode ('link', 'callback_replace_single', 'do_bbcode_url', array (),
                  	'link', array ('listitem', 'block', 'inline'), array ('link'));
?>
Nun habe ich diese Datei auf meiner Seite per include eingebunden.

Auf einer Seite, wo ich Forenbeiträge ausgebe, kann ich die DB-Einträge mit
PHP:
$bbcode->parse($row['Text']);
parsen und ausgeben. Nun klicke ich auf diese Seite auf "Antworten" und möchte unter dem dann erstellten Formular gerne die letzten x Einträge anzeigen und rufe da die Funktion
PHP:
showLastPosts($threadID, $numberOfPosts);
auf.

Innerhalb dieser Funktion möchte ich wieder
PHP:
$bbcode->parse($row['Text']);
benutzen. Leider schlägt das mit der Fehlermeldung
Fatal error: Call to a member function parse() on a non-object in D:\Entwicklung\PHP\bisselbock.de\inc\forum\addreply.inc.php on line 142
fehl.

Wieso geht das nicht? Zur Info: Die addreply.inc.php schließt natürlich auch die bbcode.inc.php ein, wo die das Objekt $bbcode initialisiert wird.
 
Hallo,

wie ist denn der Quellcode von der Funktion showLastPosts($threadID, $numberOfPosts)?

Tobee
 
Hallo,

wie ist denn der Quellcode von der Funktion showLastPosts($threadID, $numberOfPosts)?

Tobee
Total konfus, quick & dirty, aber eigentlich funktional - bis auf oben genanntes Problem. Hier:
PHP:
function showLastPosts($threadID, $numberOfPosts) {
  	include("./inc/forum/bbcode.inc.php");
    echo '<table style="width:100%;padding:0px;border-collapse:collapse;border:solid 1px black;" cellpadding="0" cellspacing="0">';

      	$sql = 'SELECT u.UserID,u.Nickname,p.PostId,p.Text,DATE_FORMAT(p.Erstellt,"%d.%m.%Y um %H:%i Uhr") as fDatum, '
        			.'       u.Wohnort, u.Beitragszahl '
        			.'FROM forum_threads t, forum_posts p, forum_users u '
              .'WHERE p.ThreadID = '.$threadID.' AND '
              .'			t.ThreadID = p.ThreadID AND '
              .'			p.UserID = u.UserID '
              .'ORDER BY p.Erstellt DESC '
              .'LIMIT '.$numberOfPosts.';';
        $result = mysql_query($sql) OR die(mysql_error());

        $colorCount = 1;
        while($row = mysql_fetch_assoc($result)) {
          $formattedText = stripslashes(nl2br($bbcode->parse($row['Text'])));
          $gerade = $colorCount%2;
          $color = "#B4C1EB";
          if($gerade) { $color = "#A2C1F0";}
        	echo '<tr style="color:#000000;">';
          echo '	<td style="background-color:'.$color.';width:20%;vertical-align:top;border:1px solid black;">
          					<div style="font-size:10px;margin:4px;">
          					<b style="font-size:12px;">'.$row['Nickname'].'</b><br><br>
                    <b>Beiträge:</b> '.$row['Beitragszahl'].'<br>
                    <b>Herkunft:</b> '.$row['Wohnort'].'</div>
                  </td>';
          echo '	<td style="width:100%;border:1px solid black;vertical-align:top;background-color:'.$color.';">
                  	<table style="width:100%;border-collapse:collapse;" border="0" cellpadding="0" cellspacing="0">
                    	<tr><td style="border-bottom:1px solid black;padding:1px 4px;">
                      	Geschrieben am '.$row['fDatum'].'</td></tr>
                      <tr><td style="padding:4px 4px;vertical-align:top;font-size:12px;">
                      	'.$formattedText.'</td></tr></table>
                  </td></tr>';
          $colorCount++;
        }
      echo '</table>';
  }

Jetzt geht es allerdings, da ich die bbcode.inc.php lokal eingebunden habe
PHP:
include("./inc/forum/bbcode.inc.php");

Dafür kann ich das nun aber nicht mehr global einbinden, sondern nur noch da, wo ich es benötige. Ist ja eigentlich ganz sinnvoll, aber irgendwie ist mir das jetzt durch diesen Workaround noch viel konfuser geworden :suspekt:.
 
Zurück