Доброй ночи!
Не могу правильно в теги
<option>
правильно вывести структурированный список категорий с подкатегориями в админке.
Модель Category
protected function buildTree($data)
{
$parent_arr = [];
foreach ($data as $key => $item) {
$parent_arr[$item['parent_id']][$item['id']] = $item;
}
$treeElem = $parent_arr[0];
$this->generateElemTree($treeElem, $parent_arr);
return $treeElem;
}
public function generateElemTree(&$treeElem, $parent_arr)
{
foreach ($treeElem as $key => $item) {
if (!isset($item['children'])) {
$treeElem[$key]['children'] = [];
}
if (array_key_exists($key, $parent_arr)) {
$treeElem[$key]['children'] = $parent_arr[$key];
$this->generateElemTree($treeElem[$key]['children'], $parent_arr);
}
}
}
public function elemOption($data)
{
$arr = '';
foreach ($data as $menu) {
if ($menu['parent_id'] == 0) {
$arr .= '<option value="' . $menu['id'] . '">' . $menu['title'].'</option>';
} else {
$arr .= '<option value="' . $menu['id'] . '">' . ' --- ' . $menu['title'].'</option>';
}
if (!empty($menu['children'])) {
$arr .= $this->elemOption($menu['children']);
}
}
return $arr;
}
Это у меня в админке форма
<select id="category-parent_id" class="form-control" name="Category[parent_id]">
<?= $cat->getCategories() ?>
</select>
Сама БД
id | parent_id | title
Что выводиться на экране
Протеин
--- Соевый протеин
--- Молочный казеин
Казеин
А должно быть
Протеин
--- Соевый протеин
Казеин
--- Молочный казеин
Мне кажется что не хватается проверки в методе elemOption, для правильного построения!