1. На демо сайте хомячков выводится горизонтальное меню, выводятся те страницы, у которых стоит галочка "Отображать в меню". Где в модуле шаблона данных можно найти его и отредактировать? Другие галочки я нашел, типа "показывать под меню, меню всегда развернуто", т.е. как это работает?
2. Второй вопрос, я хочу создать еще вертикальное многоуровневое меню, например я ставлю галочку "отображаться в вертикальном меню" и выводится эти страницы и их подразделы.
В шаблоне вызывал бы меню макросом %vertic_menu('default')%
Как правильно реализовать?
3. Или для такого случая лучше использовать Usel (для tpl-шаблонизатора), тогда как правильно расписать в шаблоне многоуровневое меню tpls/data/usel/default.tpl
$FORMS = Array();
$FORMS['vertic_menu_block_level1'] = <<<END
<ul id="menu">
%lines%
</ul>
END;
$FORMS['vertic_menu_line_level1'] = <<<END
<li><a href="%link%"><span><span>
%text%
</span></span></a>
</li>
END;
$FORMS['vertic_menu_line_level1_a'] = <<<END
<li class="act"><a href="%link%"><span><span>
%text%
</span></span></a>
</li>
END;
еще вопрос, сделал через usel.
Попытался выделить активный раздел, но почему то блок
$FORMS['elements_block_line_a'] он не видит, почему?
$FORMS['elements_block'] = <<<END
<ul id="menu">
%items%
</ul>
END;
$FORMS['elements_block_line'] = <<<END
<li><a href="%link%">%name%</a></li>
END;
$FORMS['elements_block_line_a'] = <<<END
<li class="act"><a href="%link%"> %name%</a></li>
END;
В CSS что-то тяжеловато, если каждый <li> отличался классом то да.
Воспользовался кастомным макросом.
в /classes/modules/custom.php прописал
public function is_active_page($id=NULL) {
if(!$id) return;
$page_id = cmsController::getInstance()->getCurrentElementId();// берем id текущей страницы
if($page_id==$id) return 'active';
}
в /tpls/data/usels/default.tpl
прописал
<a href="%link%" class="Method custom::is_active_page doesn't exists">%name%</a>
В html коде вижу тоже самое
<a href="/zakupki/2012_god/godovoj_plan/" class="Method custom::is_active_page doesn't exists">Годовой план</a>
Что-то не работает
<a href="%link%" class="Method custom::is_active_page doesn't exists">%name%</a>
уже выглядит странно)) видимо надо так:
<a href="%link%" class="%custom is_active_page(%pid%)%">%name%</a>
и опят же стоит понимать что статук "актив" вернется только той странице которая является текущей
Ура, получилось, %pid% на %id%
<a href="%link%" class="%custom is_active_page(%id%)%">%name%</a>
Всем спасибо))
А можете привести пример макроса с условиями если <li class=active> то родительский <ol class=active>?
Чтение документации по php пока результата мне не дало. Пытаюсь например так:
public function is_ol_active($id=NULL) {
if($li=='liactive') return 'olactive';
else return 'olnoactive';
Ну канешна выдает ошибки. И как он определит что <li> является дочерним родительского <ol> а не всех присутствующих <ol> в коде?
Как вообще теги php-коде указываются?
usels/menu.xml
<selection>
<target result="pages">
<type id="3" />
<category depth="2">{1}</category>
</target>
<property name="leftmenucataloga" value="1" />
<sort>ord</sort>
</selection>
tpls/data/usel/menu.tpl
<?php
$FORMS = Array();
$FORMS['elements_block'] = <<<END
%items%
END;
$FORMS['elements_block_line'] = <<<END
<div class="%custom is_active_page(%id%)%"><h4><a href="%link%">%name%</a></h4>
%data doSelection(menu1, menu, %id%)%</div>
END;
$FORMS['elements_block_empty'] = <<<END
END;
?>
tpls/data/usel/menu1.tpl
<?php
$FORMS = Array();
$FORMS['elements_block'] = <<<END
<ol class="%custom is_ol_active(%id%)%">%items%</ol>
END;
$FORMS['elements_block_line'] = <<<END
<li class="%custom is_li_active(%id%)%"><a href="%link%">%name%</a>
%data doSelection(menu1, menu, %id%)%</li>
END;
$FORMS['elements_block_empty'] = <<<END
END;
?>
tpls/content/inner.tpl
%data doSelection(menu, menu, 0)%<br />
css/css.css
.nav3-grid ol {
line-height: 30px;
height: 0px; /*Сворачивает меню*/
list-style-type: none;
overflow: hidden;
padding: 0px;
}
.nav3-grid:hover ol {
height: auto;
}
.nav3-grid-active ol {
line-height: 30px;
height: auto;
list-style-type: none;
overflow: hidden;
padding: 0px;
}
classes/modules/custom.php
public function is_active_page($id=NULL) {
if(!$id) return;
$page_id = cmsController::getInstance()->getCurrentElementId();// берем id текущей страницы
if($page_id==$id) return 'nav3-grid-active';
else return 'nav3-grid';
}
public function is_li_active($id=NULL) {
if(!$id) return;
$page_id = cmsController::getInstance()->getCurrentElementId();
if($page_id==$id) return 'liactive';
else return 'linoactive';
}
/*public function is_ol_active($id=NULL) {
if(!$li=='liactive') return 'olactive';
else return 'olnoactive';
}*/