Smarty (модификаторы, массивы, циклы и пр. подсказки)

Модификаторы Smarty:

upper, lower, capitalize:

Описание: возвращает строку, в которой все буквенные символы переведены в верхний или нижний регистр или заглавные соответственно 

{$text|upper}

truncate:

Описание: обрезает строку. Можно задать длину строки для обрезания, чем заканчивается обрезанная часть и обрезать ли слова.

Пример:

{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
{$articleTitle|truncate:30:'..':true:true}

Результат: 

Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
Two Sisters Re..ckout Counter.

replace:

Описание: передает для замены строку или массив (значения через запятую). Если на что менять не задано, то просто удаляет совпадения

Данный пример удалит пробелы:

{$text|replace:" ":""}

regex_replace:

Описание: поиск и замена по регулярному выражению

Данный пример очистит номер телефона от лишних символов:

{$phone|regex_replace:'/[() -]/' :''}

mb_substr:

удалить первый символ переменной

{$text|mb_substr:1}

удалить последний символ переменной

{$text|mb_substr:0:-1}

strip_tags:

Описание: Удаляет теги html разметки

Пример:

{$articleTitle}
{$articleTitle|strip_tags}

Результат:

Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.
Blind Woman Gets New Kidney from Dad she Hasn't Seen in years .

Кодирование-декодирование URL:

{$url|urldecode}

Результат: utm_term=паста

{$url|urlencode}

Результат: utm_term=%D0%BF%D0%B0%D1%81%D1%82%D0%B0

Конкатенация (добавление к переменной):

{$text|cat:" добавляемый текст"}

Подсчитать кол-во символов (параграфов, предложений, слов):

{$text|count_characters}

Аналогично: count_paragraphs, count_sentences и count_words

Отрезать все, что после символа &:

{$text|regex_replace:'/&.*/':''}

Проверка вхождения в $text подстроки $sub:

{if $text|strpos:$sub !== false}

Первые n-символов в переменной:

{if $filename|substr:0:4 == 'http'}

Текущая дата:

{$smarty.now|date_format:"%d.%m.%Y %H:%M"}

Завтра (+ 1 день):

{strtotime('+1 day')|date_format:"%d.%m.%Y %H:%M"}

Условие по времени (если > 9 утра):

{if $smarty.now|date_format:'%H.%M' '09.00'}

Преобразование даты в UNIX:

{$dd.mm.yyyy hh:mm:ss_var|strtotime}

Заменяет все переносы строк на тэг <br /> в заданной переменной:

{$test|nl2br}

Добавляет пробел между разрядами крупных чисел: 

{$number|number}

Например 65000 приводится к виду 65 000.

Форматирование строк:

Напр. отрезать символы дальше сотых:

{$number|string_format:'%.2f'}

Экранирование:

{$text|escape}{$text|escape:'html'} // экранирует & " ' < > 

{$text|escape:'htmlall'} // экранирует ВСЕ HTML-сущности

{$text|escape:'url'}

{$text|escape:'quotes'}

trim:

Описание: обрезание пробелов в начале и в конце переменной

{$text|trim}

Еще больше полезностей из Smarty:

Информация о переменной:

{$var|print_r} 

Как закомментировать?

{* комментарий *}

Как экранировать код в котором встречаются {}:

Поставить после { пробел, либо обернуть в:

{literal}...{/literal}

Как создать внутреннюю переменную smarty (напр $var) и присвоить ей значение:

{$var = "..."}

Использование условий if:

{if isset($name) && !empty($name)} ... {elseif $name == $foo} ... {/if}

{if is_array($foo) && count($foo) > 0) {* do a foreach loop *} {/if}

Тернарный оператор:

{$cat_id = {($category) ? $category->id : ''}}

Как посчитать количество элементов в массиве:

{$group.items|count}

in_array:

Описание: Проверяет наличие значения переменной $module в массиве

{if in_array($module, array('ProductView', 'ProductsView', 'CartView', 'OrderView', 'BrowsedView', 'CompareView', 'WishlistView'))}

Пример 2: Проверка вхождения переменной $pname в массив get-параметров v1

{if $pname|in_array:$smarty.get.v1}

Как организовать цикл for:

Например нужен такой цикл: for($i=1;$i<10;$i++)

{section name=foo loop=9}
   {$smarty.section.foo.iteration}
{/section}

{for $foo=1 to $to max=9}
   {$foo}
{/for}

Первый и последний элемент цикла:

{foreach $purchases as $purchase}

{if $purchase@first}...{/if}

{if $purchase@last}...{/if}

{/foreach}

Прервать цикл foreach:

{break}

Итерация:

{foreach $products as $p}

<p>product_num="{$p@iteration}"</p>

{/foreach}

  • Более сложная задача - вывести записи из цикла отдельными блоками по 4 шт:

{foreach $banners as $banner}
  {if $banner@first}
    <ul>
  {/if}
      <li><img src="{$banner->image}" /></li>
  {if $banner@iteration%4 == 0 || $banner@last}
    </ul>
    {if !$banner@last}<ul>{/if}
  {/if}
{/foreach}

Вывод первых 3 свойств через срез массива:

{foreach $product->features|@array_slice:0:3 as $f}

<p>{$f->name} - {$f->value}</p>

{/foreach}

Где: 0 - начало среза, 3 - кол-во элементов

Преобразовать строку в массив $widgets_ids по одинаковому разделителю ",":

{$widgets_ids = ","|explode:"1,2,3,4,5,6,7,8"}

{foreach $widgets_ids as $widget_id}

{$widget_id}

{/foreach}

Записать значения id в массив $labels_ids:

{foreach $order->labels as $l}

{$labels_ids[] = $l->id}

{/foreach}

Проверка различия между массивами:

Ф-я array_diff($array1, $array2) даст те элементы, которые есть в массиве array1, но нет в массиве array2

{array_diff($array1, $array2)}

Рандомное число:

{math equation='rand(10,100)'}

Округление:

Напр. до сотых:

{$number|round:2} 

До целых в меньшую сторону:

{$number|floor} 

Получение GET-параметра:

Например из URL типа site.ru?utm_text=текст

{$smarty.get.utm_text}

Отображение параметра "page" из формы ($_POST['page'])

{$smarty.post.page}

Отображение значения cookie "name" ($_COOKIE['name'])

{$smarty.cookies.name}

Отображение серверной переменной "SERVER_NAME" ($_SERVER['SERVER_NAME'])

{$smarty.server.SERVER_NAME}

Адрес текущей страницы:

{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}

или

{$config->root_url}{$smarty.server.REQUEST_URI}

Адрес текущей страницы без GET-параметров:

{$smarty.server.HTTP_HOST}{strtok($smarty.server.REQUEST_URI,'?')}

или

{$config->root_url}{strtok($smarty.server.REQUEST_URI,'?')}

Отображение переменной системного окружения "PATH":

{$smarty.env.PATH}

Получить ID сессии:

{$smarty.session.id}

Получить значение $_SESSION['name']:

{$smarty.session.name}

Отображение переменной "name" из смешанных get/post/cookies/server/env

{$smarty.request.name}

Определение расширения файла:

{$image->name|pathinfo:$smarty.const.PATHINFO_EXTENSION}

Подключить шаблон:

{include file='file_name.tpl'}

Случайное значение из массива:

{$array|@array_rand}

fetch (получить содержимое стороннего источника)

{* embed some weather text in your template from another web site *}
{fetch file='http://www.myweather.com/68502/'}

{* assign the fetched contents to a template variable *}
{fetch file='http://www.myweather.com/68502/' assign='weather'}
{if $weather ne ''}
    <div id="weather">{$weather}</div>
{/if}

cycle (поочередно отдает значения)

{section name=rows loop=$data}
<tr class="{cycle values="odd,even"}">
   <td>{$data[rows]}</td>
</tr>
{/section}

nocache - отключает кэширование в шаблоне

{nocache}
   {$smarty.now|date_format}
{/nocache}

Увеличение/уменьшение переменной на 1

{$foo--{$foo++}

Видимость переменных

{$foo="bar" scope="root"} - видят все шаблоны, использующие один корень

{$foo="bar" scope="global"} - видят все шаблоны

Документация Smarty:

UPD: обновлено 01.05.2024

Еще нет своего сайта? Запустите интернет-магазин на платформе 5CMS - Все для продаж уже внутри!

Рекомендуем прочитать