Это старая версия документа!
Главная → Пользователю Сусанина → Инструкции Редакторам → Боковое меню
Боковое меню
Краткое описание
В системе предусмотрена возможность отображать разные пункты левого меню для каждого из типов пользователей, в левом меню сверху написан тип пользователя (1) под которым произведен вход:
Меню способно отображать один уровень вложенности, верхние ссылки обладающие вложенными элементами имеют стрелочку справа (3), а развернутый пункт меню выглядит как под номером (2)
Создание пункта меню
Создание верхнего пункта меню
Для создания верхнего пункта меню необходимо выбрать для какого типа пользователя создается пункт и нажать на ссылку «Добавить пункт верхнего уровня»
Для примера сделаем пункт меню со ссылкой на создание новой заявки:
На этот адрес должен вести пункт меню
И так, в окне создания пункта:
- Название(1) - Отображаемое название пункта меню
- Ссылка(2) - Ссылка, куда он должен вести (начинается со слэша)
- Активность(3) - Пункт меню будет подсвечен как активный если мы на странице с таким адресом (БЕЗ слэша вначале)
Создание подпункта меню
Основная логика
При загрузке страницы происходит определение типа пользователя, в соответствии с ним вызывается метода createMenuFromBase($menu, $nowPage, $nowParams) который формирует массив для виджета меню из поля type_menu в базе
Данная модель не построена по канонам MVC, для оптимизации работы с базой все меню упаковано в json и хранится в одном поле. Работу по шифровке/дешифровке этого меню производит контроллер посредством административной части
Массив Меню
Массив в unserialize виде представляет из себя следующее:
- каждый верхний пункт меню - массив
- вложенный пункт меню - массив в элементе items:Araray основного пункта
- обязательные элементы в пункте (желтый):
- label - отвечает за заголовок пункта
- url - отвечает за ссылку пункта (в формате: /controller/action)
- не обязательные элементы (белый):
- icon - содержит часть CSS класса иконки glyphicon («glyphicon glyphicon-home» ⇒ «home»)
- active - ссылка на страницу, при нахождении на которой пункт меню будет выделен как активный (в формате: controller/action)
- items - массив с массивами вложенных пунктов меню
- Если ссылка содержит GET аргументы (красный):
- url - элемент пункта меню превращается из строки в ассоциативный массив, в котором первый элемент имеет ключ url и точно так же как и в обычном случае содержит ссылку, а последующие элементы массива это ключ(аргумент) → значение(значение) для url-адреса («type» ⇒ 10) → (controller/action?type=10)
- active - так же как и url превращается в ассоциативный массив, первый элемент с ключом active содержит ссылку как и в обычном случае, а второй(он же последний) элемент - массив содержащий пары ключ → значение для определения аргументов ([«type» ⇒ 10])
После сборки массива он с помощью метода serialize упаковывается в базу
На что обратить внимание
- Ссылка в элементе массива url вначале имеет слэш (/controller/action), а в элементе active слэша нет (controller/action)
- если ссылка меню сложная и имеет GET аргументы (параметры) в url адресе, то элементы массива url и active изменяются. Теперь они не строкового типа - а массивы. с первым элементом понятно, он сохранился строковым как и раньше, но в случае с url у нас массив имеет первый элемент:String ссылку а ПОСЛЕДУЮЩИЕ arg ⇒ value, а в массиве active у нас всего два элемента, первый так же String, а ВТОРОЙ - МАССИВ с arg ⇒ value
Для примера:
["url" => "/controller/action", "firstArg" => 10, "secondArg" => "view"]
["active" => "controller/action", ["firstArg" => 10, "secondArg" => "view"]]
Основные методы
public static function getMenuByType($type) // возвращает меню из базы в serialize формате для определенного типа пользователя
public static function renderTopMenu($arrTopMenuLinks) // возвращает html код верхнего меню по массиву ссылок из параметров приложения
public static function createMenuFromBase($menu, $nowPage, $nowParams) // возвращает меню в виде айтемов для виджета меню



