ale10257 / yii2-ext-for-work-nested-set

包含用于编辑嵌套集合树的控件和行为

dev-master 2019-05-17 03:58 UTC

This package is not auto-updated.

Last update: 2022-01-08 14:07:22 UTC


README

包含用于编辑嵌套集合树的控件和行为

安装

安装此扩展的首选方式是通过 composer

运行以下命令之一:

composer require ale10257/yii2-ext-for-work-nested-set "dev-master"

或者

"ale10257/yii2-ext-for-work-nested-set": "dev-master"

将以下内容添加到您的 composer.json 文件的 require 部分。

功能

  1. 将菜单树作为表格生成(使用嵌套集合树)

  2. 拖放行表

  3. 将结果保存到数据库

移动前的示例表

before move

移动

move

移动后

after move

重要

只能拖动兄弟元素!!!

用法

模型

按照以下方式设置模型: https://github.com/creocoder/yii2-nested-sets 并确定常量 SITE_ROOT_NAME 和行为

<?php
use creocoder\nestedsets\NestedSetsBehavior;
use ale10257\ext\ChangeTreeBehavior;

//...

const SITE_ROOT_NAME = 'My_SITE_ROOT';

//...

    public function behaviors()
    {
        return [
            [
                'class' => NestedSetsBehavior::className(),
                'treeAttribute' => 'tree',
            ],
            [
                'class' => ChangeTreeBehavior::className(),
                'rootSite' => SITE_ROOT_NAME
            ]
        ];
    }
      
//...
?>

查看 Category 的 index.php

//...
    <?php if($data) : ?>
        <div class="category-index">
            <h1><?= Html::encode($this->title) ?></h1>
                <?= $this->render('tree', ['data' => $data]) ?>
        </div>
    <?php endif ?>
//...

查看 tree.php

<?php
use ale10257\ext\GetTreeWidget;
use yii\helpers\Url;
//Number tree in your Nested Set tree

echo GetTreeWidget::widget([
        'options' => [
            'data' => $data,
            // action for ajax request for edit tree
            'urlChangeTree' => Url::to(['/admin/category/update-tree']), 
            'urlUpdateTree' => Url::to(['/admin/category/update']),
            'urlDeleteTree' => Url::to(['/admin/category/delete']),
            'urlAddItem' => Url::to(['/admin/category/create']),
            // name field in your table for view
            'fieldForTitleItem' => 'name',
        ]
    ]); 
?>

控制器

<?php

//...
    
    public function actionIndex()
    {
        $category = new Category;
        return $this->render('index', [
            'data' => $category->getTree(),
        ]);
    }
//...  
    //accepts the ajax request  
    public function actionUpdateTree()
    {
        if (Yii::$app->request->isAjax) {
            $model = new Category();
            $post = Yii::$app->request->post();
            return $this->renderPartial('tree', ['data' => $model->updateTree($post)]);
        }
        return Yii::$app->request->referrer;
    }    
//...
?>