Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 29.11.2016 23:29:55

Выпадающий список с многоуровневой иерархией

Как сделать в форме выпадающий список с многоуровневой иерархией? Ну типа
животные
млекопитающие
   кита
растения
цитрусовые
   апельсин
камни

А то стандартно максимум 2 уровня тащит

echo Form::select('animal', array(
  'Кошки' => array('leopard' => 'Леопард'),
  'Собаки' => array('spaniel' => 'Спаниель'),
));


Связь со мной:
Скайп(с аватаркой) - shyraks
Телеграм - @Mramoris или +7 999 260 13 20

Не в сети

#2 30.11.2016 11:57:41

Re: Выпадающий список с многоуровневой иерархией

А HTML вообще позволяет создавать трехуровневые списки (я ни разу таких не видел)? Если позволяет, то нужно писать свой Form::macro(), потому что если посмотреть на код Form::select(), то видно, что метод работает только с одно- и двухуровневым массивом.

Не в сети

#3 30.11.2016 12:41:30

Re: Выпадающий список с многоуровневой иерархией

Наверное он имел ввиду обычный селект с nbsp отступами перед титулами.

сразу автору сообщу, что чтобы построить этот список необходимо нагрузить процессор, что на дешёвых хостингах при большом наплыве посетителей просуммонит письмо от администрации повысить тарифный план на пустом месте.

Изменено hzone (30.11.2016 12:41:49)

Не в сети

#4 24.12.2016 17:22:27

mixer
Откуда: Хабаровск
Сообщений: 19

Re: Выпадающий список с многоуровневой иерархией

Если дерево перестраивать при редактировании а не при чтении никаких проблем не будет.
Топикстертеру курить гугл, к примеру по запросу "mysql nested tree"

Не в сети

#5 24.12.2016 17:26:02

mixer
Откуда: Хабаровск
Сообщений: 19

Re: Выпадающий список с многоуровневой иерархией

Так с ходу пример с гугла

Не в сети

#6 24.12.2016 18:50:00

Re: Выпадающий список с многоуровневой иерархией

Вложенные множества помогают, когда надо показать ветку и что в ней, и то не всегда, ибо строить древовидный массив (к примеру) придётся в любом случае, если хотите показать дерево. Либо проходить по результатам sql-запроса (массиву), чтобы построить третий массив с требуемыми параметрами (хотя есть варианты бд-коннекторов, которые итерируют данные ondemand, но это для продвинутых прогеров).
Короче в любом случае будет нагрузка на процессор при большом кол-ве пользователей и данном элементе на большинстве посещаемых страниц этими пользователями.

Решения (на коленке)
а) записывать к "категории" уровень вложенности и использовать его примерно так

{{ str_repeat( " ", $Category->level ) }}{{ $Category->title }}

Получишь

Категория0
   Категория1
    Категория1.1
  Категория2
    Категория2.1
    Категория2.2

Мораль :
Согласно религии разделения данных и информации на разные сущности, где информация состоит из данных, Категория0 - есть информация, состоящая из Категории1 и Категории2, являющимися для Категории0 - данными.
Углубляясь в философию проектирования архитектуры, Категория0 несёт аналитическую информацию, состояющую из статистики (сухи[ даннык) - суммы Категорий1 и 2.
В итоге "кеширование" данных в виде информации есть неплохой подход к проектированию высоконагруженных систем.

Не в сети

#7 24.12.2016 20:42:06

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Выпадающий список с многоуровневой иерархией

А можно сделать как на olx или tiu.ru (что б небыло нагрузки на цп).
1. запросить с базы только родителей, при выборе родителя, аяксом отправлять запрос на сервер, и во втором селекте отображать потомков выбранного родителя,и аналогично поступить с 3 селектом.
2. Запросить сразу все данные, и как в первом случае отображать потомков при выборе родителя, только уже не отправлять аякс запрос, а на js проверять массив, и отрисовывать селекты.

Не в сети

#8 25.12.2016 08:22:26

Re: Выпадающий список с многоуровневой иерархией

3. ещё можно хранить списки на клиенте в local storage, надо только на сервере хранить что-то типа «версии» списка (простое числовое значение – при каждом изменении списков прибавлять единицу) и пересылать этот номер в документе (например в data-атрибуте). как поменялся – перезагружать заново. учитывая что список категорий – штука меняющаяся довольно редко, можно снизить количество таких запросов к минимуму.

Не в сети

Подвал раздела