Это старая версия документа!
Главная → Пользователю Сусанина → Инструкции Редакторам → Боковое меню
Боковое меню
Краткое описание
В системе предусмотрена возможность отображать разные пункты левого меню для каждого из типов пользователей, в левом меню сверху написан тип пользователя (1) под которым произведен вход:
Меню способно отображать один уровень вложенности, верхние ссылки обладающие вложенными элементами имеют стрелочку справа (3), а развернутый пункт меню выглядит как под номером (2)
Представление в базе
- type - тип пользователя (берется из констант в модели user)
- type_menu - меню для данного типа пользователя (это php массив обработанный функцией serialize)
Основная логика
При загрузке страницы происходит определение типа пользователя, в соответствии с ним вызывается метода 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) // возвращает меню в виде айтемов для виджета меню


