PDA

View Full Version : Auto-Template edits with RegEx


JamesGunner
01-29-2010, 08:31 PM
Hello,

I created my product here:

https://vborg.vbsupport.ru/showthread.php?threadid=231363

Now I wanted to add auto-template edits. Since it's multiple line edits I thought of using regex. Now this is the actual part where I'm stuck. After getting plenty of errors, I fixed those but now I'm stuck at the point where it still doesn't seem to replace the cached template but no errors pop up. I searched for a couple of Tutorials for auto-templates but those don't work for me since I have to replace multiple lines. I found the most useful:

https://vborg.vbsupport.ru/showthread.php?t=151254

Anyways this is my product code:

<plugin active="1">
<title>Do first template edit</title>
<hookname>forumdisplay_complete</hookname>
<phpcode>
<![CDATA[$templatefind1 = '~<vb:if condition="$show[\'newthreadlink\']">(.+?)id="newthreadlink_top"(.+?)vb:if>~s';
$templaterepl1 = '<vb:if condition="$show[\'newthreadlink\']"><vb:if condition="$foruminfo[\'new_thread_link\']"><a href="{vb:raw foruminfo.new_thread_link}" rel="nofollow" class="newcontent_textcontrol" id="newthreadlink_top"><span>+</span> {vb:rawphrase post_new_thread}</a><vb:else /><a href="newthread.php?{vb:raw session.sessionurl}do=newthread&amp;f={vb:raw foruminfo.forumid}" rel="nofollow" class="newcontent_textcontrol" id="newthreadlink_top"><span>+</span> {vb:rawphrase post_new_thread}</a></vb:if><vb:else />&nbsp;</vb:if>';

$vbulletin->templatecache['FORUMDISPLAY'] = preg_replace ($templatefind1, $templaterepl1, $vbulletin->templatecache['FORUMDISPLAY']);]]>
</phpcode>
</plugin>

1. I tried many things also the stuff described in the above named thread, it still didnt work. I hope you guys are able to help me in some way :)

2. I also couldn't find a way to display the ouput of $vbulletin->templatecache['FORUMDISPLAY']. Is there any standard way?

I just found that RegEx would be the best solution if you guys could suggest any better than that would be appreciated.

Thanks for the help ahead.

Mutt
04-27-2010, 11:12 PM
did you ever find a answer?


i'm doing this exact same thing right now. I'm updating a 3.8 product that used that same tutorial you mentioned to do an auto template edit.


I've updated my code this far

if ($forumid!=$vbulletin->options['mrt_id']) {
$original = '<li><label><input type=\"radio\" name=\"do\" value=\"movethread\" tabindex=\"3\" /> {vb:rawphrase move_thread}&hellip;</label></li>';
$replace = '<li><label><input type=\"radio\" name=\"do\" value=\"recyclethread\" tabindex=\"3\" /> {vb:rawphrase recycle_thread}&hellip;</label></li>';
$vbulletin->templatecache['SHOWTHREAD'] = str_replace($original,$replace . "\r\n\t\t\t" . $original, $vbulletin->templatecache['SHOWTHREAD']);
}

BUT templates are handled differently now. just peeked into several v4 products to see how other people are handling it & it looks like most people are doing their auto template inserts using template hooks. that doesn't help me.


any help would be appreciated working hard trying to retrain myself to vb4 & I'd rather learn how to do it right than just go edit the template.

Mutt
04-28-2010, 11:19 PM
for not I added a template hook to the template & then used a plugin to add the code. I know this seems odd since I edited the template anyway but I have more than 1 thing I'm adding in that spot so I'll be able to use the hook for more than 1 product.

Andreas
05-02-2010, 03:37 PM
did you ever find a answer?
The best advice I could give you is:
Don't do it. Never.

It just causes unnecessary overhead, breaks any installation that does not use the DB to deliver template code - and hardly ever works with customized styles anyway.

If you need to change a template and there is no template hook you could use just prodive instructions to change the template.

Paul M
05-02-2010, 09:21 PM
I used this system a lot in 3.x, before template hooks came along - since then I have tried to use t/hooks as much as possible. Sometimes however, none exist where you need them.

The mistake most people make (which applies to both problems above) is that people forget that the template cache is not the actual template you edit or display in the acp - it is the compiled php code - therefore vb template code tags such as <if> and <phrase> no longer exist in it, they have been converted into php code.

Mutt
05-18-2010, 12:47 PM
thanks guys