Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 05-14-2007, 02:10 PM
Analogpoint's Avatar
Analogpoint Analogpoint is offline
 
Join Date: Feb 2007
Posts: 656
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Using PHP in a custom BB Code?

Is it possible to use PHP in a custom BB code? I'm making a BB code, but I need to parse/manipulate the contents of {param} instead of just wrapping it in HTML or something like that. Is this currently possible? If not, what would you suggest I do to work around this limitation?
Reply With Quote
  #2  
Old 05-14-2007, 10:20 PM
Eikinskjaldi's Avatar
Eikinskjaldi Eikinskjaldi is offline
 
Join Date: Feb 2006
Location: Hell, never looked better
Posts: 572
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Analogpoint View Post
Is it possible to use PHP in a custom BB code? I'm making a BB code, but I need to parse/manipulate the contents of {param} instead of just wrapping it in HTML or something like that. Is this currently possible? If not, what would you suggest I do to work around this limitation?
You can do it through the plugin system, or you can edit in class_bbcode.php directly. I tend to do the latter, so I can specifically control when the custom tags are parsed. Put it in the do_parse method, and use preg_match. It wont use the stack based parsing of bbcode proper, but it should be fine.
Reply With Quote
  #3  
Old 05-14-2007, 11:51 PM
Analogpoint's Avatar
Analogpoint Analogpoint is offline
 
Join Date: Feb 2007
Posts: 656
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks Eikinskjaldi for the comments.

I had already opened up class_bbcode.php and had a look around. I figured out how to achieve this, and will post it here for posterity's sake.

This is a bid hackish, but it works, and uses the vB plugin system. There is no mucking with the *.php files, so upgrading shouldn't ruin it.

How to run PHP code, instead of a simple replacement, on your custom BBCode.

1. Create a custom BBCode in the ACP, so that the description/example will show up on the BBCodes faq page for your forums. Put whatever you want in the "replacement" field, as this is overwritten by the following plugin.

2. Create a plugin using the bbcode_create hook.

3. Add your plugin code, using a format similar to the following:

PHP Code:
$custom_bbcode 'xxxxx';

$this->tag_list['no_option'][$custom_bbcode] = array ();
$this->tag_list['no_option'][$custom_bbcode]['callback'] = 'handle_external';
$this->tag_list['no_option'][$custom_bbcode]['external_callback'] = 'handle_my_custom_bbcode';

if (!
function_exists ('handle_my_custom_bbcode')) {
    function 
handle_my_custom_bbcode (&$theobj, &$value, &$option) {

        
/*
            The $value varible now holds whatever was between your tags, 
            and $option holds the option
            [sometag=option_here]value here[/sometag]
        */
        
return 'the html to display your bbcode';
    }

Now, a few notes about that php. Replace the 'xxxxx' with the custom BBCode you want to create. If you are planning on using the option with the BBCode, change 'no_option' to 'option'.

In the function, do whatever manipulations you want to do, and then return the HTML that you want displayed in the actual post.

The $theobj variable is a reference to vB's BBCode parsing object, you probably won't need this.

If you use this method, you don't have to muck in any of vB's php files and the parser engine will correctly parse this and all other BBCodes correctly regardeless of nesting etc.

Hope this helps someone out there.


In closing, I just want to mention that I wish vB had a simple option to choose a simple HTML replacement, or add php code to the "Create a Custom BBCode" section. This hack/plugin shouldn't have been necessary.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 11:02 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04173 seconds
  • Memory Usage 2,193KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (3)post_thanks_box
  • (3)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (3)post_thanks_postbit_info
  • (3)postbit
  • (3)postbit_onlinestatus
  • (3)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete