Частенько возникает задача добавить функцию в Smarty в качестве обработчика.
Например так, чтобы в шаблоне можно было обработать какие-то данные. Такой функцией наверняка пользовался разработчик сайта вебекс, для того, чтобы организовать качественный вывод данных.

Для этого в Smarty есть специальная фишка: регистрация функций.

В принципе всё очень просто.

Добавить функцию в Smarty

В PHP файле, в котором создаётся объект класса Smarty добавляется строчка кода (добавить функцию в Smarty):

$smarty->register_function("function_name_to_call_in_smarty", "your_function_name");

Где, function_name_to_call_in_smarty — название функции, которое вы будете вызывать в Smarty, а your_function_name — реальное название функции на PHP, которое будет вызываться.

Конечно, названия функций в Smarty и PHP могут быть одинаковыми.

Затем где-нибудь в области видимости Smarty (рядом со строчкой регистрации функции, или в отдельном файле php, который инклюдится) нужно продекларировать и описать фукнцию your_function_name.

function your_function_name($params){
//params — это переменная, в которой будет массив параметров из Smarty
return 'Hello '.$params['name'].'! Nice to meet you!';
}

Всё, функция готова, и добавлена в Smarty.

Теперь посмотрим, как вызвать эту функцию в Smarty:

{function_name_to_call_in_smarty name='HTMLER.ru'}

Результатом этой строчки кода в шаблоне Smarty будет:

Hello HTMLER.ru! Nice to meet you!

Как видите добавить функцию в Smarty не сложно. А вызвать её ещё проще. Нужно просто прописать название функции, которую вы предварительно зарегистрировали, и набор параметров, которые нужно передать. Таких параметров может быть сколько угодно.

Кроме того, если добавить функцию в Smarty, то в неё можно передавать не только строки (как в примере ранее), а и переменные, которые выводятся в шаблоне, например:

{function_name_to_call_in_smarty name=$elem_name}

Где, $elem_name — это проассигненая переменная в шаблоне Smarty (которую можно вывести конструкцией {$elem_name}), но вместо этого её передали в функцию.