site:for-user:susanin:manager:menu

Различия

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

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

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