我有一个聪明的if语句如下:
<{if $page->getURLName() eq 'big-issues' or $page->getURLName() eq 'polls' or $page->getURLName() eq 'what-we-do' or $action eq 'events' or $action eq 'blogs' or $action eq 'news'}>
我必须在模板中多次比较相同的语句。多次重复这些陈述真是太乏味了。我知道我可以缓存一个语句并重复使用它很多次,但我一直在寻找是否可以这样做:
<{if $page->getURLName() eq 'big-issues' or 'polls' or 'what-we-do' or 'events' or $action eq 'blogs' or 'news'}>
像PHP一样,我们可以这样做:
$url = array ("big-issues","polls","what-we-do");
$needle = $page->getURLName();
if(in_array($needle, $centered)) {
//Do something
}
请注意,我没有访问模板的PHP代码,所以只能使用smarty。任何建议都将受到高度赞赏。
干杯。
答案 0 :(得分:2)
实际上这是我提出的解决方案。
注意:在我的模板中,我必须使用&lt; {}&gt;而不是{}开始聪明。它就是模板的设置方式。
<{$urlName = ['big-issues','polls','what-we-do']}>
<{$actionType = ['news','blogs','events']}>
<{foreach item="url" from=$urlName}>
<{if $page->getURLName() eq $url}>
<{assign var=showBlock value=1}>
<{/if}>
<{/foreach}>
<{foreach item="act" from=$actionType}>
<{if $action eq $act}>
<{assign var=showBlock value=1}>
<{/if}>
<{/foreach}>
现在,我可以在HTML中多次查看相同的语句而不会弄乱代码。
<{if $showblock}>
<div class="block">
<{else}>
<{div class="regular"}>
<{/if}>
答案 1 :(得分:0)
检查一下: http://www.smarty.net/forums/viewtopic.php?p=48466
这是为了在模板中分配给数组: How to assign an array within a smarty template file?
应该是这样的:
{assign var='pages' value=','|explode:"big-issues,polls,what-we-do,events"}
{assign var='actions' value=','|explode:"blogs,news"}
{if in_array($page->getURLName(), $pages) or in_array($action, $actions)}
do something
{/if}