Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
site:for-user:susanin:manager:menu [2019/03/31 08:13] usov [Создание пункта меню] |
site:for-user:susanin:manager:menu [2020/09/24 09:42] (текущий) |
||
|---|---|---|---|
| Строка 22: | Строка 22: | ||
| На этот адрес должен вести пункт меню | На этот адрес должен вести пункт меню | ||
| + | И так, в окне создания пункта: | ||
| - | === Создание подпункта меню === | + | {{:site:for-user:susanin:manager:pasted:20190331-081810.png?400}} |
| - | ---- | + | * **Название(1)** - Отображаемое название пункта меню |
| + | * **Ссылка(2)** - Ссылка, куда он должен вести (**начинается со слэша**) | ||
| + | * **Активность(3)** - Пункт меню будет подсвечен как активный если мы на странице с таким адресом (**БЕЗ слэша в начале**) | ||
| + | * **Иконка(4)** - Рядом с названием будет отображаться иконка. [[https://getbootstrap.com/docs/3.3/components/|Список иконок | ||
| + | ]] (работают не все) | ||
| - | ==== Основная логика ==== | + | После нажатия кнопки "Сохранить", в меню выбранного типа пользователей будет добавлен новый пункт |
| - | При загрузке страницы происходит определение типа пользователя, в соответствии с ним вызывается метода **createMenuFromBase($menu, $nowPage, $nowParams)** который формирует массив для виджета меню из поля type_menu в базе | + | |
| - | Данная модель не построена по канонам MVC, для оптимизации работы с базой все меню упаковано в json и хранится в одном поле. | + | === Создание подпункта меню === |
| - | Работу по шифровке/дешифровке этого меню производит контроллер посредством административной части | + | |
| + | Создание подпункта происходит точно так же как и верхнего пункта меню с той лишь разницей что кликнуть нужно на ссылку **"Добавить внутрь"** напротив пункта в который нужно добавить подпункт: | ||
| + | |||
| + | {{ :site:for-user:susanin:manager:pasted:20190331-083035.png?400 |}} | ||
| ---- | ---- | ||
| - | ==== Массив Меню ==== | + | ==== Удаление пункта/подпункта меню ==== |
| + | Чтобы удалить пункт или подпункт меню необходимо кликнуть по ссылке "Удалить" напротив необходимого пункта/подпункта. | ||
| - | {{:site:for-tech:models:pasted:20190328-094558.png}} | + | **ВНИМАНИЕ: Удаление произойдет сразу** (без дополнительных вопросов) и **все подпункты удалятся** (если удаляете пункт с подпунктами) |
| - | Массив в **unserialize** виде представляет из себя следующее: | + | {{:site:for-user:susanin:manager:pasted:20190331-083404.png?500}} |
| - | * каждый верхний пункт меню - массив | + | ---- |
| - | * вложенный пункт меню - массив в элементе **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** упаковывается в базу | + | {{:site:for-user:susanin:manager:pasted:20190331-083645.png?500}} |
| ---- | ---- | ||
| - | ==== На что обратить внимание ==== | + | ==== Сложные ссылки с параметрами ==== |
| - | * Ссылка в элементе массива **url** вначале **имеет слэш** //(/controller/action)//, а в элементе **active слэша нет** //(controller/action)// | + | При создании пункта меню **не пытайтесь** писать сложную ссылку типа |
| - | * если ссылка меню сложная и имеет **GET** аргументы (параметры) в url адресе, то элементы массива **url** и **active** изменяются. Теперь они не строкового типа - а массивы. с первым элементом понятно, он сохранился строковым как и раньше, но в случае с **url** у нас массив имеет первый элемент:String ссылку а **ПОСЛЕДУЮЩИЕ** arg => value, а в массиве **active** у нас всего два элемента, первый так же String, а **ВТОРОЙ - МАССИВ** с arg => value | + | |
| - | //Для примера:// | + | {{:site:for-user:susanin:manager:pasted:20190331-084408.png}} |
| - | * <code php>["url" => "/controller/action", "firstArg" => 10, "secondArg" => "view"]</code> | + | |
| - | * <code php>["active" => "controller/action", ["firstArg" => 10, "secondArg" => "view"]]</code> | + | |
| - | ---- | + | в поле **"Ссылка"** для этого **есть специальные поля** и работают они следующим образом: |
| - | ==== Основные методы ==== | + | {{:site:for-user:susanin:manager:pasted:20190331-084633.png?600}} |
| - | * <code php>public static function getMenuByType($type) // возвращает меню из базы в serialize формате для определенного типа пользователя</code> | + | |
| - | * <code php>public static function renderTopMenu($arrTopMenuLinks) // возвращает html код верхнего меню по массиву ссылок из параметров приложения</code> | + | * **Параметры адресной строки для юрл(1)** - перечисляем параметры ссылки (то что идет после ? в ссылке) **через &** (например: user=5&post=2) |
| - | * <code php>public static function createMenuFromBase($menu, $nowPage, $nowParams) // возвращает меню в виде айтемов для виджета меню</code> | + | * **Параметры адресной строки для активации(2)** - то же самое, работает для определения активности пункта меню (менять **ТОЛЬКО** если пункт меню нужно подсвечивать в других особых случаях) |
| ---- | ---- | ||
| + | |||