PDA

View Full Version : Use vBulletin's BBCode outside the forum


123_y_321
11-11-2010, 04:23 PM
I'm coding a script in PHP that echo out some of the posts from database. My problem is those posts that I echo out are included with [b],[color]...How do I convert them back to HTML using vBulletin bbcode script?

Lynne
11-11-2010, 05:16 PM
You'll want to go take a look at the vB_BbCodeParser - includes/class_bbcode.php

123_y_321
11-11-2010, 10:49 PM
thanks for the reply. The other guys told me to use this

<?php
Require_once('./global.php');
Require_once('./includes/class_bbcode.php');
Function vb_build_message($text)
{
global $vbulletin;
$parser =& new vB_BbCodeParser($vbulletin, fetch_tag_list());
$do_html = true; // Allow HTML
$do_smilies = true; // Allow Smilies
$do_bbcode = true; // Allow BBcode
$do_imgcode = true; // Allow [IMG]
$do_nl2br = true; // Break line
$cachable = false; //
return $parser->do_parse($text, $do_html, $do_smilies, $do_bbcode, $do_imgcode, $do_nl2br, $cachable);
}

Echo vb_build_message('text [b]with[b] bbcode');
?>

The code work fine on the test text. But when I apply to the text called from table `post`, column `pagetext`. I keep getting error like this:

Fatal error: Call to a member function query_read_slave() on a non-object in
public_html/includes/class_bbcode.php on line 229

Im using vbb 4.0.5

Lynne
11-11-2010, 11:03 PM
Post your exact code that is giving the error.

123_y_321
11-11-2010, 11:07 PM
here is my little code

<?php
require_once ('./global.php');
require_once ('./includes/class_bbcode.php');

function vb_build_message($text)
{
global $vbulletin;
$parser = &new vB_BbCodeParser($vbulletin, fetch_tag_list());
$do_html = true; // Allow HTML
$do_smilies = true; // Allow Smilies
$do_bbcode = true; // Allow BBcode
$do_imgcode = true; // Allow [IMG]
$do_nl2br = true; // Break line
$cachable = false; //
return $parser->do_parse($text, $do_html, $do_smilies, $do_bbcode, $do_imgcode,
$do_nl2br, $cachable);
}
/***************************
//Database connection

$dbhost = "localhost";
$dbuser = "********";
$dbpass = "************";
$dbname = "************";
$forum_id = "9";
$db_connect = mysql_connect ('localhost','**********','*******') or die (mysql_error());
$db = mysql_select_db($dbname, $db_connect);
****************************/

$sql = "SELECT * FROM `forum` WHERE `forumid` = '".$forum_id."'";
$res = mysql_query ($sql) or die (mysql_error());
$row = mysql_fetch_assoc($res);

$title = $row['title'];
echo $title;
echo "<br>";
echo "<br>";

$sql_2 = "SELECT * FROM `forum` WHERE `parentid` = '".$forum_id."'";
$res_2 = mysql_query($sql_2) or die (mysql_error());

while ($row_2 = mysql_fetch_assoc($res_2)){

echo $row_2['title'] . " (forumid = " . $row_2['forumid']. ")";

$sql_3 = "SELECT * FROM `thread` WHERE `forumid` = '".$row_2['forumid']."' ORDER BY `dateline` DESC";
$res_3 = mysql_query ($sql_3) or die (mysql_error());
while ($row_3 = mysql_fetch_assoc($res_3)){

echo "<li>".$row_3['title'] . " (threadid = ". $row_3['threadid'] . ")" . "</li>";

$sql_4 = "SELECT * FROM `post` WHERE `threadid` = '".$row_3['threadid']."'";
$res_4 = mysql_query ($sql_4) or die (mysql_error());
while ($row_4 = mysql_fetch_assoc($res_4)){
echo "<br>";
echo vb_build_message($row_4['pagetext']);
echo "<br>";
}

}
echo "<br>";
}
?>

and the error Im getting is

Fatal error: Call to a member function query_read_slave() on a non-object in
public_html/includes/class_bbcode.php on line 229

Lynne
11-12-2010, 04:24 AM
You may want to look at the function process_group_message_preview to see how they use the parser and then get the html for the text.

123_y_321
11-12-2010, 04:55 AM
I still dont get it. Can you please be more specific?

Lynne
11-12-2010, 02:15 PM
Basically, there are several examples in the vbulletin code of this being done. I'm wondering if you've looked any of them up? There is an example in the function I posted about, there is also an example in a couple of the widgets. They all do this slightly differently and it may help if you take a look and see what they are doing and why.

In debugging, you may want to spit out the pagetext first before doing the bbcode parsing just to see what it is and see if you can figure out why it is having problems. Try different posts - do you still have the same problem? Put in text of your own - still the same problem?

123_y_321
11-13-2010, 12:18 AM
Like I said, the code works perfectly with single text (the one that I manually input). Just have problem with the text from database does not matter which post.
I have tried to search for the same content on this forum and I dont see any similar problem.
I tried
https://vborg.vbsupport.ru/showthread.php?t=242454 >> no luck.
https://vborg.vbsupport.ru/showthread.php?t=242760 >> no luck.
https://vborg.vbsupport.ru/showthread.php?t=236245 >> this is widget not that page.

I even tried to look at showpost.php file and copy the code, but the same problem occurs...

Im so frustrated after 2hrs on this forum and google. But no thing helpful; what do I do now? :confused:

Lynne
11-13-2010, 03:14 AM
Don't search on the forum, search in the vbulletin files themselves. Look how the recent posts forum block is done (recentposts.php). That's going to have very, very similar code, no? And did you try what I suggested which is to spit out the actual post text? What if you aren't grabbing it correctly with your query and that is the problem? You need to know that your code is getting it. Debugging is all about figuring out exactly where the problem is and the way you do that is by spitting out whatever you are after whenever you can.

123_y_321
11-13-2010, 04:45 AM
are u sure the file is recentposts.php? because I have no such file. I use vbulletin suit 4.0.5
And yes, I tried everything in my knowledge and your suggestions to fix the problem. But still every time I call out the vb_build_message function with database, the same problem occur. Again, the function works fine with manual text. The problem is there when ever I touch the database. Does not matter one or many columns I call out.

Lynne
11-13-2010, 03:01 PM
Yes, I'm sure it's called recentposts. It's in one of the subdirectories, block or blocks (I forget) which is in another subdirectory. Won't your computer show you were a file is if you type in the same?

So, your query is getting results and you have echoed out the post text successfully? You have done that, right?

123_y_321
11-13-2010, 06:42 PM
there is no recentposts in block folder (includes/block).

Yes, my query echo out the text successfully like this

[b]my text[b] which means my query grab the data correctly.

Lynne
11-13-2010, 08:21 PM
Whoops, it's a widget, so it's in the widget directory.

$allow_html = ((vB::$vbulletin->forumcache[$post['forumid']]['options'] & $optionval) AND $this->config['allow_html'] ? 1 : 0);
$post['previewtext'] = fetch_censored_text($parser->get_preview($post['pagetext'], $this->default_previewlen, $allow_html));
$post['pagetext'] = fetch_censored_text($parser->do_parse($post['pagetext'], $allow_html));