YuriBtr 58 Опубликовано: 28 мая 2018 Рассказать Опубликовано: 28 мая 2018 При подключении в шаблоне своего 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 новости и т.д. Это так и должно быть, или все таки это баг? 1 1 Цитата Ссылка на сообщение Поделиться на других сайтах
proba 57 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 (изменено) 13 часов назад, YuriBtr сказал: Выходит что в переменную $file передается необработанный шаблонный тег Этот тег обрабатывается в самом конце, т.с. когда сформирован (обработан) сам шаблон страницы. Изменено 29 мая 2018 пользователем proba Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 35 минут назад, proba сказал: Этот тег обрабатывается в самом конце, т.с. когда сформирован (обработан) сам шаблон страницы. Получается что неправильное поведение движка? Ведь положение файлов шаблона не меняется в процессе рендера - она константа на период рендера, поэтому не вижу смысла обрабатывать тег {THEME} после подключения модулей. Но разработчику конечно виднее, если он скажет что это нормально, то ничего не поделаешь, придется выкручиваться по другому. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 4 часа назад, YuriBtr сказал: Получается что неправильное поведение движка? Ведь положение файлов шаблона не меняется в процессе рендера - она константа на период рендера, поэтому не вижу смысла обрабатывать тег {THEME} после подключения модулей. Но разработчику конечно виднее, если он скажет что это нормально, то ничего не поделаешь, придется выкручиваться по другому. Нет, это не баг, и не неправильное поведение скрипта. Пункт который вы привели, касается не всех шаблонов, а только шаблонов вывода публикаций, и других доп. шаблонов, но он не касается тегов принадлежащих шаблону main.tpl, а в данном случае тег {THEME} принадлежит именно ему. Более того тег {THEME} "сверхглобальный", он обработается даже если его просто выведет сторонний модуль, соответственно для реализации этого тег {THEME} не может быть обработан ранее чем {custom...}. Более того передавать в сторонний модуль тег, который напрямую зависит от содержания настроек скрипта совершенно не логично. Модуль попросту должен читать настройки из $config и работать на его основе, а не переносить настройки во входящие данные. Это как минимум безопасно, в отличии от вашего способа. Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 36 минут назад, celsoft сказал: Нет, это не баг, и не неправильное поведение скрипта. Пункт который вы привели, касается не всех шаблонов, а только шаблонов вывода публикаций, и других доп. шаблонов, но он не касается тегов принадлежащих шаблону main.tpl, а в данном случае тег {THEME} принадлежит именно ему. Более того тег {THEME} "сверхглобальный", он обработается даже если его просто выведет сторонний модуль, соответственно для реализации этого тег {THEME} не может быть обработан ранее чем {custom...}. Более того передавать в сторонний модуль тег, который напрямую зависит от содержания настроек скрипта совершенно не логично. Модуль попросту должен читать настройки из $config и работать на его основе, а не переносить настройки во входящие данные. Это как минимум безопасно, в отличии от вашего способа. Хорошо. Тогда вопрос - как в модуль можно передать название файла (например имена подключаемых стилей) из папки шаблона, если учесть что папка шаблона может меняться? Если первый пункт невозможен, то как можно по другому организовать вставку PHP команд в шаблон, чтобы обрабатывать даты изменения файлов? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 1 минуту назад, YuriBtr сказал: Хорошо. Тогда вопрос - как в модуль можно передать название файла (например имена подключаемых стилей) из папки шаблона, если учесть что папка шаблона может меняться? Читать настройки и использовать тут путь, который должен быть согласно всем настройкам. Как это делает DLE для того же тега {THEME}, его же значение не из воздуха берется в DLE, и ваш модуль это такой же PHP код, как и у DLE, и может делать все точно также как и DLE. Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 7 минут назад, celsoft сказал: Читать настройки и использовать тут путь, который должен быть согласно всем настройкам. Как это делает DLE для того же тега {THEME}, его же значение не из воздуха берется в DLE, и ваш модуль это такой же PHP код, как и у DLE, и может делать все точно также как и DLE. Как модуль может узнать какой шаблон в данный момент рендерится? Из конфига? А если у человека свой шаблон выбран? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 2 минуты назад, YuriBtr сказал: Как модуль может узнать какой шаблон в данный момент рендерится? Из конфига? Конечно. 3 минуты назад, YuriBtr сказал: А если у человека свой шаблон выбран? Это учитывается также в конфиге. Смотрите как DLE формирует тег {THEME}, он это делает с учетом всех возможностей, что предоставляет DLE. Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 Автор 20 минут назад, celsoft сказал: Конечно. Это учитывается также в конфиге. Смотрите как DLE формирует тег {THEME}, он это делает с учетом всех возможностей, что предоставляет DLE. Да, все получилось через $config[skin]. Спасибо! Просто из вашей документации непонятно, что тег {THEME} резолвится последнюю очередь. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 1 минуту назад, YuriBtr сказал: Просто из вашей документации непонятно, что тег {THEME} резолвится последнюю очередь. Документация, это для конечного пользователя скриптом. DLE не фреймворк, это конечный готовый продукт. А вы пишите PHP код и смотреть должны не документацию, а PHP код DLE. Ваш вопрос не в области пользования скриптов, а в области программирования лежит. Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 (изменено) Автор 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 нельзя передать в модуль. Поэтому то грабли и возникли, отняв столько времени у вас и у меня. Изменено 29 мая 2018 пользователем YuriBtr Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 29 мая 2018 Рассказать Опубликовано: 29 мая 2018 6 минут назад, YuriBtr сказал: Извините, но изначально вопрос был связан с передачей тегов в модуль из шаблона. Я даже приводил кусок документации выше из которой и непонятно было что не получится передать тег {THEME} в модуль. А это вопрос именно вашего продукта. Но в любом случае это ваше право менять ли что либо в документации или нет. Я лишь указал на грабли, которые может повторить другой разработчик. В данном случае я согласен, мы просто говорим о разных вещах. Вы пишите про PHP рендеринг и его последовательность, имея ввиду описание этого тега из шаблона main.tpl, я же когда вижу ваши слова о PHP рендеринге думаю именно о PHP а не о шаблонах и описании к шаблонам, и думаю соответственно об отсутствии описания в документации принципов работы PHP. То что нужно будет добавить в описание в документации сноску о том что исключением являются теги main.tpl, логичны. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.