Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
  #1  
Old 05-26-2012, 11:15 PM
dushokd dushokd is offline
 
Join Date: Feb 2009
Posts: 2
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default How do I Add {option} to built-in [code]

I have been modifying the "bbcode_code" template. How do I add an option to the built-in code tag?

Built in:
[ CODE ] some random code [ /CODE ]

With Option:
[ CODE=javascript ]some random code[ /CODE ]

Then I could print out the option to display the type of code, instead of just the word "Code" it would say "JavaScript Code". below is an example of the bbcode_code template and {option} should just print out the option.
Code:
<div class="bbcode_container">
	<div class="bbcode_description">{option} {vb:rawphrase code}:</div>
	<pre class="bbcode_code"<vb:if condition="$vboptions['codemaxlines']">style="height:<vb:if condition="$blockheight<$vboptions['codemaxlines']">{vb:math {vb:raw blockheight}*{vb:stylevar mid_fontSize}+{vb:stylevar mid_fontSize}*2}<vb:else />{vb:math {vb:raw blockheight}*{vb:stylevar mid_fontSize}+{vb:stylevar mid_fontSize}}</vb:if>;"</vb:if>>{vb:raw code}</pre>
</div>
Thanks,
Dave
Reply With Quote
  #2  
Old 05-26-2012, 11:45 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I don't think you can do that without editing the file includes/class_bbcode.php.

Assuming you're willing to do that: If you search that file for [code] you find it in two places. In one place it's adding to the tag array. There you could add a second entry ($tag_list['option']['code']) that has the same values as the 'no_option' tag.

The other place you'll find [code] is at the function handle_bbcode_code. There you need to add a second parameter for the option, then register that to the template. You'll also probably want to add a check in the template for the option value being null (which will happen with a code tga with no option).
Reply With Quote
  #3  
Old 05-27-2012, 03:26 AM
dushokd dushokd is offline
 
Join Date: Feb 2009
Posts: 2
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks kh99, I am almost there, but there is some bug I can't figure out, I hope you can help?

using [ code ] without the option works perfectly. When I pass the option, it displays correctly, but if I try and edit the post, i see that the [ code ] tags have been removed and reformatted.

Result when trying to edit post when I included the option:


