carl/yii2-gtreetable

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

dev-master 2016-11-18 09:09 UTC

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

  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. 创建新的 active record 模型,基于第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 (字符串) - 指定在树容器上的 jQuery 选择器(<table> 标签)。当参数设置为 null 时,将自动创建表格。默认为 null

限制

Yii2-GTreeTable 使用 Nested Set behavior for Yii 2 扩展,目前(2015 年 1 月)在主元素(级别 = 0 的节点)排序方面有一些限制。

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