CMenu. Свойства и методы

Виджет CMenu отображает многоуровневое меню, ипользуя вложенные HTML-списки.
Основной параметр виджета CMenu - это items, определяющий возможные элементы меню. Элемент меню имеет 3 главных свойства: visible, active и items. Свойство "visible" определяет, должен ли элемент меню отображаться. Свойство "active" определяет, должен ли элемент меню быть выделен (текущий ли он). Свойство "items" определяет элементы подменю.

Следующий пример показывает, как использовать виджет CMenu:
$this->widget('zii.widgets.CMenu', array(
    'items'=>array(
        // Важно: необходимо определить url-адрес как 'controller/action',
        // а не просто как 'controller' даже если используется действие по умолчанию.
        array('label'=>'Домашняя', 'url'=>array('site/index')),
        // элемент меню 'Товары' будет выбран no matter which tag parameter value is since it's not specified.
        array('label'=>'Товары', 'url'=>array('product/index'), 'items'=>array(
            array('label'=>'Новые поступления', 'url'=>array('product/new', 'tag'=>'new')),
            array('label'=>'Наиболее популярные', 'url'=>array('product/index', 'tag'=>'popular')),
        )),
        array('label'=>'Вход', 'url'=>array('site/login'), 'visible'=>Yii::app()->user->isGuest),
    ),
));

Свойства


activateItems (с v1.1.3)

@var boolean активировать ли автоматически элементы соответственно настройкам их маршрутов, найденным в маршруте текущего запроса.
По умолчанию - true

activateParents

@var boolean активировать ли элемент родительского меню в случае, когда активирован один из соответствующих элементов подменю. Активированные элементы родительского меню также будут иметь их CSS-классы наряду с классом, записанным в свойстве activeCssClass.
По умолчанию - false

activeCssClass

@var string CSS-класс, добавляемый к активному элементу меню. По умолчанию - 'active'. Если значение пусто, то CSS-класс элементов меню не будет изменен

encodeLabel

@var boolean проводить ли HTML-кодирование имен элементов меню. По умолчанию - true

firstItemCssClass (с v1.1.4)

@var string CSS-класс первого элемента главного меню и каждого подменю. По умолчанию - null, т.е., данный класс не будет присвоен элементам

hideEmptyItems

@var boolean скрывать ли пустые элементы меню. Пустой элемент меню - это элемент с неустановленной опцией 'url' и который не содержит видимых элементов подменю. По умолчанию - true

htmlOptions

@var array HTML-атрибуты для тега контейнера меню

itemCssClass (с v1.1.9)

@var string CSS-класс, присваиваемый каждому элементу. По умолчанию - null, т.е., данный класс не будет присвоен элементам

itemTemplate (с v1.1.1)

@var string шаблон, используемый для генерации отдельного элемента меню. В данном шаблоне метка "{menu}" будет заменена соответствующей ссылкой или текстом меню. Если данное свойство не установлео, каждое меню будет сгенерировано без какого-либо обрамления. Данное свойство будет перезаписано опцией 'template', установленной для отдельного элемента меню свойством {@items}

items

@var array список элементов меню. Каждый элемент меню определяется массивом пар имя-значение. Возможные имена опций:
  • label: опциональная строка, определяющая имя элемента меню. Если свойство encodeLabel установлено в значение true, то имя подвергнется HTML-кодированию. Если имя элемента не определено, то по умолчанию оно устанавливается равным пустой строке;
  • url: опциональная строка или массив. Определяет URL-адрес элемента меню. Передается в метод CHtml::normalizeUrl для генерации валидного URL-адреса. Если опция не установлена, элемент меню будет сгенерирован как текст;
  • visible: опциональное булево значение, показывающее, видим ли данный элемент меню. По умолчанию - true. Может быть использовано для управления отображением элементов меню в зависимости от прав доступа пользователя;
  • items: опциональный массив, определяющий элементы подменю. Формат такой же, как родительского элемента;
  • active: опциональное булево значение, показывающее, активен ли элемент меню (выбран в данный момент). Если элемент меню активен и свойство activeClass не пусто, то в CSS-классы элемента добавится класс activeClass. Если опция не установлена, элемент меню будет установлен активным автоматически в случае, если текущий запрос вызван по ссылке url. Примечание: GET-параметры, не определенные в опции 'url', будут проигнорированы;
  • template: опциональная строка, определяющая шаблон, используемый для генерации элемента меню. Если данная опция установлена, то она будет перезаписывать глобальные настройки свойства itemTemplate. За деталями обратитесь к описанию свойства itemTemplate. Данная опция доступна с версии 1.1.1;
  • linkOptions: опциональный массив, определяющий дополнительные HTML-атрибуты, генерируемые в теге ссылки или теге 'span' элемента меню;
  • itemOptions: опциональный массив, определяющий дополнительные HTML-атрибуты, генерируемые для тега контейнера элемента меню;
  • submenuOptions: опциональный массив, определяющий дополнительные HTML-атрибуты, генерируемые контейнера подменю, если оно есть для элемента меню. Если данная опция установлена, свойство submenuHtmlOptions будет проигнорировано для данного частного подменю. Данная опция доступна с версии 1.1.6;

lastItemCssClass (с v1.1.4)

@var string CSS-класс последнего элемента главного меню и каждого подменю. По умолчанию - null, т.е., данный класс не будет присвоен элементам

linkLabelWrapper (с v1.1.4)

@var string имя HTML-элемента, используемое для обрамления имен всех ссылок меню. Например, если свойство установлено в значение 'span', то элемент меню будет сгенерирован как <li><a href="url"><span>label</span></a></li>
Это полезно при реализации меню с использованием техники слайдера (sliding).
По умолчанию - null, т.е. обрамляющий тег не будет сгенерирован

submenuHtmlOptions

@var array HTML-атрибуты для тега контейнера подменю

Методы


init()

Инициализирует виджет меню. Главным образом метод нормализует свойство items.
Если метод переопределяется, убедитесь, что родительская реализация вызывается

isItemActive()

isItemActive(array $item, string $route)
$itemпроверяемый элемент меню
$routeмаршрут текущего запроса
Проверяет, активен ли элемент меню.
Выполняется проверкой, что запрошенный URL-адрес сгенерирован опцией 'url' элемента меню.
Примечание: GET-параметры, не определенные в опции 'url', будут проигнорированы

normalizeItems()

normalizeItems(array $items, string $route, boolean &$active)
$itemsнормализуемый элемент
$routeмаршрут текущего запроса
$activeесть ли активные элементы подменю текущего элемента
Нормализует свойство items так, чтобы состояние 'active' правильно идентифицировалось для каждого элемента меню

renderMenu()

renderMenu(array $items)
$itemsэлементы меню. Каждый элемент меню - это массив, содержащий как минимум 2 элемента - 'label' и 'active'. Также могут быть дополнительные элементы 'items', 'linkOptions' и 'itemOptions'
Генерирует элементы меню

renderMenuItem()

renderMenuItem(array $item)
$itemгенерируемый элемент меню. Смотрите описание свойства items, чтобы узнать, какие данные могут находиться в элементе
Генерирует содержимое элемента меню.
Примечание: контейнер меню и подменю не генерируются в данном методе

renderMenuRecursive()

renderMenuRecursive(array $items)
$itemsэлементы меню для рекурсивной генерации
Рекурсивно генерирует элементы меню

run()

Вызывает метод renderMenu для генерации меню

Комментарии

Отправить комментарий

Популярные сообщения