Перейти к содержимому

Свои модификаторы Smarty в Webasyst

Smarty-шаблонизатор в Webasyst поддерживает модификаторы — функции, которые обрабатывают данные прямо в шаблоне. Помимо встроенных модификаторов (|escape, |truncate, |upper и др.) вы можете создавать собственные для решения специфических задач.

Все пользовательские модификаторы размещаются в директории:

wa-system/vendors/smarty-plugins/

Название файла должно соответствовать шаблону modifier.<имя>.php, где <имя> — название модификатора, которое вы будете использовать в шаблонах.

Внутри файла создайте функцию с именем smarty_modifier_<имя>. Она принимает значение переменной из шаблона и возвращает обработанный результат.

После создания файла обязательно очистите кеш Webasyst: Настройки → Системные → Очистка кеша.

Применяйте модификатор через символ | (pipe), как и любой встроенный модификатор Smarty.

По умолчанию значения фильтров в каталоге выводятся в том порядке, в котором они сохранены. Чтобы отсортировать их по алфавиту, создадим модификатор sort.

Файл: wa-system/vendors/smarty-plugins/modifier.sort.php

<?php
function 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

<?php
function 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

<?php
function 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.