Реализация хранения меню в бд

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Реализация хранения меню в бд

Сообщение Drugpunker »

Здравствуйте профессионалы.

Прошу совета.
Решил реализовать хранение пунктов меню в бд.
Урлы, порядковый номер, татлы и т.д.
Создал табличку.

И реально непонимаю как осуществлять вывод из бд в цикле всех пунктов с флагом active (например).
В нэте поискал, но конкретных методологий необнаружил.
Подскажите пжл, может быть знаете ресурс/книжку/цикл уроков, как реализовать подобное.
Каким классом воспользоваться можно.
Встречал CGridview, видел такую вот темку с вложенным меню viewtopic.php?t=14520.
Но мало информации.
Спасибо.
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Реализация хранения меню в бд

Сообщение Nerf »

http://php.net/manual/ru/control-structures.foreach.php
или
http://www.yiiframework.com/doc-2.0/yii ... -menu.html
Если предположить, что урлы хранятся строками, то для определения активного пункта меню вам придется либо приводить его к маршрут и сравнивать с текущим, либо наоборот, приводить текущий маршрут в url.
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Реализация хранения меню в бд

Сообщение Drugpunker »

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? Можно реализовать этот виджет, используя запросы к бд в цикле?
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Реализация хранения меню в бд

Сообщение Nerf »

1) Этот раздел для yii2.
2) Выводить циклом... Обертка на ваш вкус.
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Реализация хранения меню в бд

Сообщение BrusSENS »

Drugpunker писал(а): 2017.08.02, 20:43 Решил реализовать хранение пунктов меню в бд.
Для удобства манипуляций советую Nested Sets + parent_id. Это так, к слову. А по поводу управления, я например, не показываю в админке наследование дерева. Но если очень хочется в виде дерева, то используйте JsTree
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Реализация хранения меню в бд

Сообщение maleks »

Вот теория.
Посмотрите что из готового сначала.
Я себе остановился на MaterializedPath, очень простой.
Вывод будет зависеть от способа хранения. Читайте про те методы выше, выбирайте где без рекурсии работает.

А насчет самого меню, тут уже возникнут другие реальные проблемы:
- как удобно редактировать расположение пунктов
- что хранить как урл, от этого будет зависеть построение того же активного трейла
Yii2 universal module sceleton - for basic and advanced templates
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Реализация хранения меню в бд

Сообщение Drugpunker »

maleks писал(а): 2017.08.03, 06:43 Вот теория.
Посмотрите что из готового сначала.
Я себе остановился на MaterializedPath, очень простой.
Вывод будет зависеть от способа хранения. Читайте про те методы выше, выбирайте где без рекурсии работает.

А насчет самого меню, тут уже возникнут другие реальные проблемы:
- как удобно редактировать расположение пунктов
- что хранить как урл, от этого будет зависеть построение того же активного трейла
Спасибо, поковыряю.
Для расположения пунктов добавил поле number в бд. При выводе во фронте буду сортировать по нему.
Урлы типа site/articles, site/contact. С пристыковкой в виджете. Незнаю пока каким виджетом выводить можно в цикле.
Начал с админки.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Реализация хранения меню в бд

Сообщение maleks »

Drugpunker писал(а): 2017.08.03, 07:14 Для расположения пунктов добавил поле number в бд. При выводе во фронте буду сортировать по нему.
Урлы типа site/articles, site/contact. С пристыковкой в виджете. Незнаю пока каким виджетом выводить можно в цикле.
Начал с админки.
Для таких как NestedSets ваше поле number не будет нужно. Оно для таких как MP, порядок между братьями/сестрами.
Вы у себя как ссылку на родителя храните? Просто через parent_id? Тогда вот
.
Yii2 universal module sceleton - for basic and advanced templates
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Реализация хранения меню в бд

Сообщение Drugpunker »

