andipas / yii2-gtreetable
yii2-gtreetable是Yii 2框架的扩展,它是bootstrap-gtreetable插件的包装器,另一方面它提供了将节点状态保存到数据库的功能。
Requires
- bower-asset/bootstrap-gtreetable: 2.*
- bower-asset/jquery.browser: *
- bower-asset/urijs: 1.14.*
- creocoder/yii2-nested-sets: 0.9.0
- yiisoft/yii2: *
- yiisoft/yii2-bootstrap: *
- yiisoft/yii2-jui: *
This package is not auto-updated.
Last update: 2024-09-23 13:11:21 UTC
README
Yii2-GTreeTable是Yii 2框架的扩展,它是bootstrap-gtreetable插件的包装器,另一方面提供了对服务器端应用程序的支持。通过修复;
感谢软件,可以将节点实际状态映射到数据库中。
测试可在演示项目中找到。
安装
安装通过Composer实现。
在控制台输入
composer require gilek/yii2-gtreetable "*"
或者在composer.json
文件的require
部分添加以下行。
"gilek/yii2-gtreetable": "*"
另外一件事,别忘了安装fxp/composer-asset-plugin
composer global require fxp/composer-asset-plugin "1.0.0"
最小配置
注意:您还可以使用迁移文件,跳过以下两个步骤:
yii migrate --migrationPath=<app_dir>/vendor/gilek/yii2-gtreetable/migrations
- 创建存储节点的表
CREATE TABLE `tree` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `root` INT(10) UNSIGNED DEFAULT NULL, `lft` INT(10) UNSIGNED NOT NULL, `rgt` INT(10) UNSIGNED NOT NULL, `level` SMALLINT(5) UNSIGNED NOT NULL, `type` VARCHAR(64) NOT NULL, `name` VARCHAR(128) NOT NULL, PRIMARY KEY (`id`), KEY `root` (`root`), KEY `lft` (`lft`), KEY `rgt` (`rgt`), KEY `level` (`level`) );
- 添加主节点
INSERT INTO `tree` (`id`, `root`, `lft`, `rgt`, `level`, `type`, `name`) VALUES (1, 1, 1, 2, 0, 'default', 'Main node');
- 创建新的活动记录模型,基于第1点中描述的表。重要的是,模型需要扩展
gilek\gtreetable\models\TreeModel
类
<?php class Tree extends \gilek\gtreetable\models\TreeModel { public static function tableName() { return 'tree'; } } ?>
- 创建新的控制器或向现有控制器添加以下操作
<?php use app\models\Tree; class TreeController extends \yii\web\Controller { public function actions() { return [ 'nodeChildren' => [ 'class' => 'gilek\gtreetable\actions\NodeChildrenAction', 'treeModelName' => Tree::className() ], 'nodeCreate' => [ 'class' => 'gilek\gtreetable\actions\NodeCreateAction', 'treeModelName' => Tree::className() ], 'nodeUpdate' => [ 'class' => 'gilek\gtreetable\actions\NodeUpdateAction', 'treeModelName' => Tree::className() ], 'nodeDelete' => [ 'class' => 'gilek\gtreetable\actions\NodeDeleteAction', 'treeModelName' => Tree::className() ], 'nodeMove' => [ 'class' => 'gilek\gtreetable\actions\NodeMoveAction', 'treeModelName' => Tree::className() ], ]; } public function actionIndex() { return $this->render('@gilek/gtreetable/views/widget', ['options'=>[ // 'manyroots' => true // 'draggable' => true ]]); } } ?>
配置
操作
gilek\gtreetable\actions
位置的所有操作都具有属性
-
afterAction
(回调(gilek\gtreetable\models\TreeModel
$model))- 在负责操作任务的代码之后直接触发,即节点删除后; -
$afterRun
(回调)- 在执行操作后触发; -
beforeAction
(回调(gilek\gtreetable\models\TreeModel
$model))- 在负责操作任务的代码之前直接触发,即节点删除之前; -
$beforeRun
(回调)- 在执行操作之前触发。更多信息请参考yii\base\Action类文档。
使用示例,检查对授权单元的访问
<?php [ 'nodeCreate' => [ 'class' => 'gilek\gtreetable\actions\NodeCreateAction', 'treeModelName' => Tree::className(), 'beforeRun' => function() { if (!Yii::$app->user->can('Node create')) { throw new \yii\web\ForbiddenHttpException(); } } ] ?>
$treeModelName
(TreeModel)- 对从gilek\gtreetable\models\TreeModel
扩展的模型数据的引用(见最小配置第1点)。
模型
数据库中树结构的支持基于嵌套集模型。
gilek\gtreetable\models\TreeModel
抽象类在PHP端提供嵌套集模型。它定义了验证规则和其他必需的方法。其配置可以通过参数进行调整
-
$depthAttribute
(字符串)- 存储节点级别的列名。默认为level
; -
$leftAttribute
(字符串)- 存储左值的列名。默认为lft
; -
$nameAttribute
(字符串)- 存储节点标签的列名。默认为name
; -
$rightAttribute
(字符串)- 存储右值的列名。默认为rgt
; -
$treeAttribute
(字符串)- 存储对主元素ID的引用的列名。默认为root
; -
$typeAttribute
(字符串)- 存储节点类型的列名。默认为type
。
视图
gilek\gtreetable\views\widget
视图类包含对 CUD 操作 的配置,以及参考 节点源。虽然使用它并非必需,但在简单项目中它可能非常有用。
类可以通过属性进行调整
-
$controller
(字符串)- 定义操作的控制器名称(参见 最小配置 中的第4点)。默认情况下,获取触发gilek\gtreetable\views\widget
视图的控制器名称 -
$options
(数组)- 直接传递给 bootstrap-gtreetable 插件的选项 -
$routes
(数组)- 在特定节点位于不同的容器中,或者其名称与第4点中提到的不同的情况下,则需要定义它
以下示例显示了数据结构
<?php [ 'nodeChildren' => 'controllerA/source', 'nodeCreate' => 'controllerB/create', 'nodeUpdate' => 'controllerC/update', 'nodeDelete' => 'controllerD/delete', 'nodeMove' => 'controllerE/move' ] ?>
$title
(字符串)- 定义站点标题,当视图直接从动作级别调用时(参见 最小配置 中的第4点)
小部件
gilek\gtreetable\Widget
小部件的主要任务是生成传递给 bootstrap-gtreetable 插件的参数,并添加所需文件。如果容器不可用,它还会负责创建容器。该类具有以下属性
-
$assetBundle
(AssetBundle)- 参数允许覆盖主要的AssetBundle
包,即Asset
-
$columnName
(字符串)- 表列名称。默认值是Name
,它从翻译文件中获取 -
$htmlOptions
(数组)- 容器的 HTML 选项,它们在创建容器时进行渲染(参数$selector
设置为null
) -
$options
(数组)- 直接传递给 bootstrap-gtreetable 插件的选项 -
$selector
(字符串)- 指定在树容器上(<table>
标签)的 jQuery 选择器。当参数设置为null
时,将自动创建表格。默认值为null
限制
Yii2-GTreeTable 使用 针对 Yii 2 的嵌套集行为扩展,截至目前(2015 年 1 月),在关于主元素(级别 = 0 的节点)排序方面存在一些限制
如果在添加或移动节点作为主节点时,它将位于此级别中的最后一个元素之后。因此,显示的主节点顺序可能与数据库中的映射不同