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

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #2  
Old 07-01-2011, 05:01 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I'm not sure because I've never done it, but includes/template_curly_defs.php seems to have a bunch of classes, one for each type of curly tag, all derived from class vB_TemplateParser_Curly (which is also in that file), and the classes are used in includes/class_template_parser.php, with the class name built from the tag name. So maybe if you did something like:

Code:
require_once("includes/template_curly_defs.php");

class vB_TemplateParser_CurlyFoo extends vB_TemplateParser_Curly
{
    public static function validate(vB_Node $main_node, vB_TemplateParser $parser)
    {
        // some code            
    }
    public static function compile(vB_Node $main_node, vB_TemplateParser $parser)
    {
        //more code
    }
}

then somehow get that included before the template parser is called. (ETA: actually, I'm not sure if you even need to include the base class before defining a subclass, or include the class def before using it).

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

Got curious so decided to try it - the answer to both the above questions is "yes", you do need those things defined before they're used. So I used this code at hook admin_global:

Code:
require_once("includes/template_curly_defs.php");

class vB_TemplateParser_CurlyFoo extends vB_TemplateParser_Curly
{
    public static function validate(vB_Node $main_node, vB_TemplateParser $parser)
    {
        return array();
    }
    public static function compile(vB_Node $main_node, vB_TemplateParser $parser)
    {
        return "Foo";
    }
}

and then putting {vb:Foo} in a template resulted in Foo being inserted at that point. Of course the validate function should check the arguments and the compile function will probably do something more complicated, but you can look at the existing classes to figure that out.

On a side note, you know what turns out to be a bad idea? Creating a plugin using hook admin_global that has an error in it. I had to go to the database and edit the datastore value before I could get back to the plugin manager. ETA: but now that I think about it, it would have been easier just to temporarily comment out the fetch_hook call.
Reply With Quote
 


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 05:37 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.04316 seconds
  • Memory Usage 2,623KB
  • 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
  • (9)bbcode_code
  • (2)bbcode_html
  • (8)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (8)post_thanks_box
  • (8)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (8)post_thanks_postbit_info
  • (8)postbit
  • (8)postbit_onlinestatus
  • (8)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