carl / 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: 2020-01-05 14:57:38 UTC
README
Yii2-GTreeTable 是 Yii 2 框架的扩展,它是 bootstrap-gtreetable 插件的包装器,另一方面提供了对服务器端应用程序的支持。
通过该软件可以将节点实际状态映射到数据库。
测试可用在演示项目上。
安装
安装通过 Composer 实现。
在控制台输入
composer require carl/yii2-gtreetable "*"
或者在 composer.json
文件的 require
部分添加以下行。
"carl/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');
- 创建新的 active record 模型,基于第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
(字符串) - 指定在树容器上的 jQuery 选择器(<table>
标签)。当参数设置为null
时,将自动创建表格。默认为null
。
限制
Yii2-GTreeTable 使用 Nested Set behavior for Yii 2 扩展,目前(2015 年 1 月)在主元素(级别 = 0 的节点)排序方面有一些限制。
在添加或移动节点作为主节点时,它将位于该级别的最后一个元素之后。因此,显示的主节点的顺序可能与数据库中的顺序不同。