Сократить умные заявления
У меня есть умный, если заявление следующим образом:
<{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}