PHP: Тернарный оператор для Smarty
Начиная с третьей версии шаблонизатора Smarty (а именно, еще в далеком 2009 году) мы получили поддержку в шаблонах тернарного (ternary) оператора. Однако, описание этой полезной конструкции потерялась где то в недрах документации и многие из нас продолжают по старинке пользоваться монстром из нагромождения {if} ... {else} ... {/if}
Давайте упростим жизнь себе и окружающим и начнем пользоваться укороченной конструкцией тернарного оператора:
{(empty($inbox)) ? 'no emails' : 'you have got a letter' }
Здесь стоит обратить внимание на одну важную вещь, а именно: на различие в реализации тернарного оператора в Smarty по сравнению с реализацией в PHP.
Условие тернарного оператора должно быть обязательно заключено в круглые скобки.
Вот пример того, как с таким оператором можно легко присвоить результат сравнения какой-либо переменной:
{$privateState = {(isset($privateMode)) ? 'Yes' : 'No'}}
Или, еще один полезный пример, как сделать присвоение без фильтрации данных, используя модификатор nofilter (без него Smarty заэкранировал бы нам двойные кавычки):
{$hideElement = {($data.isHidden) ? 'class="hidden"' nofilter : ''}}
Надеюсь, не смотря на бородатость этой фичи, я помог кому-то из вас.