Отклонено

0

Модификатор транслитерации в Smarty

Денис Ефремов Обновлен 4 года назад в категории CMS Шаблоны 2

Мне понадобился для добавления css классов фильтрам. /core/smarty/rsplugins/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);
}


Комментарии 2

  • Александр Закусило 4 года назад

    Вы из смарти можете спокойно вызвать функции транслитерации при помощи static_call
    Вот документация http://readyscript.ru/dev-manual/dev_smarty_rsplugins.html#dev_smarty_rsplugins_function_static_call
    Она позволит просто вызвать статическую функцию \RS\Helper\Transliteration::str2url()
    Например:
    {static_call callback=['\RS\Helper\Transliteration', 'str2url'] var=trans params=['Моя строка']}
    {$trans}

  • Денис Ефремов 4 года назад

    Спасибо за подсказку, но это довольно громоздкий и не интуитивно-понятный вариант. Вот сравните:

    {static_call callback=['\RS\Helper\Transliteration', 'str2url'] var=trans params=[$item.group.title]}
    {$trans} - ваш

    {$item.group.title|@translit} - мой

    Тогда уж я лучше запихну вызов функции \RS\Helper\Transliteration в модификатор translit. А то и так в некоторых местах шаблоны чересчур раздуты.

    <?php
    /**
    * Модификатор транслит
    */
    function smarty_modifier_translit($text)
    {
    $result = call_user_func_array(['\RS\Helper\Transliteration', 'str2url'], [$text]);

    return $result;
    }


    Поправьте, пожалуйста, если есть ошибки.

Написать сообщение