Реализация хранения меню в бд
-
- Сообщения: 187
- Зарегистрирован: 2014.08.13, 19:44
Реализация хранения меню в бд
Здравствуйте профессионалы.
Прошу совета.
Решил реализовать хранение пунктов меню в бд.
Урлы, порядковый номер, татлы и т.д.
Создал табличку.
И реально непонимаю как осуществлять вывод из бд в цикле всех пунктов с флагом active (например).
В нэте поискал, но конкретных методологий необнаружил.
Подскажите пжл, может быть знаете ресурс/книжку/цикл уроков, как реализовать подобное.
Каким классом воспользоваться можно.
Встречал CGridview, видел такую вот темку с вложенным меню viewtopic.php?t=14520.
Но мало информации.
Спасибо.
Прошу совета.
Решил реализовать хранение пунктов меню в бд.
Урлы, порядковый номер, татлы и т.д.
Создал табличку.
И реально непонимаю как осуществлять вывод из бд в цикле всех пунктов с флагом active (например).
В нэте поискал, но конкретных методологий необнаружил.
Подскажите пжл, может быть знаете ресурс/книжку/цикл уроков, как реализовать подобное.
Каким классом воспользоваться можно.
Встречал CGridview, видел такую вот темку с вложенным меню viewtopic.php?t=14520.
Но мало информации.
Спасибо.
Re: Реализация хранения меню в бд
http://php.net/manual/ru/control-structures.foreach.php
или
http://www.yiiframework.com/doc-2.0/yii ... -menu.html
Если предположить, что урлы хранятся строками, то для определения активного пункта меню вам придется либо приводить его к маршрут и сравнивать с текущим, либо наоборот, приводить текущий маршрут в url.
или
http://www.yiiframework.com/doc-2.0/yii ... -menu.html
Если предположить, что урлы хранятся строками, то для определения активного пункта меню вам придется либо приводить его к маршрут и сравнивать с текущим, либо наоборот, приводить текущий маршрут в url.
-
- Сообщения: 187
- Зарегистрирован: 2014.08.13, 19:44
Re: Реализация хранения меню в бд
Имелся ввиду вывод пунктов для редактирования в админке.Nerf писал(а): ↑2017.08.02, 21:57 http://php.net/manual/ru/control-structures.foreach.php
или
http://www.yiiframework.com/doc-2.0/yii ... -menu.html
Если предположить, что урлы хранятся строками, то для определения активного пункта меню вам придется либо приводить его к маршрут и сравнивать с текущим, либо наоборот, приводить текущий маршрут в url.
Сорри. Не объяснил всю мысль.
То есть, каким образом выводить все поля из таблицы, для каждого пункта меню.
Правильно понимаю, что через cgridview?
А также, как выводить это меню для пользователя?
Через Cmenu? Можно реализовать этот виджет, используя запросы к бд в цикле?
Re: Реализация хранения меню в бд
1) Этот раздел для yii2.
2) Выводить циклом... Обертка на ваш вкус.
2) Выводить циклом... Обертка на ваш вкус.
- BrusSENS
- Сообщения: 565
- Зарегистрирован: 2012.07.26, 06:51
- Откуда: Новороссийск
- Контактная информация:
Re: Реализация хранения меню в бд
Для удобства манипуляций советую Nested Sets + parent_id. Это так, к слову. А по поводу управления, я например, не показываю в админке наследование дерева. Но если очень хочется в виде дерева, то используйте JsTree
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Режим обслуживания сайта для Yii 2.x.x
Re: Реализация хранения меню в бд
Вот теория.
Посмотрите что из готового сначала.
Я себе остановился на MaterializedPath, очень простой.
Вывод будет зависеть от способа хранения. Читайте про те методы выше, выбирайте где без рекурсии работает.
А насчет самого меню, тут уже возникнут другие реальные проблемы:
- как удобно редактировать расположение пунктов
- что хранить как урл, от этого будет зависеть построение того же активного трейла
Посмотрите что из готового сначала.
Я себе остановился на MaterializedPath, очень простой.
Вывод будет зависеть от способа хранения. Читайте про те методы выше, выбирайте где без рекурсии работает.
А насчет самого меню, тут уже возникнут другие реальные проблемы:
- как удобно редактировать расположение пунктов
- что хранить как урл, от этого будет зависеть построение того же активного трейла
Yii2 universal module sceleton - for basic and advanced templates
-
- Сообщения: 187
- Зарегистрирован: 2014.08.13, 19:44
Re: Реализация хранения меню в бд
Спасибо, поковыряю.maleks писал(а): ↑2017.08.03, 06:43 Вот теория.
Посмотрите что из готового сначала.
Я себе остановился на MaterializedPath, очень простой.
Вывод будет зависеть от способа хранения. Читайте про те методы выше, выбирайте где без рекурсии работает.
А насчет самого меню, тут уже возникнут другие реальные проблемы:
- как удобно редактировать расположение пунктов
- что хранить как урл, от этого будет зависеть построение того же активного трейла
Для расположения пунктов добавил поле number в бд. При выводе во фронте буду сортировать по нему.
Урлы типа site/articles, site/contact. С пристыковкой в виджете. Незнаю пока каким виджетом выводить можно в цикле.
Начал с админки.
Re: Реализация хранения меню в бд
Для таких как NestedSets ваше поле number не будет нужно. Оно для таких как MP, порядок между братьями/сестрами.Drugpunker писал(а): ↑2017.08.03, 07:14 Для расположения пунктов добавил поле number в бд. При выводе во фронте буду сортировать по нему.
Урлы типа site/articles, site/contact. С пристыковкой в виджете. Незнаю пока каким виджетом выводить можно в цикле.
Начал с админки.
Вы у себя как ссылку на родителя храните? Просто через parent_id? Тогда вот
.https://github.com/paulzi/yii2-adjacency-list писал(а):пример
Yii2 universal module sceleton - for basic and advanced templates
-
- Сообщения: 187
- Зарегистрирован: 2014.08.13, 19:44
Re: Реализация хранения меню в бд
В том то и дело, что меню не вложенное.maleks писал(а): ↑2017.08.03, 07:24Для таких как NestedSets ваше поле number не будет нужно. Оно для таких как MP, порядок между братьями/сестрами.Drugpunker писал(а): ↑2017.08.03, 07:14 Для расположения пунктов добавил поле number в бд. При выводе во фронте буду сортировать по нему.
Урлы типа site/articles, site/contact. С пристыковкой в виджете. Незнаю пока каким виджетом выводить можно в цикле.
Начал с админки.
Вы у себя как ссылку на родителя храните? Просто через parent_id? Тогда вот.https://github.com/paulzi/yii2-adjacency-list писал(а):пример
И часто встречается parent_id в примерах.
Вообщем буду разбираться. Спасибо.
Re: Реализация хранения меню в бд
Что ж это за меню, если не вложенное?
Для такого простого yii-шный MenuWidget который по умолчанию подходит для вывода, смотри лайаут того что генерируется в начале
Для такого простого yii-шный MenuWidget который по умолчанию подходит для вывода, смотри лайаут того что генерируется в начале
Yii2 universal module sceleton - for basic and advanced templates
- BrusSENS
- Сообщения: 565
- Зарегистрирован: 2012.07.26, 06:51
- Откуда: Новороссийск
- Контактная информация:
Re: Реализация хранения меню в бд
Ну зачем новичкам в голову шлак запихивать? Шлак это MP, проверено. Лучше NS пока ничего не придумали лучше.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Режим обслуживания сайта для Yii 2.x.x
Re: Реализация хранения меню в бд
В инете полно сравнений о преимуществах и недостатках любых способов. По скорости я видел бенчмарки что эти два способа сравнимы.
NS тебе нравится потому что не тебе его писать пришлось. Но он очень кодерский и совсем ненаглядный, особенно новичкам, а речь шла просто о менюшках на сайте.
Yii2 universal module sceleton - for basic and advanced templates
-
- Сообщения: 187
- Зарегистрирован: 2014.08.13, 19:44
Re: Реализация хранения меню в бд
Какая из реализаций поддерживает отсутствие потомков?maleks писал(а): ↑2017.08.03, 16:31В инете полно сравнений о преимуществах и недостатках любых способов. По скорости я видел бенчмарки что эти два способа сравнимы.
NS тебе нравится потому что не тебе его писать пришлось. Но он очень кодерский и совсем ненаглядный, особенно новичкам, а речь шла просто о менюшках на сайте.
Re: Реализация хранения меню в бд
Никакая. При отсутствии потомков это не дерево. Выводите foreach-ем и все.
Yii2 universal module sceleton - for basic and advanced templates
-
- Сообщения: 187
- Зарегистрирован: 2014.08.13, 19:44
Re: Реализация хранения меню в бд
- BrusSENS
- Сообщения: 565
- Зарегистрирован: 2012.07.26, 06:51
- Откуда: Новороссийск
- Контактная информация:
Re: Реализация хранения меню в бд
В нете полно бенчмарков, которые показывают различия на малых проектах. Я использовал и MP и NS, и первое на больших уровнях не особо красивое.
Использовал NS и без поведения на проектах, которые работают и без Yii, ничего сложного в реализации нет, не выдумывайте.
Что значит "кодерский и не совсем наглядный"?
NS - это прежде всего принцип хранения деревьев в БД, код тут практически не причём.
Если понимаете, как работает хранение NS - то всё более, чем наглядно.
Да и если человек новичок, то это не повод не учиться решать сложные задачи.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Режим обслуживания сайта для Yii 2.x.x