сократить умные операторы if

У меня есть умный оператор 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. Любое предложение будет высоко оценено.

Ваше здоровье.


person Subash    schedule 05.07.2012    source источник


Ответы (2)


На самом деле это решение, которое я придумал.

ПРИМЕЧАНИЕ. В моем шаблоне я должен использовать ‹{}> вместо {}, чтобы запустить smarty. Просто так устроен шаблон.

        <{$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}>
person Community    schedule 05.07.2012

Проверьте это: 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}
person bksi    schedule 05.07.2012
comment
большое спасибо за попытку помочь. Но это не отвечает на мой вопрос и могло быть комментарием. - person Subash; 05.07.2012
comment
Но вы хотели сократить чеки, верно? Вы можете назначить один раз страницы и действия, а затем использовать только сокращенный оператор if - person bksi; 05.07.2012
comment
Я не видел, как ты редактировал. Я постараюсь и дам вам знать, как это происходит. Ваше здоровье. - person Subash; 05.07.2012
comment
большое спасибо. Но это не работает для меня, так как я могу написать {php} в своем коде, как я уже упоминал в вопросе. - person Subash; 05.07.2012