Salador |
|
---|---|
Возникла ситуация добавить пункты меню из плагина. Вот так выглядит тег в шаблоне: <ul class="nav"> {MENU_GENERAL} </ul> в плагине текст в меню добавляется вот так: $t->assign('MENU_GENERAL',$text_menu); но проблема в том, что если я добавляю ещё один плагин и в нем хочу вставить пункт меню, то он заменяет другие, а не добавляет. Также мне нужно было чтобы на главной странице каждый плагин добавлял свой блок. Решил я это так - в файл system/cotemplate.php после public function assign добавил почти аналогичную функцию : public function assign_add($name, $val = NULL, $prefix = '') { if (is_array($name)) { foreach ($name as $key => $val) { $this->vars[$prefix.$key] .= $val; } } else { $this->vars[$prefix.$name] .= $val; } return $this; } где просто добавил точки перед равно. Теперь данные в теги можно добавлять $t->assign_add('MENU_GENERAL',$text_menu); Это можно было решить штатными средствами по другому? |
Macik |
|
---|---|
Метод `assign` подразумевает присвоение заданному тегу определенного значения. И естественно при повторном вызове переопределяет его. Это штатное поведение шаблонизатора. Теперь о том, что можно сделать — Вариант 1. Расширить за счет доп. тегов (если число доп.плагинов конечно): <ul class="nav"> {MENU_GENERAL} {MENU_ADDITION_PLUG1} {MENU_ADDITION_PLUG2} ... </ul> После чего в каждом плагине вызывать ф-ю присвоения для «своего тега»: $t->assign('MENU_ADDITION_PLUG1', $some_menu_items);
Вариант 2. В основном плагине, который генерирует меню, перед вызовом метода присвоения (`assign`) вставить вызов хука, например: /* === Hook === */ foreach (cot_getextplugins('menu.assign.first') as $pl) { include $pl; } /* ===== */ $t->assign('MENU_GENERAL',$text_menu); А остальные плагины (точнее ту их часть, которая генерит свое дополнение для меню) вызывать по указанному хуку, и в коде делать расширение переменной `$text_menu` : $text_menu .= '<тут код дополнительных пунктов меню>'; https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |