Сообщения без ответов | Активные темы Текущее время: 22 фев 2020, 13:28



Ответить на тему  [ Сообщений: 11 ]  Страница 1, 2  »
Расширение функционала движка 
Автор Сообщение

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

Здравствуйте!
Хотел немного расширить функционал движка, например, добавить свои переменные или функции без модификации ядра.
Но нигде не нашел ответа. В документации только как добавлять при выводе ссылки. Но это не совсем то.
Хочу, например, добавить проверку наличия файла на сервере.
Включение модуля PHP в шаблоне не вариант. Smarty все-таки тормозная штука и обращаться к PHP через Smarty не комильфо. Проще же напрямую...
Но как?


28 авг 2019, 09:35
Профиль WWW

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

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

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, которые вы сможете использовать по своему усмотрению :)

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


28 авг 2019, 11:49
Профиль WWW

Зарегистрирован: 12 апр 2014, 14:05
Сообщения: 91

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

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

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

_________________
artemovanatoly@gmail.com


18 сен 2019, 17:21
Профиль

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

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


18 сен 2019, 21:31
Профиль WWW

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

++++++++++++


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



10 дек 2019, 22:46
Профиль WWW

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

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%}, то массив есть.
Как к нему подобраться не знаю...


10 дек 2019, 22:46
Профиль WWW

Зарегистрирован: 12 апр 2014, 14:05
Сообщения: 91

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

_________________
artemovanatoly@gmail.com


11 дек 2019, 01:16
Профиль

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

Не совсем точно выразился: не шаблона, а шаблонизатора 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 присутствует, а при выводе страницы сайта не выведет.


11 дек 2019, 13:39
Профиль WWW

Зарегистрирован: 14 май 2017, 13:03
Сообщения: 34
Откуда: Саранск

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

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


11 дек 2019, 13:42
Профиль WWW

Зарегистрирован: 12 апр 2014, 14:05
Сообщения: 91

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

_________________
artemovanatoly@gmail.com


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

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

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


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

Найти: