site:for-user:susanin:manager:menu

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
site:for-user:susanin:manager:menu [2019/03/31 08:08]
usov [Создание пункта меню]
site:for-user:susanin:manager:menu [2020/09/24 09:42] (текущий)
Строка 14: Строка 14:
 === Создание верхнего пункта меню === === Создание верхнего пункта меню ===
  
-{{:​site:​for-user:​susanin:​manager:​pasted:​20190331-080738.png}}+{{:​site:​for-user:​susanin:​manager:​pasted:​20190331-080738.png?400}}
  
 Для создания верхнего пункта меню необходимо выбрать **для какого типа пользователя** создается пункт и нажать на ссылку **"​Добавить пункт верхнего уровня"​** Для создания верхнего пункта меню необходимо выбрать **для какого типа пользователя** создается пункт и нажать на ссылку **"​Добавить пункт верхнего уровня"​**
  
-=== Создание ​подпункта меню ​===+Для примера сделаем пункт меню со ссылкой на создание ​новой заявки:​ 
 +{{:​site:​for-user:​susanin:​manager:​pasted:​20190331-081244.png?​500}} 
 +На этот адрес должен вести ​пункт меню
  
-----+И так, в окне создания пункта:​
  
-==== Основная логика ==== +{{:​site:​for-user:​susanin:​manager:​pasted:​20190331-081810.png?​400}}
-При загрузке страницы происходит определение типа пользователя,​ в соответствии с ним вызывается метода **createMenuFromBase($menu,​ $nowPage, $nowParams)** который формирует массив для виджета меню из поля type_menu в базе+
  
-Данная модель не построена ​по канонам ​MVC, для оптимизации работы с базой ​все ​меню упаковано в json и хранится в одном поле+    * **Название(1)** - Отображаемое ​название пункта ​меню 
-Работу по шифровке/дешифровке этого меню производит ​контроллер посредством административной ​части+    * **Ссылка(2)** - Ссылка,​ куда ​он должен вести (**начинается со слэша**) 
 +    * **Активность(3)** - Пункт меню будет ​подсвечен как активный если мы на странице с таким адресом (**БЕЗ слэша в начале**) 
 +    * **Иконка(4)** - Рядом с названием будет отображаться ​иконка. [[https://​getbootstrap.com/​docs/​3.3/​components/​|Список ​иконок 
 +]] (работают не все
 + 
 +После нажатия ​кнопки "Сохранить", ​в меню выбранного типа ​пользователей будет добавлен новый пункт 
 + 
 +=== Создание подпункта ​меню ​=== 
 + 
 +Создание подпункта ​происходит ​точно так же как и верхнего пункта меню с той лишь разницей что кликнуть нужно на ссылку **"​Добавить внутрь"** напротив ​пункта в который нужно добавить подпункт:​  
 + 
 +{{ :​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)** - то же самое, ​работает ​для определения ​активности пункта меню (менять **ТОЛЬКО** ​если пункт меню ​нужно подсвечивать в других особых случаях)
  
 ---- ----
 +
  • site/for-user/susanin/manager/menu.1554019735.txt.gz
  • Последние изменения: 2020/09/24 09:42
  • (внешнее изменение)