vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   Parsing BBCode to HTML (https://vborg.vbsupport.ru/showthread.php?t=149872)

weicool 06-16-2007 04:47 PM

Parsing BBCode to HTML
 
Hey everyone,

I'm currently pulling the latest posts from one of my forums directly from the database and putting it on my main site (non-vB).

However, unsurprisingly, there is a bunch of BBCode mixed within the text (the pagetext column of the post table). How can I parse this BBCode to return HTML? Which vB file must I include and which function should I use?

Brad 06-17-2007 12:07 AM

This should be all you need; :)

PHP Code:

/*
Include and call the bbcode class
*/
require_once(DIR '/includes/class_bbcode.php');
$bbcode =& new vB_BbCodeParser($vbulletinfetch_tag_list());

/*
An example of using the class to parse data that contains bbcode
*/
$text 'Some text [b]with bbcode[/b] in it';

/* $forumid can be set to; 
- 'calendar' (follows bbcode rules for the calendar) 
- 'privatemessage' (follows bbcode rules for PMs) 
- 'usernote' (follows bbcode rules for usernotes)
- 'signature' (follows bbcode rules for signatures)
- 'nonforum' (follows "global" bbcode rules as defined in vBoptions)
- 'announcement' (follows bbcode rules for announcements)
- 'Any vaild forumid' (example; 1, 2, 17, etc).  Will follow bbcode rules for specified forumid.   The array "$forum" must be defined and the function "fetch_foruminfo" must be defined for this to work.
*/
$forumid 'nonforum'// just to make things simple..;0

$allowsmilie true// parse smilies? true = yes, false = no.

// ## The code below will convert the bbcode to html using the rules above.
$parsed_text $bbcode->parse($text$forumid$allowsmilie); 


weicool 06-17-2007 06:31 AM

Quote:

Originally Posted by Brad (Post 1270060)
This should be all you need; :)

PHP Code:

/*
Include and call the bbcode class
*/
require_once(DIR '/includes/class_bbcode.php');
$bbcode =& new vB_BbCodeParser($vbulletinfetch_tag_list());

/*
An example of using the class to parse data that contains bbcode
*/
$text 'Some text [b]with bbcode[/b] in it';

/* $forumid can be set to; 
- 'calendar' (follows bbcode rules for the calendar) 
- 'privatemessage' (follows bbcode rules for PMs) 
- 'usernote' (follows bbcode rules for usernotes)
- 'signature' (follows bbcode rules for signatures)
- 'nonforum' (follows "global" bbcode rules as defined in vBoptions)
- 'announcement' (follows bbcode rules for announcements)
- 'Any vaild forumid' (example; 1, 2, 17, etc).  Will follow bbcode rules for specified forumid.   The array "$forum" must be defined and the function "fetch_foruminfo" must be defined for this to work.
*/
$forumid 'nonforum'// just to make things simple..;0

$allowsmilie true// parse smilies? true = yes, false = no.

// ## The code below will convert the bbcode to html using the rules above.
$parsed_text $bbcode->parse($text$forumid$allowsmilie); 


Thanks a lot! :D

However, when I tried to do that, I get this error message:

Fatal error: Class 'vBulletinHook' not found in /mnt/w0800/d09/s41/b027ae64/www/forums/includes/class_bbcode.php on line 2347

Looking at the code in class_bbcode.php, it seems to abruptly call on a vBulletinHook without ever declaring it. I'm very new to PHP...

What would be the problem here?

Dismounted 06-17-2007 06:52 AM

You'll need to have this above that code:
PHP Code:

$curdir cwd();
chdir('./PATH/TO/FORUMS/');
require_once(
'./global.php');
chdir($curdir); 


weicool 06-17-2007 04:49 PM

Almost seems to work...but still a little error:

$bbcode =& new vB_BbCodeParser($vbulletin, fetch_tag_list());

That line seems to be problematic.

I get the following error message:

Fatal error: Call to a member function query_read_slave() on a non-object in /mnt/w0800/d09/s41/b027ae64/www/forums/includes/class_bbcode.php on line 198

weicool 06-18-2007 06:25 PM

Can someone please give me the last bit of information I need to get this thing working...?

Augusto 09-03-2007 01:23 AM

here's a working sample of it that works in the forum installation directory:

PHP Code:

<?php

require_once('global.php');
require_once(
'includes/class_bbcode.php');
$bbcode =& new vB_BbCodeParser($vbulletinfetch_tag_list()); // call the bbcode class
$text 'Some text [b]with bbcode[/b] in it';  // data that contains bbcode
$forumid 'nonforum'// (follows "global" bbcode rules as defined in vBoptions)
$allowsmilie true// parse smilies? true = yes, false = no.
$parsed_text $bbcode->parse($text$forumid$allowsmilie);  // Parse the text
echo("<html>");
echo(
$parsed_text);
echo(
"</html>");

?>

save it as "testparser.php" and simply run it in your forum installation directory as www.yourforum.com/forum/testparser.php

