Сообщения без ответов | Активные темы Текущее время: 24 окт 2026, 17:33



Ответить на тему  [ Сообщений: 11 ]  Страница 1, 2  »
Расширение функционала движка 
Автор Сообщение
Здравствуйте!
Хотел немного расширить функционал движка, например, добавить свои переменные или функции без модификации ядра.
Но нигде не нашел ответа. В документации только как добавлять при выводе ссылки. Но это не совсем то.
Хочу, например, добавить проверку наличия файла на сервере.
Включение модуля PHP в шаблоне не вариант. Smarty все-таки тормозная штука и обращаться к PHP через Smarty не комильфо. Проще же напрямую...
Но как?


Профиль WWW
Не дождался ответа от поддержки, хотя на support@illusionweb.ru после обращения сказали, что бы разместил и дал им ссылку.
Пришлось въезжать самому, т.к. никакой документации по расширению функционала разработчик не опубликовал.
Итак.
Для того что бы добавить функции или переменные нужные вам в шаблонах необходимо:

1. Создать файл скрипта модификатора Smarty на PHP с любым именем (например, mysmarty.php и т.д.) и положить в любую удобную для вас папку сайта (например, Smarty или includes/compile и т.д.)
2. В файле прописать ваш модификатор для Smarty:
function my_fun_name($param){
// здесь код на PHP
return $var;
}
$smarty->register_modifier("my_fun", "my_fun_name");

где - my_fun_name - имя функции для получения модификатора
my_fun - имя модификатора в Smarty
$param - параметры в вашу функцию из Smarty
$var - возвращаемое значение в Smarty
register_modifier - регистрация модификатора в Smarty

3. Создать файл скрипта PHP с любым именем (например, myfunc.php и т.д.) и положить в папку commands сайта
4. В файле прописать:
include(FULLPATH.'{ваш путь}/mymodifiers.php');
$smarty -> assign('my_var', $my_var);

где - {ваш путь} - это путь к скрипту модификатора Smarty
$smarty -> assign - добавление ваших переменных в движок.

5. Теперь у вас при загрузке сайта в шаблонах будут доступны ваш модификатор my_fun и переменная my_var, которые вы сможете использовать по своему усмотрению :)

Вот собственно и все!


Профиль WWW
Создать функцию в commands/имя_файла.inc и вызвать её в шаблоне.

Например:
Создадим файл commands/helper.inc с содержимым
<?
function my_func($text){
return $text;
}
?>
В шаблоне вызываем функцию
{%assign var='text' value='что то передадим в функцию'%}
{%$text|my_func%}

А какие-то данные через assign соответственно.

_________________
artemovanatoly@gmail.com


Профиль
Спасибо. Проще, чем я сам дошел :)


Профиль WWW
++++++++++++


Последний раз редактировалось Сергей Маслов 10 дек 2019, 22:48, всего редактировалось 1 раз.



Профиль WWW
Anatoly писал(а):
Создать функцию в commands/имя_файла.inc и вызвать её в шаблоне.

Например:
Создадим файл commands/helper.inc с содержимым
<?
function my_func($text){
return $text;
}
?>
В шаблоне вызываем функцию
{%assign var='text' value='что то передадим в функцию'%}
{%$text|my_func%}

А какие-то данные через assign соответственно.


Может еще поможете?
Хочу использовать массивы шаблона в своих функциях php.
Объявляю переменные шаблона в функции как global
global $regions, $categories, $settings,$full_tree;
Так вот такая история:
Три массива становятся доступными, а один - $categories возвращает NULL, хотя если вывести переменные перед использованием функции через {%debug%}, то массив есть.
Как к нему подобраться не знаю...


Профиль WWW
Не понял что необходимо, о каких шаблонах идёт речь? Если ранее переменная была объявлена в глобальной области видимости, то она будет доступна в функции через ключевое слово global или массив $GLOBALS. Нужно видеть код.

_________________
artemovanatoly@gmail.com


Профиль
Не совсем точно выразился: не шаблона, а шаблонизатора Smarty.
Код типа такого:
файл в commands/myfunction.inc
function my_fun($id) {
global $full_tree,$categories;
print_r($full_tree);
print_r($categories);
}

вызов в шаблоне header.html (только в целях демонстрации проблемы)
<body>
<div>{%debug%}</div>
{%assign var='id' value='1'%}
<div>{%$id|my_fun%}</div>
</body>
Так вот: в этом случае в окне debug массив $categories присутствует, а при выводе страницы сайта не выведет.


Профиль WWW
Anatoly писал(а):
Не понял что необходимо, о каких шаблонах идёт речь? Если ранее переменная была объявлена в глобальной области видимости, то она будет доступна в функции через ключевое слово global или массив $GLOBALS. Нужно видеть код.

Где узнать, была переменная объявлена ранее как global?


Профиль WWW
Не совсем понимаю что у вас не получается, напишите мне на почту artemovanatoly@gmail.com или покажите на самом сайте.

_________________
artemovanatoly@gmail.com


Профиль
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 11 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron