View Single Post
  #1  
Old 04-16-2010, 10:04 AM
Citizen Bleys Citizen Bleys is offline
 
Join Date: Feb 2003
Location: Moncton, NB
Posts: 8
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Parsing BBCodes on an external page

Originally taken up in a borrowed thread

Basics: I want to write a script that copies the text of threads from my news forum to my front site. I've hand-coded a mostly-working script from scratch, but I have no idea how to parse BBCodes, so any multiline news posts or posts that contain BBCodes show up as a giant mishmash on the front site.

My front site is in / and the forums are in /forums/, so I have to chdir() into forums and back whenever I want to call any vBulletin functionality. Having searched the forums, I've seen code that looks like this:

PHP Code:
require_once(DIR '/includes/class_bbcode.php');

$bbcode_parser =& new vB_BbCodeParser($vbulletinfetch_tag_list());

$text "[color=red]some text with tags[/color]";
$html $bbcode_parser->parse($text); 
(example lifted directly from the other thread)

Problem is, it doesn't work.

The other thread in the vB3 forum solved most of the initial issues I had, so I'll leave them out, but now I'm running into some dependency problems. I'm not all that familiar with the internal workings of vBulletin--for that matter, OOP in general is not my forte--so I don't know what classes/methods/functions are where.

Here's my current code:

PHP Code:
/* Save the old version */
 //echo "<p>".$news_threads[$counter]["postbody"]."</p>";
/**/

//attempting to do it with bbcode parser
// global $vbulletin;  // declared in index.php
chdir('forums');
//require_once('./global.php');
//require_once('./includes/init.php');  //uncommenting this line changes nothing
require_once('./includes/class_bbcode.php');
$bbcode_parser = new vB_BbCodeParser($vbulletinfetch_tag_list());  // I don't understand this line at all, just copied it from the forums
// next 2 lines currently commented out, which is how I determined where the problem lies, but they should work
$parsedNews $bbcode_parser->do_parse($news_threads[$counter]["postbody"]);
echo 
"<p>$parsedNews</p>";

chdir('..');
//end attempt to do it with bbcode parser 
$news_threads[$counter]["postbody"] is a vanilla associative array containing the text of the first post of each thread in the news forum exactly as entered by the user, complete with all BBCodes and whitespace. I didn't use any vBulletin code to pull the data from the db, it's all handcoded, but it works -- it just doesn't display right as HTML because the whitespace is ignored and BBCodes aren't parsed.

With that code in the while loop, I get the following error:

Code:
Fatal error: Call to a member function query_read_slave() on a non-object in /(elided)/forums/includes/class_bbcode.php on line 220
The error (and the body of the post) disappears if I comment out the line instantiating the new vB_BbcodeParser.

If it matters, the basic structure of my frontsite is as follows

frontconfig.php: contains global variables for my code -- nothing relating to vBulletin
index.php: Shell HTML page containing the CSS and basic table structure -- a vanilla site with a sidebar containing links and a main page body containing news posts
sidebar.php: Links, inserted into index.php with an include() statement
main.php: contains some static HTML and my news script.

/forums/global.php is include()d at the top of index.php; since main.php is called only from within index.php, it should always include global.php. There's also a "global vbulletin;" statement in index.php which should likewise be inherited into main.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01198 seconds
  • Memory Usage 1,785KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code
  • (2)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete