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; } }