如果陈述,缩短聪明

时间:2012-07-05 01:17:08

标签: smarty smarty3

我有一个聪明的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。任何建议都将受到高度赞赏。

干杯。

2 个答案:

答案 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}