Перейти к публикации

В строке подключения модуля не работает шаблонный тег


Рекомендованные сообщения

При подключении в шаблоне своего PHP модуля, в строке подключения не работает шаблонный тег {THEME}.

 

Например подключаем модуль такой строкой:

{include file='engine/modules/filemodify.php?file={THEME}/css/styles.css'}

В коде модуля единственная строчка:

echo trim($file, "{");

В страницу выводится следующий результат:

THEME}/css/styles.css

 

Выходит что в переменную $file передается необработанный шаблонный тег "{THEME}/css/styles.css". Не ожидаемое поведение, много времени на него убил, так как в документации Разработчика говорится:

Цитата

Начиная с версии DataLife Engine 8.3 в качестве параметров к подключаемым модулям вы можете задавать шаблонные теги скрипта, например при добавлении в шаблон полной новости конструкции {include file="engine/modules/mymod.php?param={news-id}"}, вы можете передавать вашему стороннему модулю в качестве параметра ID новости и т.д.

 

Это так и должно быть, или все таки это баг?

Ссылка на сообщение
Поделиться на других сайтах
13 часов назад, YuriBtr сказал:

Выходит что в переменную $file передается необработанный шаблонный тег

Этот тег обрабатывается в самом конце, т.с. когда сформирован (обработан) сам шаблон страницы.

Изменено пользователем proba
Ссылка на сообщение
Поделиться на других сайтах
35 минут назад, proba сказал:

Этот тег обрабатывается в самом конце, т.с. когда сформирован (обработан) сам шаблон страницы.

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

Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, YuriBtr сказал:

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

Нет, это не баг, и не неправильное поведение скрипта. Пункт который вы привели, касается не всех шаблонов, а только шаблонов вывода публикаций, и других доп. шаблонов, но он не касается тегов принадлежащих шаблону main.tpl, а в данном случае тег {THEME} принадлежит именно ему. Более того тег {THEME} "сверхглобальный", он обработается даже если его просто выведет сторонний модуль, соответственно для реализации этого тег {THEME} не может быть обработан ранее чем {custom...}. Более того передавать в сторонний модуль тег, который напрямую зависит от содержания настроек скрипта совершенно не логично. Модуль попросту должен читать настройки из $config и работать на его основе, а не переносить настройки во входящие данные. Это как минимум безопасно, в отличии от вашего способа.

Ссылка на сообщение
Поделиться на других сайтах
36 минут назад, celsoft сказал:

Нет, это не баг, и не неправильное поведение скрипта. Пункт который вы привели, касается не всех шаблонов, а только шаблонов вывода публикаций, и других доп. шаблонов, но он не касается тегов принадлежащих шаблону main.tpl, а в данном случае тег {THEME} принадлежит именно ему. Более того тег {THEME} "сверхглобальный", он обработается даже если его просто выведет сторонний модуль, соответственно для реализации этого тег {THEME} не может быть обработан ранее чем {custom...}. Более того передавать в сторонний модуль тег, который напрямую зависит от содержания настроек скрипта совершенно не логично. Модуль попросту должен читать настройки из $config и работать на его основе, а не переносить настройки во входящие данные. Это как минимум безопасно, в отличии от вашего способа.

Хорошо. Тогда вопрос - как в модуль можно передать название файла (например имена подключаемых стилей) из папки шаблона, если учесть что папка шаблона может меняться?

Если первый пункт невозможен, то как можно по другому организовать вставку PHP команд в шаблон, чтобы обрабатывать даты изменения файлов?

Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, YuriBtr сказал:

Хорошо. Тогда вопрос - как в модуль можно передать название файла (например имена подключаемых стилей) из папки шаблона, если учесть что папка шаблона может меняться?

Читать настройки и использовать тут путь, который должен быть согласно всем настройкам. Как это делает DLE для того же тега {THEME}, его же значение не из воздуха берется в DLE, и ваш модуль это такой же PHP код, как и у DLE, и может делать все точно также как и DLE.

Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, celsoft сказал:

Читать настройки и использовать тут путь, который должен быть согласно всем настройкам. Как это делает DLE для того же тега {THEME}, его же значение не из воздуха берется в DLE, и ваш модуль это такой же PHP код, как и у DLE, и может делать все точно также как и DLE.

Как модуль может узнать какой шаблон в данный момент рендерится? Из конфига? А если у человека свой шаблон выбран?

Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, YuriBtr сказал:

Как модуль может узнать какой шаблон в данный момент рендерится? Из конфига?

Конечно.

3 минуты назад, YuriBtr сказал:

А если у человека свой шаблон выбран?

Это учитывается также в конфиге. Смотрите как DLE формирует тег {THEME}, он это делает с учетом всех возможностей, что предоставляет DLE.

Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, celsoft сказал:

Конечно.

Это учитывается также в конфиге. Смотрите как DLE формирует тег {THEME}, он это делает с учетом всех возможностей, что предоставляет DLE.

Да, все получилось через $config[skin]. Спасибо!

Просто из вашей документации непонятно, что тег {THEME} резолвится последнюю очередь.

Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, YuriBtr сказал:

Просто из вашей документации непонятно, что тег {THEME} резолвится последнюю очередь.

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

Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, celsoft сказал:

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

Извините, но изначально вопрос был связан с передачей тегов в модуль из шаблона. Я даже приводил кусок документации выше из которой и непонятно было что не получится передать тег {THEME}  в модуль. А это вопрос именно вашего продукта. Но в любом случае это ваше право менять ли что либо в документации или нет. Я лишь указал на грабли, которые может повторить другой разработчик.

 

P.S.

сравните две ваших цитаты:

Цитата

Начиная с версии DataLife Engine 8.3 в качестве параметров к подключаемым модулям вы можете задавать шаблонные теги скрипта, например при добавлении в шаблон полной новости конструкции {include file="engine/modules/mymod.php?param={news-id}"}, вы можете передавать вашему стороннему модулю в качестве параметра ID новости и т.д.

и

Цитата

Пункт который вы привели, касается не всех шаблонов, а только шаблонов вывода публикаций, и других доп. шаблонов, но он не касается тегов принадлежащих шаблону main.tpl, а в данном случае тег {THEME} принадлежит именно ему

я не вижу в пункте документации пояснения, что шаблонные теги main.tpl нельзя передать в модуль. Поэтому то грабли и возникли, отняв столько времени у вас и у меня.

Изменено пользователем YuriBtr
Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, YuriBtr сказал:

Извините, но изначально вопрос был связан с передачей тегов в модуль из шаблона. Я даже приводил кусок документации выше из которой и непонятно было что не получится передать тег {THEME}  в модуль. А это вопрос именно вашего продукта. Но в любом случае это ваше право менять ли что либо в документации или нет. Я лишь указал на грабли, которые может повторить другой разработчик.

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

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...