Сократить умные заявления

У меня есть умный, если заявление следующим образом:

<{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 ответа

Решение

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

ПРИМЕЧАНИЕ: в моем шаблоне я должен использовать <{}> вместо {}, чтобы запустить 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}>

Проверьте это: 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}
Другие вопросы по тегам