Below is my code.
function:
PHP Code:
function handle_bbcode_code($code$option '')
    {
        global 
$vbulletin$vbphrase$show;

        
// remove unnecessary line breaks and escaped quotes
        
$code str_replace(array('<br>''<br />'), array(''''), $code);

        
$code $this->strip_front_back_whitespace($code1);

        if (
$this->printable)
        {
            
$code $this->emulate_pre_tag($code);
            
$template 'bbcode_code_printable';
        }
        else
        {
            
$blockheight $this->fetch_block_height($code);
            
$template 'bbcode_code';
        }
        
        if (
$option == '1') {
            
$option 'happy';
        } else {
            
$option 'sad';
        }
            
        
$templater vB_Template::create($templatetrue);
            
$templater->register('option'$option);
            
$templater->register('blockheight'$blockheight);
            
$templater->register('code'$code);
        return 
$templater->render();
    } 
tag_list:
PHP Code:
//[CODE]
            
$tag_list['no_option']['code'] = array(
                
'callback'          => 'handle_bbcode_code',
                
'strip_empty'       => true,
                
'disable_smilies'   => true,
                
'disable_wordwrap'  => true,
                
'strip_space_after' => 2
            
);
            
            
//[CODE=XXX]
            
$tag_list['option']['code'] = array(
                
'callback'          => 'handle_bbcode_code',
                
'strip_empty'       => true,
                
'disable_smilies'   => true,
                
'disable_wordwrap'  => true,
                
'strip_space_after' => 2
            
); 
bbcode_code:
Code:
<div class="bbcode_container">
	<div class="bbcode_description">{vb:raw option}:</div>
	<pre class="bbcode_code"<vb:if condition="$vboptions['codemaxlines']">style="height:<vb:if condition="$blockheight<$vboptions['codemaxlines']">{vb:math {vb:raw blockheight}*{vb:stylevar mid_fontSize}+{vb:stylevar mid_fontSize}*2}<vb:else />{vb:math {vb:raw blockheight}*{vb:stylevar mid_fontSize}+{vb:stylevar mid_fontSize}}</vb:if>;"</vb:if>>{vb:raw code}</pre>
</div>
Reply With Quote
  #4  
Old 05-27-2012, 03:49 AM
DivisionByZero's Avatar
DivisionByZero DivisionByZero is offline
 
Join Date: Dec 2002
Location: South Bend, Indiana
Posts: 485
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

why can't the dev team just put all the built-in code in the BB Code Manager in the first place? I've been meaning to ask this question for years!
Reply With Quote
  #5  
Old 05-27-2012, 04:07 AM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by dushokd View Post
Thanks kh99, I am almost there, but there is some bug I can't figure out, I hope you can help?

Yeah, sorry - obviously I didn't actually try it. Anyway, more changes needed in includes/class_bbcode_alt.php. Around line 99, after the "make the "pre" tags use the correct handler" for loop (ETA ...add this under the existing foreach loop):

Code:
                if (isset($this->tag_list['option']['code']))
                {
                        $this->tag_list['option']['code']['callback'] = 'handle_preformatted_tag';
                        unset($this->tag_list['option']['code']['html'], $this->tag_list['option']['code']['strip_space_after']);
                }

then in handle_preformatted_tag() around line 357, replace the return statement with:

Code:
		return '[' . $tag_name .
			($this->current_tag['option'] !== false ?
				('=' . $this->current_tag['delimiter'] . $this->current_tag['option'] . $this->current_tag['delimiter']) :
				''
			) . ']' . $this->emulate_pre_tag($code) . "[/$tag_name]";

(which I stole from another function).

There's also another class in that file, vB_BbCodeParser_PlainText, which probably needs to be changed for when the post is represented as plain text.


Quote:
Originally Posted by DivisionByZero View Post
why can't the dev team just put all the built-in code in the BB Code Manager in the first place? I've been meaning to ask this question for years!
I don't know, but the handling of some of those codes is a lot more complicated than just a replacement, so it would be difficult.
Reply With Quote
  #6  
Old 05-27-2012, 04:11 AM
DivisionByZero's Avatar
DivisionByZero DivisionByZero is offline
 
Join Date: Dec 2002
Location: South Bend, Indiana
Posts: 485
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That's true, indeed. However, there could be an include file (with hooks) for each bbcode that can be easily edited and make it easier for upgrades.
Reply With Quote
  #7  
Old 05-27-2012, 04:18 AM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That would be nice.
Reply With Quote
  #8  
Old 05-27-2012, 04:20 AM
DivisionByZero's Avatar
DivisionByZero DivisionByZero is offline
 
Join Date: Dec 2002
Location: South Bend, Indiana
Posts: 485
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

if we suggest it now, maybe it'll get implemented in a few years.
Reply With Quote
  #9  
Old 05-27-2012, 04:49 AM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

heh heh...yeah, it's probably not on the top of the list. I was just thinking about it - I think the main problem is that the way it's written now, the callback functions for handling bbcodes have to be member functions of the bbcode parser class. But it would be easy enough to allow other callback functions, and then I think a lot more could be done in a plugin.
Reply With Quote
  #10  
Old 05-27-2012, 04:51 AM
DivisionByZero's Avatar
DivisionByZero DivisionByZero is offline
 
Join Date: Dec 2002
Location: South Bend, Indiana
Posts: 485
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

i cant even find a way to do it in my admincp project (https://vborg.vbsupport.ru/showthread.php?t=282849) without frontend code modification. I've been thinking about it long and hard too.
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 07:17 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.05756 seconds
  • Memory Usage 2,267KB
  • 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
  • (4)bbcode_code
  • (2)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)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_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