Изменение шаблона плагинами

Привет,
Вопрос, наверное к разработчикам. Есть, или будут, два плагина, изменяющие поведение и(или) контент страницы. Например одинн плагин реализует аутентификацию по OpenId, и для этого ему нужно соответсвующее поле в форме регистрации. Другому плагину нужно еще одно поле в этой же форме для реализации какого-то своего функционала.
С одним плагином все ясно — делаю шаблон нужного вида, и делегирую его вместо исходного. А как быть со вторым?
На первый взгляд это можно было бы решить так:
переопределить в классе LsViewer( делегированием или новым «наследованием» )
функцию Display так, чтобы в $this->oSmarty->display($sTemplate) отдавался временный, измененый здесь же файл шаблона. Таким образрм можно было бы динамически менять любой шаблон.

Может есть уже готовый рецепт? Буду благодарен за подсказку

9 комментариев

avatar
В данном случае делегировать весь шаблон регистрации не верно. Есть хуки для шаблонов, они к сожалению не в каждом шаблоне есть, но в форме регистрации имеются два — в начале и в конце формы.
avatar
Я так понимаю, что хук в шаблоне позволяет вместо себя вывести что нибудь, или, может быть(не проверял)изменить пременные переданные в смарти. Форма в темплэйте регистрации просто сверстана. Как я ее могу поменять хуком? Нельзя же после каждого слова ставить хук… И это только конкретный случай. А если еще и другой скин?
avatar
в место хука вклинивается темплейт. это если мы конкретно про шаблон говорим.
avatar
Это то понятно, что вместо хука вклинивается что угодно. Но задача впихнуть что угодно в любом месте темплэйта. Не только там, где стоит хук. Про это и был вопрос…
avatar
Но задача впихнуть что угодно в любом месте темплэйта.
Как вы это представляете с технической точки зрения? Будет каша. Вообще сделать универсальную систему плагинов весьма сложно — всегда будут темплейт-конфликты между плагинами, если они хотят позариться на один шаблон в одном и том же месте — такие пересечения чаще всего решаются хирургическим путем и договоренностью между разработчиками.
avatar
Это можно было бы решить с помощью системы последовательно выполняющихся фильтров, изменяющих темплэйт. Такое, помему, есть в вордпрессе.
avatar
я имею ввиду в вордпрессе систему фильтов для контента, а не изменение шаблона, разумеется.
Все это не сложно рализовать, но не хочется лезть с ножом в движок, т.к. будут очередные обновления и т.п., и все хаки накроются медным тазом…
avatar
Так же интересует вопрос именно о замене стандартных кусков темплейта. Хотелось бы полностью переписать футер именно плагином.
avatar
метод Display в LsViewer переопределить не проблема, чтобы смарти отдавать уже измененный шаблон. Но получается дорогая операция -парсинг исходного темплэйта + запись измененого во временный файл(Ведь смарти надо скормить именно файл?). Да еще те же грабли остаются — вдруг другой плагин тоже захочет переопределять этот метод? Поэтому хочется поддержки такой возможности(динамического изменения темплэйта) на уровне движка.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.