Установка плагина для Smarty

Добрый день!

Прошу подсказать, что еще требуется сделать чтобы заработало? Необходимо добавить модификатор для транслитерации русского текста на английский.

Создал в /app/functions/smarty_plugins/ файл modifier.translit.php

Содержимое файла:
<?php

function smarty_modifier_translit($text)
{
$text = mb_strtolower($text);

$gost = array(
// Буквы
‘а’=>‘a’,
‘б’=>‘b’,
‘в’=>‘v’,
‘г’=>‘g’,
‘д’=>‘d’,
‘е’=>‘e’,
‘ё’=>‘yo’,
‘ж’=>‘zh’,
‘з’=>‘z’,
‘и’=>‘i’,
‘й’=>‘j’,
‘к’=>‘k’,
‘л’=>‘l’,
‘м’=>‘m’,
‘н’=>‘n’,
‘о’=>‘o’,
‘п’=>‘p’,
‘р’=>‘r’,
‘с’=>‘s’,
‘т’=>‘t’,
‘у’=>‘u’,
‘ф’=>‘f’,
‘х’=>‘h’,
‘ц’=>‘c’,
‘ч’=>‘ch’,
‘ш’=>‘sh’,
‘щ’=>‘shh’,
‘ъ’=>‘j’,
‘ы’=>‘y’,
‘ь’=>‘’,
‘э’=>‘e’,
‘ю’=>‘yu’,
‘я’=>‘ya’,
// Всякие знаки препинания и пробелы
’ ‘=>’-‘,
’ - ‘=>’-’,
‘_’=>‘-’,
//Удаляем
‘.’=>‘’,
‘:’=>‘’,
‘;’=>‘’,
‘,’=>‘’,
‘!’=>‘’,
‘?’=>‘’,
‘>’=>‘’,
‘<’=>‘’,
‘&’=>‘’,
‘*’=>‘’,
‘%’=>‘’,
‘$’=>‘’,
‘"’=>‘’,
‘'’=>‘’,
‘(’=>‘’,
‘)’=>‘’,
‘`’=>‘’,
‘+’=>‘’,
‘/’=>‘’,
‘\’=>‘’,
);
return strtr($text, $gost);
}

?>
Что может быть не так? Вывод в формате {$feature.name|translit} выводит пустоту.

PS Понял, в чем была моя ошибка, поправил выше - функция работает. Результат - открывающий тег с модификатором, закрывающий - без модификатора.
image

1 лайк

это весь файл? в конце надо что-то вернуть

‘+’=>’’,
‘/’=>’’,
‘\’=>’’,
);
return str_replace(array_keys($gost), array_values($gost), $text);
}
?>
1 лайк

Да, стоило только на форум написать и до самого дошло что вывода результата нет в функции :slight_smile: Теперь поправил - ну пусть будет, мало ли кому пригодится. Фича то полезная многим может быть :slight_smile:

стоило, я что-то этого раньше не касался, теперь понятно что это просто ))

Мне оно понадобилось для модификации шаблона выгрузки AlexBranding. Но так то да, действительно может оказаться очень полезным во многих задачах. Где через Смарти сделать сложно или никак, а в php модифицировать легко… Множество прикладных задач можно так решить.

В CS-Cart все php-функции доступны для вызова из Смарти. Не обязательно объявлять модификатор, достаточно функции в рамках кастомного модуля.

Мне, как не разработчику, в функциях CS-Cart многих без литра ну никак не разобраться, да часто и не найти нужную(сколько раз пробовал, а там смерть Кощеева - иголка в яйце, функция в функции, в той функции функция…). Да и плагин смарти прикрутить раз в 20 проще и быстрее, чем модуль сделать. И этим я явно еще буду пользоваться, а вот модули делать самостоятельно - ну нафиг.

А кстати… может я не знаю - а есть где-то список всех функций, описания аргументов и результатов их применения? В понятном и читабельном виде, чтобы можно было взять и воспользоваться, а не заниматься изучением кода?

Свои функции можно создавать в рамках модуля Мои изменения (app/addons/my_changes/func.php)
Этот модуль готов к использованию в чистой установке, нужно только включить.

По поводу списка функций, не сталкивался. Основная часть раскидана по файлам в app/functions (то что не относится к модулям). Большая часть подписана через PHPdoc. Найдите поиском по файлам “function fn_get_products” (к примеру) и над объявлением функции увидите список аргументов и краткое описание.

Вот… сначала бы еще узнать как называется так функция, которую надо искать… В общем, нереально. Да даже как новым разработчикам разбираться не понятно. Как-то неправильно это, полное отсутствие документации.

А в модуле МоиИзменения - туда если всё подряд(а в каждой второй теме по любому поводу предлагается этот модуль править, а я вот просто успеваю забыть как оно там вообще должно выглядеть, все эти схемы, контроллеры, несколько взаимосвязанных файлов… не разработчик, мне с этим сложно) писать то тоже не понятно. Плюс оно то закешируется(что вообще вводит в ступор - я накосячил, или оно не работает, или изменения не применились?), то еще что, установить, удалить… Это не для меня, когда я по 30 раз подряд могу в одной строчке накосячить, мне надо сохранить, обновить, и увидеть.

А вот вопрос по старой теме… Модификатор обязательно в
/app/functions/smarty_plugins/
ставить, или возможно в рамках модуля (я имею ввиду структуру каталога внутри папки модуля) разместить?

Можно. Посмотрите код модуля call_request. Там в init_templater через хук нужно подключить директорию с Вашими файлами-функциями

2 лайка

Спасибо! без доки не так просто определить куда ветер дует, хорошо, что есть те, кто знает ориентиры )