Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
  #1  
Old 05-14-2007, 10: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

Thread Tools
Display Modes

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 02:21 PM.


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.04579 seconds
  • Memory Usage 2,202KB
  • Queries Executed 12 (?)
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)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)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)showthread_list
  • (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_threadedmode.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_threaded
  • showthread_threaded_construct_link
  • 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