PDA

View Full Version : [Concept Demo RC3] Conditionals in templates


Mike Sullivan
14 May 2001, 00:11
I threw this together in about 45 minutes today. It allows you to put stuff like this in your templates:
{if ($bbuserinfo[userid]) {
<a href="usercp.php?s=$session[sessionhash]">User CP!</a>
}else{
<a href="register.php?s=$session[sessionhash]&action=signup">Signup!</a>
}endif}

Of course, it requires a code edit for each template, so it's somewhat counter intuitive, but as I said, it's not exactly a release -- it's more a concept demo. :)

Requires PHP4 as I use the /e modifier. Also, you'll want to have some decent PHP understanding. See attachment for more info.

Feel free to ask questions, but I may not answer/support like I did past hacks.

bira
14 May 2001, 04:38
Thanks Mike, I needed something like this!

Mark Hewitt
14 May 2001, 10:44
I like :cool:

TWTCommish
14 May 2001, 23:31
If you're looking for a quick way to swap buttons, do what I did: use the phpinclude template, a one-line ternary operator that stores the HTML for either the register button, or the user cp button -- hold it in a variable name not used elsewhere, and call on it in the template.

Example:


$the_button = (isset($bbuserid)) ? sprintf('<img src="images/top_register.gif">') : sprintf('<img src="images/top_usercp.gif">');

Mike Sullivan
15 May 2001, 01:00
That was just an example :)

And if you wanna get technical, you should check $bbuserinfo[userid] instead of bbuserid for those who don't store their username/password. :p

TWTCommish
15 May 2001, 01:07
A competition now, eh? :) Well, it's just an extremely simple way to allow people to display the appropriate button. :)

Wayne Luke
15 May 2001, 22:25
Chris -

It isn't a competition. Look at where Mike said he put his conditional and look at where you put yours.

Mike is talking about adding conditionals to any template where they are processed by keyword. This could be used by non-programmers to make things all over the system change based on various information. They wouldn't have to learn a whole new language just a few commands.

Mike -
This is a great concept and it should probably be pursued for later versions. This would greatly improved the functionality of vBulletin.

TWTCommish
15 May 2001, 22:32
Yes, I know -- I was making a joke. :)

Mas*Mind
16 May 2001, 01:41
Personally I don't see the point to give templates this functionality. Templates are meant to separate code from layout and now you're bringing back the code into the layout :confused:

It gives templates more flexibility: true, but also makes them harder to understand to newbies.

This can be a great addon for some people, but I hope this won't be a standard in vb

Mike Sullivan
16 May 2001, 03:28
Would this version ever see an official release? No, it's physically impossible because it requires PHP4.

Then you add that fact that you regex any template that you want to use with it :(

Using this system could eliminate a large amount of templates though...

Mas*Mind
16 May 2001, 08:20
Would this version ever see an official release? No, it's physically impossible because it requires PHP4.

Then you add that fact that you regex any template that you want to use with it :(


Yes, it can dramaticly infect the speed. I'm not sure how many, but regexes are pretty resource intensive


Using this system could eliminate a large amount of templates though...

Yeah, but still: It defeats the purpose of templates imho :)

chrispadfield
16 May 2001, 10:15
i don't know, gossamer threads does this sort of thing for their links based templates and it works very very well. It saves having to have 10 million options for everything like how many links to display here, there and everywhere else because you can set it as part of the template, and in that case it is a display thing because displaying 10 links as opposed to 20 is a display issue. I am not sure the idea transfers over so well to vb but it is still interesting idea anyway.

cliffe2
21 May 2001, 20:36
a combi of a php variable & javascript can do something nice too ...

Vinnie
25 May 2001, 20:42
This is EXACTLY what I need.

However, I am concerned about the speed issues, and the necessity of reapplying the mod for every new release.

This having been said, I have an expanded "fivelinks" nav bar at the top of my forum:
http://forum.bearsharelabs.com
or
http://208.239.76.100

I want to have the "Logout" icon change to "Login" depending on the state of the user.

It would also be nice to have a "Post" icon appear in the list at the appropriate time.

And, it would be cool to NOT show the "User control panel" icon when they are actually already viewing the control panel.

While we're at it, it would be good not to show the Admin icon unless they actually had administrator privileges.

The possibilities are endless.

Mas*Mind
25 May 2001, 22:21
Originally posted by chrispadfield
i don't know, gossamer threads does this sort of thing for their links based templates and it works very very well. It saves having to have 10 million options for everything like how many links to display here, there and everywhere else because you can set it as part of the template, and in that case it is a display thing because displaying 10 links as opposed to 20 is a display issue. I am not sure the idea transfers over so well to vb but it is still interesting idea anyway.

I don't say it's not usefull; In most cases it actually saves alot of vbcode to accomplish certain things. But again: Templates are meant to separate code from layout (for designs sake and to make it friendly for non-coders). Bringing back the code into it just makes no sense.

fastforward
25 May 2001, 22:59
Originally posted by Ed Sullivan
Then you add that fact that you regex any template that you want to use with it :(
How are replacement variables handled then? Isn't every template parsed for these things anyway? Can't you just have a special type of replacement variable that has it's replaced value treated as a block of code?

Oversimplified I know, but is it feasible?

This is definately something I'd like though. Even if it only handled a simple if then construct it would be great.

Mas*Mind
25 May 2001, 23:27
Originally posted by fastforward

How are replacement variables handled then? Isn't every template parsed for these things anyway? Can't you just have a special type of replacement variable that has it's replaced value treated as a block of code?

Oversimplified I know, but is it feasible?

This is definately something I'd like though. Even if it only handled a simple if then construct it would be great.

Regexing text is far more resource-intensitive then using str_replace (like replacement vars are parsed)

fastforward
26 May 2001, 03:02
Originally posted by Mas*Mind


Regexing text is far more resource-intensitive then using str_replace (like replacement vars are parsed)
Actually there are calls to preg_replace in both the dovars() and the bbcodeparse2() functions (replacement vars and bbcode).

Mike Sullivan
26 May 2001, 05:18
bbcodeparse2() is completely unrelated to replacement variables... it's the general post parsing routine. You can't do str_replace()'ment on anything there...

The one in dovars() is most likely for the pm popup and only processed when there's a PM popup.

Replacement variables are done with str_replace() which is faster than preg_replace which is faster than ereg_replace()...

ConqSoft
20 Nov 2005, 22:26
Any plans to port this over to vB 3.5.x? ;)

Actually, I just ran across this and thought it was interesting to see when/how template conditionals got their start.

akanevsky
28 Nov 2005, 01:43
Any plans to port this over to vB 3.5.x?

lol? This has been an integrated feature since 3.0.x...