| 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 |