igorkri/yii2-tree-manager

一个增强型树管理模块,使用嵌套集进行树节点选择和处理。

安装: 16

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 0

开放性问题: 0

类型:yii2-extension

dev-main 2023-06-08 09:32 UTC

This package is auto-updated.

Last update: 2024-09-08 12:11:47 UTC


README

$ composer require igorkri/yii2-tree-manager "~1.0.0"

或添加

"igorkri/yii2-tree-manager": "~1.0.0"

到你的 composer.json 文件的 require 部分。

用法

步骤 1:准备数据库

创建一个数据库表来存储树结构。你可以通过以下方式之一实现

选项 1:运行数据库迁移

你可以在 Yii 程序控制台中运行提供的迁移脚本,以从数据库中创建结构

php yii migrate/up --migrationPath=@vendor/igorkri/yii2-tree-manager/src/migrations

选项 2:执行 SQL 脚本

或者,你可以执行 SQL 脚本来生成你的数据库结构。复制并修改 migrations/tree.sql 文件(一个 MySQL 示例),以创建 tbl_tree 表(或任何你需要的表名)。

注意:你可以向此表添加需要的列,但不能跳过/删除脚本中提到的任何列。如果你选择重命名 idrootlftrgtlvlnameiconicon_type 列,你可以选择在模块中相应地设置这些列。

或者,你可以配置你的模型不扩展自 igorkri\tree\models\Tree,而是实现并使用 igorkri\tree\models\TreeTrait

namespace frontend\models;

use Yii;

class Tree extends \yii\db\ActiveRecord
{
    use igorkri\tree\models\TreeTrait;

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'tbl_tree';
    }    
}

步骤 3:设置模块

在你的 Yii 配置文件的模块部分配置名为 treemanager 的模块。

'modules' => [
   'treemanager' =>  [
        'class' => '\igorkri\tree\Module',
        // other module settings, refer detailed documentation
    ]
]

步骤 4:使用 TreeView 小部件

在你的视图文件中,你现在可以直接使用树视图来管理树数据,如下所示

use igorkri\tree\TreeView;
echo TreeView::widget([
    // single query fetch to render the tree
    'query'             => Tree::find()->addOrderBy('root, lft'), 
    'headingOptions'    => ['label' => 'Categories'],
    'isAdmin'           => false,                       // optional (toggle to enable admin mode)
    'displayValue'      => 1,                           // initial display value
    //'softDelete'      => true,                        // normally not needed to change
    //'cacheSettings'   => ['enableCache' => true]      // normally not needed to change
]);

步骤 5:使用 TreeViewInput 小部件

如果你希望使用树输入来选择树项,你可以使用 TreeViewInput 小部件,如下所示。通常你会使用它作为设置 asDropdown 属性为 true 的下拉列表。如果将 asDropdown 设置为 false,则树视图输入小部件将作为内联选择渲染。

use igorkri\tree\TreeViewInput;
echo TreeViewInput::widget([
    // single query fetch to render the tree
    'query'             => Tree::find()->addOrderBy('root, lft'), 
    'headingOptions'    => ['label' => 'Categories'],
    'name'              => 'kv-product',    // input name
    'value'             => '1,2,3',         // values selected (comma separated for multiple select)
    'asDropdown'        => true,            // will render the tree input widget as a dropdown.
    'multiple'          => true,            // set to false if you do not need multiple selection
    'fontAwesome'       => true,            // render font awesome icons
    'rootOptions'       => [
        'label' => '<i class="fa fa-tree"></i>', 
        'class'=>'text-success'
    ],                                      // custom root label
    //'options'         => ['disabled' => true],
]);