Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 07-15-2012, 03:26 PM
grey_goose grey_goose is offline
 
Join Date: Jun 2009
Posts: 284
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Replace Conditionals with Variables?

I've got a ton of conditionals in my postbit, and am wondering if there's a more elegant way to do what I want.

The following swaps backgrounds for usergroups:

HTML Code:
<vb:if condition="is_member_of($post, 11)"><div class="userinfoctl">
<vb:else />
<vb:if condition="is_member_of($post, 36)"><div class="userinfogse">
<vb:else />
<vb:if condition="is_member_of($post, 46)"><div class="userinfohtv">
<vb:else />
<vb:if condition="is_member_of($post, 12)"><div class="userinfomta">
<vb:else />
<vb:if condition="is_member_of($post, 47)"><div class="userinfoptc">
<vb:else />
<vb:if condition="is_member_of($post, 14)"><div class="userinfowod">
<vb:else />
<vb:if condition="is_member_of($post, 13)"><div class="userinfo2">
<vb:else />
<vb:if condition="is_member_of($post, 10)"><div class="userinfowtf">
<vb:else />
<div class="userinfo">
</vb:if>
</vb:if>
</vb:if>
</vb:if>
</vb:if>
</vb:if>
</vb:if>
</vb:if>
Can I get rid of the majority of this with something like:
HTML Code:
<div class="{vb:raw is_member_of}background">
...and then just rename my classes "46background", "12background", etc ?
Reply With Quote
  #2  
Old 07-15-2012, 08:23 PM
soniceffect's Avatar
soniceffect soniceffect is offline
 
Join Date: Feb 2005
Location: UK
Posts: 453
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

you wouldnt be able to do it that way, as a user could be a member of more than 1 usergroup. is_member_of is a function which checks through the usergroups a user has assigned and returns true or false. Is it only the primary usergroup that you are interested in?
Reply With Quote
  #3  
Old 07-15-2012, 10:46 PM
grey_goose grey_goose is offline
 
Join Date: Jun 2009
Posts: 284
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Right, it was just an example to demonstrate because I wasn't sure if there was a variable I could use.

Yes, I could probably manage with just using the primary usergroup.
Reply With Quote
  #4  
Old 07-16-2012, 11:33 AM
soniceffect's Avatar
soniceffect soniceffect is offline
 
Join Date: Feb 2005
Location: UK
Posts: 453
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If thats the case then could probably do a hook which retrieves primary usergroup from the user and makes it available to the css template and use it as you have stated above. If your not sure on how to do this yourself gimme a shout and will throw one together for you. Unless of course primary group is already available, not sure I would have to look.
Reply With Quote
  #5  
Old 07-17-2012, 05:45 PM
Sarteck's Avatar
Sarteck Sarteck is offline
 
Join Date: Mar 2008
Posts: 304
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Create a function, get_member_background($userinfo). Have it return the color you want. Define it in a plugin on global_complete or something.

Do you want to be able to call this function in a template? If so, add another plugin on the template_safe_functions hook, and then add your function name into the allowed functions for conditionals, like so:
PHP Code:
$safe_functions[] = 'get_member_background'
Now, in your Template, you could go something like,


HTML Code:
<vb:if condition="$post['background'] = get_member_background($post)"><div class="{vb:raw post.background}">
<vb:else />
<div class="userinfo">
</vb:if>
Reply With Quote
  #6  
Old 07-18-2012, 08:09 AM
soniceffect's Avatar
soniceffect soniceffect is offline
 
Join Date: Feb 2005
Location: UK
Posts: 453
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Sarteck View Post
Create a function, get_member_background($userinfo). Have it return the color you want. Define it in a plugin on global_complete or something.

Do you want to be able to call this function in a template? If so, add another plugin on the template_safe_functions hook, and then add your function name into the allowed functions for conditionals, like so:
PHP Code:
$safe_functions[] = 'get_member_background'
Now, in your Template, you could go something like,


HTML Code:
<vb:if condition="$post['background'] = get_member_background($post)"><div class="{vb:raw post.background}">
<vb:else />
<div class="userinfo">
</vb:if>
Oh thats a handy thing to know.
Reply With Quote
  #7  
Old 07-18-2012, 08:14 AM
Sarteck's Avatar
Sarteck Sarteck is offline
 
Join Date: Mar 2008
Posts: 304
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Yeah, I was wanting to use array_rand() in one of my own modifications a long time ago, to choose a random image from a set of images to display. Found that handy info in the comments on the manual, else I'd never have known. :3
Reply With Quote
  #8  
Old 07-18-2012, 08:45 AM
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Posts: 1,987
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Apart from other solutions - there is elseif in vB4 conditionals.

<vb:if condition="condition">do smth. if exactly this condition is met.
<vb:elseif condition="condition" />do smth. if exactly this condition is met.
<vb:elseif condition="condition" />do smth. if exactly this condition is met.
<vb:else />do smth. if none of the prior conditions is met.
</vb:if>
Reply With Quote
  #9  
Old 07-19-2012, 09:16 PM
grey_goose grey_goose is offline
 
Join Date: Jun 2009
Posts: 284
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Awesome, thanks all

On a completely unrelated note...

I have two mods that are in {vb:raw template_hook.showthread_above_posts}, how would I change the order they're displayed in?

Mod A
Mod B

to

Mod B
Mod A
Reply With Quote
  #10  
Old 07-19-2012, 10:50 PM
Sarteck's Avatar
Sarteck Sarteck is offline
 
Join Date: Mar 2008
Posts: 304
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You can edit the plugin execution order. Most plugins have a default execution order of '5'. Set Mod A to have an execution order of '4'. (That's the simplest way to do it, anyhow.)
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 03:35 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04536 seconds
  • Memory Usage 2,257KB
  • Queries Executed 11 (?)
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_html
  • (2)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (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
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete