Частенько возникает задача добавить функцию в 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}), но вместо этого её передали в функцию.