gilek/yii2-gtreetable

yii2-gtreetable 是 Yii 2 框架的扩展,是 bootstrap-gtreetable 插件的包装器,另一方面它提供了将节点状态保存到数据库的功能。

安装次数: 11,782

依赖项: 0

建议者: 0

安全性: 0

星标: 41

关注者: 11

分支: 23

公开问题: 1

类型:yii2-extension

v1.1.3 2018-02-17 19:02 UTC

This package is auto-updated.

Last update: 2024-09-07 19:55:25 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

最小配置

注意:您还可以使用迁移文件并省略以下两个步骤:yii migrate --migrationPath=<app_dir>/vendor/gilek/yii2-gtreetable/migrations

  1. 创建存储节点的表
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`)
);
  1. 添加主节点
INSERT INTO `tree` (`id`, `root`, `lft`, `rgt`, `level`, `type`, `name`) VALUES (1, 1, 1, 2, 0, 'default', 'Main node');
  1. 创建新的 活动记录 模型,基于第1点中描述的表。重要的是该模型扩展 gilek\gtreetable\models\TreeModel
<?php
class Tree extends \gilek\gtreetable\models\TreeModel 
{
  public static function tableName()
  {
    return 'tree';
  }
}
?>
  1. 创建新的控制器或向现有控制器添加以下操作
<?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 使用 Nested Set behavior for Yii 2 扩展,该扩展在目前(2015 年 1 月)对主元素(级别 = 0 的节点)的排序有一些限制。

在添加或移动节点作为主节点的情况下,它将位于该级别的最后一个元素之后。因此,显示的主节点的顺序可能与数据库中的映射不同。