Вернуть массив из хука в шаблон (РЕШЕНО)
Добрый день. Имеется хук, возвращающий в качестве результата массив.
Вызываю в шаблоне:
Ожидаю, что в $aResult окажется «ассоциативный» массив, т.е. {$aResult.foo} вернет «bar». Но в результате возвращается массив вида array(0=>'A', 1=>'r', 1=>'r', 1=>'a', 1=>'y', 1=>'(' и так далее.
Помогите, пожалуйста, как корректно передать массив из хука в шаблон?
UPD: По-быстрому сделал костыльный вариант для одноуровневого массива. Буду рад предложениям как это сделать «академически верно» :)
В шаблоне:
class PluginLive_HookLive extends Hook { public function RegisterHook() { $this->AddHook('template_header_banner_begin', 'GoGoGo'); } public function GoGoGo() { return array('foo'=>'bar'); } }
Вызываю в шаблоне:
{hook run='header_banner_begin' assign='aResult'}
Ожидаю, что в $aResult окажется «ассоциативный» массив, т.е. {$aResult.foo} вернет «bar». Но в результате возвращается массив вида array(0=>'A', 1=>'r', 1=>'r', 1=>'a', 1=>'y', 1=>'(' и так далее.
Помогите, пожалуйста, как корректно передать массив из хука в шаблон?
UPD: По-быстрому сделал костыльный вариант для одноуровневого массива. Буду рад предложениям как это сделать «академически верно» :)
class PluginLive_HookLive extends Hook { public function RegisterHook() { $this->AddHook('template_header_banner_begin', 'Countdown'); } public function Countdown() { r = array('foo'=>'bar', 'foo2'=>'bar2'); ksort($r); return implode(',',$r); } }
В шаблоне:
{assign var="aLive" value=","|explode:$aLive} {assign var="sVar1" value=$aLive[0]} {assign var="sVar2" value=$aLive[1]}
7 комментариев
Зависит от задачи:
1. Сделать просто добавление переменной в шаблон:
и в шаблоне доступно $VarName
или
2. Создать локальную копию вьюера, в неё передать все переменные, обработать шаблон и вернуть хтмл представление для вставки в месте хука:
и на месте хука будет добавлен хтмл код шаблона folder/file.tpl папки шаблонов плагина
Пока не могу на 100% оценить ответы из-за недостатка опыта, но, все-таки, пару слов напишу.
Вариант 1, в моем случае, не сработал.
Реализация Хука:
Вызов хука в шаблоне (header.tpl, шапка сайта):
На выходе — пусто.
Второй вариант пока не реализовывал, так как проект очень горит :).
В целом, еще раз спасибо, не ожидал такого быстрого ответа.
вам нужно использовать второй вариант и в файл folder/file.tpl положить всю логику.
но мне кажется что вы просто не договорили суть задачи: если вы в шаблон движка вшиваете свой код и получаете данные из переменной, то просто прицепите хук, например, на «engine_init_complete» и воспользуйтесь первым вариантом — будет переменная:
в любом месте шаблона будет переменная $aLive.
Если же вам нужно делать все правильно и добавить некую логику, то делайте все вторым вариантом (см. первый комментарий) — таким образом при обновлении движка ваши правки не исчезнут т.к. вся ваша логика будет внутри плагина.
Внедрил первый вариант — работает «like a charm». Еще раз спасибо :)
P.S. LiveStreet нравится все больше и больше.