1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Event Listener Editor: how to make a "Template_PRE_render" ?

Discussion in 'XenForo Development Discussions' started by cclaerhout, Aug 5, 2011.

  1. cclaerhout

    cclaerhout Well-Known Member

    Sorry I'm note yet familiar with xF terminology, but is it possible to modify a template (without hook) BEFORE it is rendered. If I understood correctly:

    1. "Template_post_render" is similar to vB "parse_templates" hook
    2. "Template_create" is a way to cache template. I first thought it was similar to vB "cache_templates" hook, but it seems there's no way to access $content variable from here.
    3. "Template_hook" is used to modify the template before it is rendered but only between hooks.
    For example I'm trying to do a simple thing : copy a template code into another template, using a regex to modify some elements. Very simple to do with vB3 ; but with xF I still don't understand how to do it. Spending hours without any success is quite discouraging :cry:
  2. cclaerhout

    cclaerhout Well-Known Member

    ... i guess it's the holiday season.
  3. Fuhrmann

    Fuhrmann Well-Known Member

    Would like to know this too..
  4. Jake Bunce

    Jake Bunce XenForo Moderator Staff Member

    cclaerhout and Fuhrmann like this.
  5. Floris

    Floris Guest

    is this what you're looking for?

    $temp_contents = $template->create('your_template', $template->getParams());
    $contents = $temp_contents . $contents;
    cclaerhout and Fuhrmann like this.
  6. Fuhrmann

    Fuhrmann Well-Known Member

    +2 for you guys! Thanks!
  7. cclaerhout

    cclaerhout Well-Known Member

    Thank you for your answers. That's not really what I was looking for, but my question wasn't really correct.

    I've just discovered that the "Template_hook" node also allow to made modifications on templates without hook yet. You just need to use a parent template which has a hook For example, the template "node_category_level_1" doesn't have any hook inside. But it still can be modified with the "Template_hook" node using the hook "page_container_head" of its parent template "PAGE_CONTAINER". Then a simple search and replace (str/regex) will work. But it still remains a little problem.

    I can search any element of the template code, except the one using the xen format code, ie: "<xen:if is="{$renderedChildren}">". In vBulletin 3, I just capture the template raw code using "print_r" or having a quick look in the database (ie, for the "if" elements), but neither of these methods work with xenForo.

    I just wonder if it's possible.

    Edit: I forgot, for those who would like to find which template hook can be the one of the parent template they're looking for, just put in their listener a simple :
    echo "$hookName <br />";
  8. xfrocks

    xfrocks Well-Known Member

    You can't do similar search and replace technique with $vbulletin->templatecache in XenForo because XenForo templates are completely "transformed" once they are compiled. You can take a look into xf_template_compiled and you will understand what I said. Because of that, even if you have template_pre_render, you can't do anything much.

    So, to put your contents into the template, you should use template_hook or you can use template_post_render and... do a search and replace. With tricky positions, I recommend using jQuery.xfInsert instead ;)
    cclaerhout likes this.
  9. cclaerhout

    cclaerhout Well-Known Member

    Thanks for your answer !

Share This Page