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:
- Встроенные плагины Smarty
- Вся документация по Smarty
- Создание своих модификаторов Smarty
- Доступные переменные в шаблонах
UPD: обновлено 01.05.2024
Еще нет своего сайта? Запустите интернет-магазин на платформе 5CMS - Все для продаж уже внутри!
-
5CMS обеспечивает легкий вход для программиста.
Разберемся как работает наша CMS.
-
В папке API содержатся все основные классы 5CMS.
Данные классые предназначены только для работы с базой данных системы.

