Помощник Menu используется для отображения меню из контейнера навигации. По умолчанию меню будет создаваться с использованием тегов UL и LI. Возможно использование вспомогательных скриптов видов.
1) {get|set}UlClass() gets/sets(получить/установить) класс (class) CSS, который будет использоваться при рендеринге.
2) {get|set}OnlyActiveBranch() gets/sets (получить/установить) флаг, определяющий, должна ли выводиться только активная ветка из контейнера или нет.
3) {get|set}RenderParents() gets/sets (получить/установить) флаг, определяющий, должны ли выводиться родители, если рендериться только активная ветка в контейнера. Если установить «FALSE», то рендериться будет только самое глубокое активное меню.
4) {get|set}Partial() gets/sets (получить/установить) дополнительный скрипт вида, который должен быть использован для построения меню. Если скрипт установлен, то будет использоваться метод renderPartial(). Если не установлен то используется метод renderMenu(). В метод нужно передать String (строку) или Array (массив) из двух элементов. Если передана строка - то это имя скрипта. Если массив, то первый элемент должен быть имя дополнительного скрипта вида, второй - имя модуля, где располагается этот скрипт.
5) htmlify() - переопределяет метод от абстрактного класса, чтобы вернуть диапазон элементов, если страница не имеет HREF.
6) renderMenu($container = null, $options = array()) - является методом отображения по-умолчанию. Строит меню используя тег Ul. Если $container не указан, то будет использован при рендеринге контейнер, переданный в помощник. $options используется для переопределения параметров, указанных временно без перезаписи значений в экземпляре помощника. Представляет собой массив, каждый ключ которого соответствует опции помощника.
Возможные опции:
1) indent; отступ. Строка или целочисленное значение.
2) minDepth; минимальная глубина. Целочисленное значение или NULL (минимальная глубина).
3) maxDepth; максимальная глубина. Целочисленное значение или NULL (максимальная глубина).
4) ulClass; CSS класс (class) для элемента «ul». Строка.
5) onlyActiveBranch; Отображать только активную ветвь. Логическое значение.
6) renderParents; Отображать родителей или нет, если выбрано отображение только активной ветви. Логическое значение.
Если опции не указаны, то будут использованы те, что установлены в помощнике.
Меню формируется из контейнера, указанного в помощнике.
Обратите внимание, как фильтруются страницы на основе ACL.
In a view script or layout: <?php echo $this->navigation()->menu()->render() ?> Or simply: <?php echo $this->navigation()->menu() ?> Output: <ul class="navigation"> <li> <a title="Go Home" href="/">Home</a> </li> <li class="active"> <a href="/products">Products</a> <ul> <li class="active"> <a href="/products/server">Foo Server</a> <ul> <li class="active"> <a href="/products/server/faq">FAQ</a> </li> <li> <a href="/products/server/editions">Editions</a> </li> <li> <a href="/products/server/requirements">System Requirements</a> </li> </ul> </li> <li> <a href="/products/studio">Foo Studio</a> <ul> <li> <a href="/products/studio/customers">Customer Stories</a> </li> <li> <a href="/products/studio/support">Support</a> </li> </ul> </li> </ul> </li> <li> <a title="About us" href="/company/about">Company</a> <ul> <li> <a href="/company/about/investors">Investor Relations</a> </li> <li> <a class="rss" href="/company/news">News</a> <ul> <li> <a href="/company/news/press">Press Releases</a> </li> <li> <a href="/archive">Archive</a> </li> </ul> </li> </ul> </li> <li> <a href="/community">Community</a> <ul> <li> <a href="/community/account">My Account</a> </li> <li> <a class="external" href="http://forums.example.com/">Forums</a> </li> </ul> </li> </ul>
Меню рендериться без регистрации в помощнике с помощью renderMenu() напрямую и назначением нескольких опций.
<?php // render only the 'Community' menu $community = $this->navigation()->findOneByLabel('Community'); $options = array( 'indent' => 16, 'ulClass' => 'community' ); echo $this->navigation() ->menu() ->renderMenu($community, $options); ?> Output: <ul class="community"> <li> <a href="/community/account">My Account</a> </li> <li> <a class="external" href="http://forums.example.com/">Forums</a> </li> </ul>
Отображение самого глубокого активного меню
Отображение самого глубокого активного подменю в активной ветке с помощью renderSubMenu().
Вызов renderSubMenu($container, $ulClass, $indent) эквивалентен вызову renderMenu($container, $options) со следующими опциями:
array( 'ulClass' => $ulClass, 'indent' => $indent, 'minDepth' => null, 'maxDepth' => null, 'onlyActiveBranch' => true, 'renderParents' => false );
<?php echo $this->navigation() ->menu() ->renderSubMenu(null, 'sidebar', 4); ?> The output will be the same if 'FAQ' or 'Foo Server' is active: <ul class="sidebar"> <li class="active"> <a href="/products/server/faq">FAQ</a> </li> <li> <a href="/products/server/editions">Editions</a> </li> <li> <a href="/products/server/requirements">System Requirements</a> </li> </ul>
Рендеринг (отображение, формирование) меню с максимальной глубиной
<?php echo $this->navigation() ->menu() ->setMaxDepth(1); ?> Output: <ul class="navigation"> <li> <a title="Go Home" href="/">Home</a> </li> <li class="active"> <a href="/products">Products</a> <ul> <li class="active"> <a href="/products/server">Foo Server</a> </li> <li> <a href="/products/studio">Foo Studio</a> </li> </ul> </li> <li> <a title="About us" href="/company/about">Company</a> <ul> <li> <a href="/company/about/investors">Investor Relations</a> </li> <li> <a class="rss" href="/company/news">News</a> </li> </ul> </li> <li> <a href="/community">Community</a> <ul> <li> <a href="/community/account">My Account</a> </li> <li> <a class="external" href="http://forums.example.com/">Forums</a> </li> </ul> </li> </ul>
Рендеринг(отображение, формирование) меню с минимальной глубиной
<?php echo $this->navigation() ->menu() ->setMinDepth(1); ?> Output: <ul class="navigation"> <li class="active"> <a href="/products/server">Foo Server</a> <ul> <li class="active"> <a href="/products/server/faq">FAQ</a> </li> <li> <a href="/products/server/editions">Editions</a> </li> <li> <a href="/products/server/requirements">System Requirements</a> </li> </ul> </li> <li> <a href="/products/studio">Foo Studio</a> <ul> <li> <a href="/products/studio/customers">Customer Stories</a> </li> <li> <a href="/products/studio/support">Support</a> </li> </ul> </li> <li> <a href="/company/about/investors">Investor Relations</a> </li> <li> <a class="rss" href="/company/news">News</a> <ul> <li> <a href="/company/news/press">Press Releases</a> </li> <li> <a href="/archive">Archive</a> </li> </ul> </li> <li> <a href="/community/account">My Account</a> </li> <li> <a class="external" href="http://forums.example.com/">Forums</a> </li> </ul>
Отображение только активной ветви
<?php echo $this->navigation() ->menu() ->setOnlyActiveBranch(true); ?> Output: <ul class="navigation"> <li class="active"> <a href="/products">Products</a> <ul> <li class="active"> <a href="/products/server">Foo Server</a> <ul> <li class="active"> <a href="/products/server/faq">FAQ</a> </li> <li> <a href="/products/server/editions">Editions</a> </li> <li> <a href="/products/server/requirements">System Requirements</a> </li> </ul> </li> </ul> </li> </ul>
Отображение только активной ветви с минимальной глубиной
<?php echo $this->navigation() ->menu() ->setOnlyActiveBranch(true) ->setMinDepth(1); ?> Output: <ul class="navigation"> <li class="active"> <a href="/products/server">Foo Server</a> <ul> <li class="active"> <a href="/products/server/faq">FAQ</a> </li> <li> <a href="/products/server/editions">Editions</a> </li> <li> <a href="/products/server/requirements">System Requirements</a> </li> </ul> </li> </ul>
Отображение только активной ветви с максимальной глубиной
<?php echo $this->navigation() ->menu() ->setOnlyActiveBranch(true) ->setMaxDepth(1); ?> Output: <ul class="navigation"> <li class="active"> <a href="/products">Products</a> <ul> <li class="active"> <a href="/products/server">Foo Server</a> </li> <li> <a href="/products/studio">Foo Studio</a> </li> </ul> </li> </ul>
Отображение только активной ветви с минимальной глубиной и без родителей
<?php echo $this->navigation() ->menu() ->setOnlyActiveBranch(true) ->setRenderParents(false) ->setMaxDepth(1); ?> Output: <ul class="navigation"> <li class="active"> <a href="/products/server">Foo Server</a> </li> <li> <a href="/products/studio">Foo Studio</a> </li> </ul>
Отображение пользовательского меню используя вспомогательный скрипт вида
Вызвав setPartial() Вы имеете возможность указать вспомогательный скрипт вида (partial view script).
В layout:
$partial = array('menu.phtml', 'default'); $this->navigation()->menu()->setPartial($partial); echo $this->navigation()->menu()->render();
В application/modules/default/views/menu.phtml:
foreach ($this->container as $page) { echo $this->navigation()->menu()->htmlify($page), PHP_EOL; }
Выведет:
<a title="Go Home" href="/">Home</a> <a href="/products">Products</a> <a title="About us" href="/company/about">Company</a> <a href="/community">Community</a>