1

次のようなスマートな 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しか使用できないことに注意してください。どんな提案でも大歓迎です。

乾杯。

4

2 に答える 2

2

実際、これは私が思いついた解決策です。

注: 私のテンプレートでは、スマートに開始するために {} の代わりに <{}> を使用する必要があります。テンプレートがどのように設定されているかだけです。

        <{$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}>
于 2012-07-05T02:45:53.673 に答える
0

これを確認してください: http ://www.smarty.net/forums/viewtopic.php?p = 48466

そしてこれはテンプレート内の配列に割り当てるためのものです: smartyテンプレートファイル内の配列を割り当てる方法は?

次のようになります。

{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}
于 2012-07-05T01:23:08.397 に答える