maleks писал(а): 2017.08.03, 07:24
Drugpunker писал(а): 2017.08.03, 07:14 Для расположения пунктов добавил поле number в бд. При выводе во фронте буду сортировать по нему.
Урлы типа site/articles, site/contact. С пристыковкой в виджете. Незнаю пока каким виджетом выводить можно в цикле.
Начал с админки.
Для таких как NestedSets ваше поле number не будет нужно. Оно для таких как MP, порядок между братьями/сестрами.
Вы у себя как ссылку на родителя храните? Просто через parent_id? Тогда вот
.
В том то и дело, что меню не вложенное.
И часто встречается parent_id в примерах.
Вообщем буду разбираться. Спасибо.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Реализация хранения меню в бд

Сообщение maleks »

Что ж это за меню, если не вложенное?
Для такого простого yii-шный MenuWidget который по умолчанию подходит для вывода, смотри лайаут того что генерируется в начале
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Реализация хранения меню в бд

Сообщение BrusSENS »

maleks писал(а): 2017.08.03, 06:43 Я себе остановился на MaterializedPath, очень простой.
Ну зачем новичкам в голову шлак запихивать? Шлак это MP, проверено. Лучше NS пока ничего не придумали лучше.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Реализация хранения меню в бд

Сообщение maleks »

BrusSENS писал(а): 2017.08.03, 16:16 Ну зачем новичкам в голову шлак запихивать? Шлак это MP, проверено. Лучше NS пока ничего не придумали лучше.
В инете полно сравнений о преимуществах и недостатках любых способов. По скорости я видел бенчмарки что эти два способа сравнимы.
NS тебе нравится потому что не тебе его писать пришлось. Но он очень кодерский и совсем ненаглядный, особенно новичкам, а речь шла просто о менюшках на сайте.
Yii2 universal module sceleton - for basic and advanced templates
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Реализация хранения меню в бд

Сообщение Drugpunker »

maleks писал(а): 2017.08.03, 16:31
BrusSENS писал(а): 2017.08.03, 16:16 Ну зачем новичкам в голову шлак запихивать? Шлак это MP, проверено. Лучше NS пока ничего не придумали лучше.
В инете полно сравнений о преимуществах и недостатках любых способов. По скорости я видел бенчмарки что эти два способа сравнимы.
NS тебе нравится потому что не тебе его писать пришлось. Но он очень кодерский и совсем ненаглядный, особенно новичкам, а речь шла просто о менюшках на сайте.
Какая из реализаций поддерживает отсутствие потомков?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Реализация хранения меню в бд

Сообщение maleks »

Drugpunker писал(а): 2017.08.03, 16:37 Какая из реализаций поддерживает отсутствие потомков?
Никакая. При отсутствии потомков это не дерево. Выводите foreach-ем и все.
Yii2 universal module sceleton - for basic and advanced templates
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Реализация хранения меню в бд

Сообщение Drugpunker »

maleks писал(а): 2017.08.03, 16:45
Drugpunker писал(а): 2017.08.03, 16:37 Какая из реализаций поддерживает отсутствие потомков?
Никакая. При отсутствии потомков это не дерево. Выводите foreach-ем и все.
Я в перспективе на будущее спрашивал...
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Реализация хранения меню в бд

Сообщение BrusSENS »

maleks писал(а): 2017.08.03, 16:31 В инете полно сравнений о преимуществах и недостатках любых способов. По скорости я видел бенчмарки что эти два способа сравнимы.
В нете полно бенчмарков, которые показывают различия на малых проектах. Я использовал и MP и NS, и первое на больших уровнях не особо красивое.
maleks писал(а): 2017.08.03, 16:31 NS тебе нравится потому что не тебе его писать пришлось.
Использовал NS и без поведения на проектах, которые работают и без Yii, ничего сложного в реализации нет, не выдумывайте.
maleks писал(а): 2017.08.03, 16:31 он очень кодерский и совсем ненаглядный, особенно новичкам
Что значит "кодерский и не совсем наглядный"?
NS - это прежде всего принцип хранения деревьев в БД, код тут практически не причём.
Если понимаете, как работает хранение NS - то всё более, чем наглядно.
Да и если человек новичок, то это не повод не учиться решать сложные задачи.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Ответить