Всем привет, как мне правильно вывести мое многоуровневое меню.
Тут два метода , первый метод строит дерево (рекурсия), второй метод вытаскивает все категории с БД. Как правильно вывести во VIEW меню и что бы он был в
<option value="">Выбрать категорию</option>
.
Когда вывожу и делаю перебор массива, то теряю многоуровневою вложенность, третий уровень не появляется и использовать много foreach тоже как то не умно?
Это модель Category
/**
* Строим дерево
* @param $data
* @param int $parent_id
* @return array
*/
protected function buildTree($data, $parent_id = 0)
{
$tree = [];
foreach ($data as $id => $node) {
if ($node['parent_id'] == $parent_id) {
unset($data[$id]);
$node['childs'] = $this->buildTree($data, $node['id']);
$tree[] = $node;
}
}
return $tree;
}
/**
* Получаем категории
* @return array
*/
public function getAllCategories()
{
$data = self::find()->asArray()->all();
$data = $this->buildTree($data);
return $data;
}
Вот пример во вьюхе.
Третья вложенность не работает или я не знаю как сделать бесконечную вложенность
<select id="category-parent_id" class="form-control" name="Category[parent_id]" aria-invalid="false">
<option value="">Выбрать категорию</option>
<?php foreach ($category->getAllCategories() as $cats) : ?>
<option value="<?= $cats['id'] ?>"><?= $cats['title'] ?></option>
<?php if ($cats['childs'] > 0) : ?>
<?php foreach ($cats['childs'] as $cat) : ?>
<option value="<?= $cat['id'] ?>">--- <?= $cat['title'] ?></option>
<?php if ($cat['childs'] > 0) : ?>
<?php foreach ($cat['childs'] as $childs) : ?>
<option value="<?= $childs['id'] ?>">--- <?= $childs['title'] ?></option>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</select>