dkhlystov / yii2-treegrid
为 Yii PHP 框架版本 2 的 TreeGrid 小部件
Requires
- bower-asset/treegrid: >= 0.1.6
- yiisoft/yii2: *
README
Yii 2 框架的 TreeGrid 小部件
安装
通过 composer 安装此扩展是首选方式。
运行以下命令:
composer require dkhlystov/yii2-treegrid
或者将以下内容添加到您的 composer.json
文件的 require 部分:
"dkhlystov/yii2-treegrid": "*"
基本用法
扩展安装完成后,只需在代码中使用即可:
<?= \dkhlystov\widgets\TreeGrid::widget([ 'dataProvider' => $dataProvider, ]); ?>
父级相对树
确保正确设置了 idAttribute
和 parentIdAttribute
属性。默认为 id
和 parent_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; } }