如何正确显示多级菜单

时间:2018-09-06 10:34:35

标签: php yii2

如何正确显示我的多级菜单。

这里有两种方法,第一种方法构建树(递归),第二种方法从数据库中提取所有类别。如何在VIEW中正确显示菜单以及<option value = ""> Select the category </ option>中的菜单。

当我输出并处理数组的失败时,我失去了多级嵌套,第三级也不会出现并且也使用了很多foreach,因为它并不聪明?

这是类别模型

/**
 * Build tree
 * @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;
}

/**
 * Get category
 * @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="">Select category</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>

0 个答案:

没有答案