it should print this: "Some text with bbcode in it"

XManuX 09-05-2007 09:30 AM

I'm having exactly the same error message :

Fatal error: Call to a member function on a non-object in /path/class_bbcode.php on line 198

I'm trying to acheive the same thing : parsing bbcodes in posts that i am currently displaying outside the forum (non-vb.)

my code is :
PHP Code:

$cwd getcwd();
$vbpath $_SERVER['DOCUMENT_ROOT'] . get_option('vbb_VBRPATH');
chdir($vbpath);
require_once(
'./global.php');
chdir($cwd);
require_once(
$vbpath '/includes/class_bbcode.php'); 
$bbcode =& new vB_BbCodeParser($vbulletinfetch_tag_list()); 

no errors displayed since i added the last line :confused:

@Augusto : i tried your test successfully.

dolbex 11-09-2007 02:39 AM

I am still having a really tough time with pulling this off in 3.6. I continue to get the error:

Fatal error: Call to a member function query_read_slave() on a non-object in /var/www/newspail3/forums/includes/class_bbcode.php on line 213

from outside the forum directory.

--------------- Added [DATE]1194608789[/DATE] at [TIME]1194608789[/TIME] ---------------

Figured this out.

I had these examples embedded within functions. I don't quite understand why they wouldn't work but I assigned $bbcode when I was inside my forum directory

PHP Code:

chdir(FORUM_DIRECTORY);
require_once(
FORUM_DIRECTORY 'global.php');
require_once(
FORUM_DIRECTORY 'includes/class_bbcode.php');
$bbcode =& new vB_BbCodeParser($vbulletinfetch_tag_list());
chdir ($curdir); 

I then passed $bbcode into the function and that worked.

jonbach 06-09-2009 04:16 AM

I can confirm the last post. This method does not work when part of a function, which is a big problem when integrating into some existing sites.

This works:
PHP Code:

$cwd getcwd();
chdir("/mypath");
include(
"/mypath/global.php"); 
include(
"/mypath/includes/class_bbcode.php"); 
$bb_parser =& new vB_BbCodeParser($vbulletinfetch_tag_list()); 
chdir($cwd);

function 
bb_convert_works($bb_parser$text){
    
$parsed_text $bb_parser->do_parse($text); 
    return 
$parsed_text;
}

$text "[url=http://www.google.com][b]Google[/b][/url]"
echo 
bb_convert_works($bb_parser$text); 

This does NOT work:
PHP Code:

function bb_convert_doesnt_work($text){
    
$cwd getcwd();
    
chdir("/mypath");
    include(
"/mypath/global.php"); 
    include(
"/mypath/includes/class_bbcode.php"); 
    
$bb_parser =& new vB_BbCodeParser($vbulletinfetch_tag_list()); 
    
chdir($cwd);
    
$parsed_text $bb_parser->do_parse($text); 
    return 
$parsed_text;
}

$text "[url=http://www.google.com][b]Google[/b][/url]"
echo 
bb_convert_doesnt_work($text); 

The errors I get when I try the second code are:
Quote:

Warning: array_keys() [function.array-keys]: The first argument should be an array in [path]/includes/functions.php on line 4227

Warning: Invalid argument supplied for foreach() in [path]/includes/functions.php on line 4227

Fatal error: Call to a member function query_read_slave() on a non-object in /mypath/includes/functions.php on line 3189
I have plenty of experience in PHP, but I haven't encountered a problem like this before. I really would prefer to not have to hack this together by hard coding the conversion code everywhere I need it. Does anyone have any ideas on why it breaks when within a function?

Dismounted 06-09-2009 06:49 AM

global.php cannot be included outside of global scope.

vcor 08-11-2009 09:40 PM

Quote:

Originally Posted by Dismounted (Post 1826186)
global.php cannot be included outside of global scope.

Could you explain that a bit more? I'm good with PHP, but never seen this kind of problem before. Does this mean global.php has to be modified to work from functions? Hopefully not, as I suspect it's a big task.

Likely should be another thread, but I also get identical the error:
Fatal error: Call to a member function query_read_slave() on a non-object in /mypath/includes/functions.php on line 3189

This error has only started to appear over the last few weeks (with v3.8.3), and I've not made any code changes, nor have I seen this error in the last year or so (I carefully track PHP errors).

Similar to jonbach's function, I use a function to handle creating threads:

Code:

function newThread() {
        ... initialization stuff

        chdir($forumDir);
        require_once('./global.php');
        require_once(DIR . '/includes/functions_databuild.php'); // for new thread

        ... forum actions

        chdir($curDir);
}

This has been working perfectly for quite a while (many vBulletin versions over a year or so), so it's also puzzling why it's worked before and lately generates errors.


All times are GMT. The time now is 12:57 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01205 seconds
  • Memory Usage 1,789KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code_printable
  • (8)bbcode_php_printable
  • (3)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (12)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete