vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   Using PHP in a custom BB Code? (https://vborg.vbsupport.ru/showthread.php?t=147221)

Analogpoint 05-14-2007 02:10 PM

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?

Eikinskjaldi 05-14-2007 10:20 PM

Quote:

Originally Posted by Analogpoint (Post 1247393)
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.

Analogpoint 05-14-2007 11:51 PM

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.


All times are GMT. The time now is 05:29 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.01157 seconds
  • Memory Usage 1,725KB
  • 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_php_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (3)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