cotonti.com : Проверка функции в шаблонизаторе https://www.cotonti.com Laatste forum onderwerpen Cotonti en Sun, 12 Oct 2025 20:06:16 -0000 Kort Если с правильно оформленным условием достаточно одной проверки, меня это устраивает))

]]>
Di, 02 Jul 2024 05:04:45 -0000
Alex300 Проблема как раз в том, что если функция не существует ее вызов {PHP|check_exists} возвращает сам тег {PHP|check_exists} в виде строки. Так уж сложилось. А при неаявном приведении к boolean непустая строка приводится к TRUE.

Может правильнее все таки, если функция не существует, выбрасывать исключение, как это делает PHP. В исключении указывать какой тег вызвал несуществующию функцию. А в шаблонах, если функция может быть неопределена, писать:

<!-- IF {PHP|function_exists('check_exists')} AND {PHP|check_exists} -->
...

Так на этапе разработки такие ошибки легче отлавливать.

Надо подумать, и поставить тикет :)

]]>
Ma, 01 Jul 2024 13:59:41 -0000
Kort Так речь не про проверку активности расширения -- для этого есть cot_plugin_active() Речь про то, что если плагин на паузе, то и функция недоступна. А если так, то почему проверка

<!-- IF {PHP|check_exists} -->
...

отрабатывает. Но "полный" вариант

<!-- IF {PHP|check_exists} === true -->
...

да, подошел)

]]>
Zo, 30 Jun 2024 18:05:52 -0000
Alex300 Шаблонизатор не делает проверок на то, активно ли расширение или нет. Если функция определена - просто выполняет ее. Если функция не определена, то, если не ошибаюсь, возвращает тег {PHP|check_exists} как есть. Как вариант можно попробовать:

<!-- IF {PHP|check_exists} === true -->
{PHP|render}
<!-- ENDIF -->

Тогда, если тег вернет значение, отличное от true, блок не должен выполниться

]]>
Zo, 30 Jun 2024 16:09:35 -0000
Kort Есть плагин, который с помощью двух функций выводит блок на странице. Примерно так:

<!-- IF {PHP|check_exists} -->
{PHP|render}
<!-- ENDIF -->

Возник вопрос как всю эту историю ставить на паузу. Если я приостанавливаю работу плагина, то проверка check_exists() в шаблоне по идее должна отдавать false, потому что функция не определена. Но в результате отдается true, и в блоке выводится в виде текста {PHP|render}.

Решить все это можно, но правильно ли в данном случае работает шаблонизатор?

]]>
Za, 29 Jun 2024 10:07:23 -0000