Forums / National / Russian / Тех. поддержка / Проверка функции в шаблонизаторе

Kort
#1 2024-06-29 10:07

Есть плагин, который с помощью двух функций выводит блок на странице. Примерно так:

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

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

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

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Alex300
#2 2024-06-30 16:09

Шаблонизатор не делает проверок на то, активно ли расширение или нет. Если функция определена - просто выполняет ее. Если функция не определена, то, если не ошибаюсь, возвращает тег {PHP|check_exists} как есть. Как вариант можно попробовать:

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

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

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Kort
#3 2024-06-30 18:05

Так речь не про проверку активности расширения -- для этого есть cot_plugin_active() Речь про то, что если плагин на паузе, то и функция недоступна. А если так, то почему проверка

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

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

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

да, подошел)

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Alex300
#4 2024-07-01 13:59

Проблема как раз в том, что если функция не существует ее вызов {PHP|check_exists} возвращает сам тег {PHP|check_exists} в виде строки. Так уж сложилось. А при неаявном приведении к boolean непустая строка приводится к TRUE.

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

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

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

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

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/
Kort
#5 2024-07-02 05:04

Если с правильно оформленным условием достаточно одной проверки, меня это устраивает))

SED.by - создание сайтов, разработка плагинов и тем для Котонти