Yii2递归树菜单?

时间:2017-03-23 01:10:41

标签: php recursion yii2

晚安!在递归中请帮忙,我犯了错误,我需要输出类别,如上例所示!

型号:

    protected function buildTree($data, $rootID = 0)
{
    $tree = [];
    foreach ($data as $id => $node) {
        if ($node->parent_id == $rootID) {
            unset($data[$id]);
            $node->childs = $this->buildTree($data, $node->id);
            $tree[] = $node;
        }
    }
    return $tree;
}

public function getTree()
{
    $data = Category::find()->all();
    return $this->buildTree($data);
}

查看:

 <?php $form = ActiveForm::begin() 

foreach ($tree as $cat) {
echo '<br><div class="spoiler-title">' . $cat['title'] . '</div>';
printNode($cat);
}

 function printNode($cat, $level = 1)
{
if (count($cat['childs']) > 0) {

    foreach ($cat['childs'] as $child) {

        for ($j = 1; $j < $level; $j++) {
            echo '------- <b>';
        }

        echo '' . $child['title'] . '</b><br>'; 
        //echo $form->field($model, $child['title'])->checkbox();
        //I want to do a checkbox, get an error, do not understand $ 
        //form and $ model

        if (count($child['childs']) > 0) {
            printNode($child, $level + 1);
        }
    }
 }
 }
  $form = ActiveForm::end() ?>

我是如何得到树的,这是你的代码

root
    category
    category
    category
    ---- <b>subcategory</b
    ---- <b>subcategory</b
    ---- <b>subcategory</b
    ---- <b>subcategory</b
    category
    category

我需要在子类别中创建复选框,但是我收到错误,在我在评论中写的代码中,您的代码有效,但我不能将其作为图片更改为我的需求。

1 个答案:

答案 0 :(得分:0)

打印树时,还应在视图中添加递归。 在视图中尝试这个:

$form = \yii\bootstrap\ActiveForm::begin();

foreach ($tree as $cat) {
    printNode($cat);
}
function printNode($cat, $level = 1) {
    echo '<br><div class="spoiler-title">' . $cat['title'] . '</div>';
    if (count($cat['childs']) > 0) {
        foreach ($cat['childs'] as $child) {
            echo \yii\helpers\Html::checkbox('someName[]') . ' ' . $child['title'] . '<br>';
            if (count($child['childs']) > 0) {
                printNode($child, $level + 1);
            }
        }
    }
}
\yii\bootstrap\ActiveForm::end();
相关问题