dkhlystov/yii2-treegrid

为 Yii PHP 框架版本 2 的 TreeGrid 小部件

安装次数: 3,828

依赖项: 7

建议者: 0

安全性: 0

星星: 8

关注者: 5

分支: 6

开放问题: 5

类型:yii2-extension

v0.1.7 2018-04-23 16:36 UTC

This package is auto-updated.

Last update: 2024-09-14 15:52:57 UTC


README

Yii 2 框架的 TreeGrid 小部件

安装

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

运行以下命令:

composer require dkhlystov/yii2-treegrid

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

"dkhlystov/yii2-treegrid": "*"

基本用法

扩展安装完成后,只需在代码中使用即可:

<?= \dkhlystov\widgets\TreeGrid::widget([
    'dataProvider' => $dataProvider,
]); ?>

父级相对树

确保正确设置了 idAttributeparentIdAttribute 属性。默认为 idparent_id。默认根节点为父 ID 等于 0 的节点。如果您想更改此设置,请使用 rootParentId。强烈建议设置 countAttribute 为包含子节点计数的属性名称。

嵌套集树

[待编写]

懒加载

默认情况下,lazyLoad 属性设置为 true。这意味着小部件会自动将条件添加到 dataProvider(对于 yii\data\ActiveDataProvider),以按需加载子节点。最初,小部件只加载根节点及其子节点。

控制器

    function actionIndex()
    {
        $dataProvider = new ActiveDataProvider([
            'query' => Menu::find(),
        ]);
        
        return $this->render('index', [
            'dataProvider' => $dataProvider,
        ]);
    }

视图

<?= \dkhlystov\widgets\TreeGrid::widget([
    'dataProvider' => $dataProvider,
]); ?>

根节点

默认情况下,showRoots 属性设置为 false。要显示树中的根节点,请将此属性设置为 true。如果您使用嵌套集树,请确保正确设置了 treeAttribute 属性。默认设置为 tree

初始节点

您可以使懒加载树在初始时部分渲染。为此,请将 initialNode 设置为应可见的节点。小部件将渲染此节点的所有父节点及其子节点。所有父节点都将展开渲染。这在编辑节点时可能很有用(在重定向到 index 时,只需添加编辑节点的 id)。

控制器

    function actionIndex($id = null)
    {
        $initial = Menu::findOne($id);

        $dataProvider = new ActiveDataProvider([
            'query' => Menu::find(),
        ]);
        
        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'initial' => $initial,
        ]);
    }

视图

<?= \dkhlystov\widgets\TreeGrid::widget([
    'dataProvider' => $dataProvider,
    'initialNode' => $initial,
]); ?>

移动节点

在 widget 中设置 moveAction 属性以启用节点移动。URL 将使用 yii\helpers\Url::toRoute() 函数生成。操作接收三个参数:id - 移动节点的标识符,target - 移动操作的目标节点标识符,position - 移动位置(0 - 在目标之前,1 - 进入目标,2 - 在目标之后)。

视图

<?= \dkhlystov\widgets\NestedTreeGrid::widget([
    'dataProvider' => $dataProvider,
    'moveAction' => ['move'],
]); ?>

控制器

    function actionMove($id, $target, $position)
    {
        $model = Menu::findOne($id);

        $t = Menu::findOne($target);

        switch ($position) {
            case 0:
                $model->insertBefore($t);
                break;

            case 1:
                $model->appendTo($t);
                break;
            
            case 2:
                $model->insertAfter($t);
                break;
        }
    }