Свои модификаторы Smarty в Webasyst
Smarty-шаблонизатор в Webasyst поддерживает модификаторы — функции, которые обрабатывают данные прямо в шаблоне. Помимо встроенных модификаторов (|escape, |truncate, |upper и др.) вы можете создавать собственные для решения специфических задач.
Как создать свой модификатор
Заголовок раздела «Как создать свой модификатор»1. Создайте файл модификатора
Заголовок раздела «1. Создайте файл модификатора»Все пользовательские модификаторы размещаются в директории:
wa-system/vendors/smarty-plugins/Название файла должно соответствовать шаблону modifier.<имя>.php, где <имя> — название модификатора, которое вы будете использовать в шаблонах.
2. Напишите функцию
Заголовок раздела «2. Напишите функцию»Внутри файла создайте функцию с именем smarty_modifier_<имя>. Она принимает значение переменной из шаблона и возвращает обработанный результат.
3. Очистите кеш
Заголовок раздела «3. Очистите кеш»После создания файла обязательно очистите кеш Webasyst: Настройки → Системные → Очистка кеша.
4. Используйте в шаблоне
Заголовок раздела «4. Используйте в шаблоне»Применяйте модификатор через символ | (pipe), как и любой встроенный модификатор Smarty.
Пример: сортировка фильтров по алфавиту
Заголовок раздела «Пример: сортировка фильтров по алфавиту»По умолчанию значения фильтров в каталоге выводятся в том порядке, в котором они сохранены. Чтобы отсортировать их по алфавиту, создадим модификатор sort.
Создаём файл
Заголовок раздела «Создаём файл»Файл: wa-system/vendors/smarty-plugins/modifier.sort.php
<?phpfunction smarty_modifier_sort($array){ asort($array); return $array;}Применяем в шаблоне
Заголовок раздела «Применяем в шаблоне»Откройте файл category.html вашей темы дизайна и найдите строку вывода значений фильтра:
{foreach $filter.values as $v_id => $v}Замените на:
{foreach $filter.values|@sort as $v_id => $v}Символ @ перед именем модификатора означает, что модификатор применяется ко всему массиву целиком, а не к каждому его элементу по отдельности.
После сохранения и очистки кеша все фильтры в каталоге будут выведены в алфавитном порядке.
Другие примеры модификаторов
Заголовок раздела «Другие примеры модификаторов»По такому же принципу можно создавать модификаторы для любых задач.
Преобразование первой буквы в заглавную:
Файл: modifier.ucfirst_ru.php
<?phpfunction smarty_modifier_ucfirst_ru($string){ return mb_strtoupper(mb_substr($string, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($string, 1, null, 'UTF-8');}Использование в шаблоне:
{$product.name|ucfirst_ru}Склонение слов по числу (штук, товаров и т.д.):
Файл: modifier.plural.php
<?phpfunction smarty_modifier_plural($n, $form1, $form2, $form5){ $n = abs($n) % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) return $form5; if ($n1 > 1 && $n1 < 5) return $form2; if ($n1 == 1) return $form1; return $form5;}Использование в шаблоне:
{$count} {$count|plural:'товар':'товара':'товаров'}- Файлы модификаторов размещаются в системной директории
wa-system/. При обновлении Webasyst они могут быть перезаписаны. Рекомендуется сохранять резервные копии своих модификаторов. - После любого изменения файлов модификаторов необходимо очищать кеш.
- Модификаторы доступны во всех приложениях Webasyst, не только в Shop-Script.