andipas/yii2-gtreetable

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

安装: 8

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 23

类型:yii2-extension

v1.1.1-alpha 2015-03-04 11:37 UTC

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

  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 使用 针对 Yii 2 的嵌套集行为扩展,截至目前(2015 年 1 月),在关于主元素(级别 = 0 的节点)排序方面存在一些限制

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