Closed DaaGER closed 7 years ago
То есть вам надо вызвать метод из шаблона?
или вам надо добвить в шаблон некие данные после вызова {render_block} ?
насколько я смог понять нужно просто сделать echo полученного шаблона в вашей функции. если правильно я понял:
Мне нужно, чтобы вызывался тэг, а за кулисами происходила логика и возвращался уже обработанный шаблон для этого кода. Своеобразный include, но с прослойкой логики.
Рендерится страница, в зависимости от страницы верстальщик вставляет вызов нужного ему блока. Блок вызывается не всегда и заранее его просчитывать не вижу смысла. Поэтому решил сделать так: где нужно вставляется тэг "рендер блока с таким-то названием" fenom видит вызов тэга рендера блока и вызывает нужный стат.метод в методе идет какая-то логика, её результаты передаются в fenom в нужный для этого блока шаблон результат помещается в страницу откуда вызывался тэг
Надеюсь смог объяснить чего я хочу.
@maxicms проблемы как раз со вторым шагом. Создавать новый экземпляр fenom, чтобы обработать шаблон тэга не хочу. Вот и интересуюсь, возможно ли это сделать без этого. Среди переданных параметров в мой метод, вижу что Fenom передал еще и Fenom\Template, но не могу с ним совладать.
Попробуйте вариант с макросом. Создайте шаблон для макросов, например blocks.tpl и объявите там нужные вам макросы:
{macro block($name)}
{* получаете данные из метода SomeNS\MyClass::method() *}
{set $data = $.call.SomeNS.MyClass::method($name)}
{* вызываете нужный вам шаблон*}
{$.fetch("$name.tpl", $data)}
{/macro}
Далее где вам нужно расставить блоки импортируйте шаблон с маросами и используйте макрос:
{import 'blocks.tpl' as render}
{render.block 'rseo_text'}
Как бонус вы можете создать кучу макросов на все случаи жизни.
А вообще это все похоже на наследование шаблонов. Вы рассматривали этот вариант?
Спасибо!
Мне хотелось минимальный работы конкретно с файлами шаблонов: одна строчка на "инклуд" и файл с шаблоном, дальше обработчик тэга что-то делает и решает нужно ли вообще что-то рендерить на php, чтобы верстальщик не думал об этом.
Грубый пример: формочка пользователя. Авторизованный видит ссылки на профиль и аватар, гость видит форму авторизации, но заранее узнавать авторизован ли пользователь и в переменную записывать, какой блок грузить не хочется(условно это тяжелый процесс), ведь этой формочки вообще может не быть в конкретном шаблоне.
В целом ваше решение мне подходит.
А о каком именно варианте наследования вы говорите? Основная проблема, что мне нужна отложенная логика. Допускаю, что иду немного в разрез с логикой работы шаблонизатора и моё желание архитектурно убого.
Приветствую.
Создал собственный тэг через addFunction. Вызываю в коде {render_block 'rseo_text'}. Все параметры получаю, вызываю класс, который по этим параметрам что-то делает и возвращает массив. Хочу этот массив отдать в шаблон, который обработается и результат поместиться в шаблон, откуда вызывался тэг. Вот с последней частью проблемы и не знаю, как это сделать. Надеюсь на вашу помощь.