kartik-v / yii2-tree-manager
一个增强的树管理模块,使用嵌套集来选择和操作树节点。
Requires
- creocoder/yii2-nested-sets: >=0.9
- kartik-v/yii2-dialog: >=1.0
- kartik-v/yii2-widget-activeform: >=1.5.7
README
yii2-tree-manager
来自Krajee的增强型树管理模块,使用嵌套集进行树节点选择和操作。该扩展功能如下:
- 一个完整的树管理解决方案,可以管理使用嵌套集存储的分层数据。利用yii2-nested-sets扩展来管理数据库中的树结构。在开始使用此模块之前,请参阅yii2-nested-sets扩展的文档。
- 从头开始构建的树视图,没有任何第三方插件。TreeView是使用HTML5、jQuery和CSS3功能设计的,以与Yii PHP框架协同工作。
- 使用CSS3进行样式设计,包括jQuery过渡和用于ajax内容的加载部分,包括嵌入的警报,并使用bootstrap css。
- 树管理功能选项和模式
- 使用TreeView小部件作为选择器以及动态渲染的表单来编辑树节点,以查看、编辑或管理树结构。
- 该表单既是节点的详细视图,也是添加/编辑/删除节点的管理工具。
- 表单通过ajax渲染。当再次单击相同的节点时,它智能地使用缓存(除非节点已被修改)。
- 独特的管理员模式,允许对树执行管理员操作。
- 能够添加、编辑或删除树节点
- 能够重新排序树节点(向上、向下、向左或向右移动)。
- 配置树节点图标、样式,并能够在树节点中添加复选框
- 模块支持i18N翻译。
- 包括各种jQuery插件事件,用于在树操作的不同动作上触发高级用法。
- 额外功能:包括一个名为TreeViewInput的小部件,允许您将树视图用作输入小部件。TreeViewInput小部件由Krajee独特设计(使用jQuery、PHP与HTML5/CSS),看起来像一个下拉选择菜单。它允许从树中选择多个值/节点或单个值/节点。
- 一个基于yii2-nested-set模型的树模型,旨在容易扩展以适应各种用例。它包括每个树节点的预构建标志。有关更多信息,请参阅树模型文档。
- active:树节点是否处于活动状态(如果启用了软删除,则树节点将只是被停用而不是从数据库中删除)。
- selected:树节点是否默认选中。
- disabled:禁用树节点以进行编辑或重新排序。
- readonly:只读树节点,防止编辑,但可以重新排序或向上/向下移动。
- visible:树节点是否默认可见。
- collapsed:树节点是否默认折叠。
- movable_u:是否允许树节点向上移动。
- movable_d: 树节点是否允许向下移动。
- movable_l: 树节点是否允许向左移动。
- movable_r: 树节点是否允许向右移动。
- removable: 树节点是否可删除 - 如果存在子节点则不会删除。如果启用软删除,则节点将被禁用 - 否则从数据库中删除。
- removable_all: 树节点及其子节点是否可删除。如果启用软删除,则节点及其子节点将被禁用 - 否则从数据库中删除。
此模块提供了以下重要的PHP类:
- kartik\tree\Module: 模块,允许您配置模块。您必须设置一个名为
treemanager
的模块。请参考文档获取详细信息。 - kartik\tree\TreeView: 小部件,允许您以管理员模式或普通用户模式管理树,并具有添加、编辑、重新排序或删除树节点所需的动作和工具栏。
- kartik\tree\TreeViewInput: 小部件,允许您将treeview用作下拉输入,无论是单选还是多选。
- kartik\tree\models\Tree: 模型,整个树数据结构使用来自yii2-nested-sets的嵌套集行为来管理树节点。
- kartik\tree\models\TreeQuery: 查询,所需查询类,用于嵌套集模型。
- kartik\tree\controllers\NodeController: 控制器,用于管理每个节点的创建、更新、删除或重新排序(移动)的控制器操作。
演示
您可以在详细文档、API代码文档和TreeView演示或TreeViewInput演示上查看扩展的用法。
安装
安装此扩展的首选方式是通过composer。
注意:请检查此扩展的composer.json以获取此扩展的要求和依赖项。阅读此网页提示/wiki以设置应用程序的composer.json中的
minimum-stability
设置。
运行以下命令之一:
$ php composer.phar require kartik-v/yii2-tree-manager "@dev"
或者
"kartik-v/yii2-tree-manager": "@dev"
将以下内容添加到您的composer.json
文件的require
部分。
用法
步骤 1:准备数据库
创建数据库表以存储树结构。您可以通过以下方式之一完成此操作
选项 1:运行数据库迁移
您可以在yii编程控制台中运行提供的迁移脚本来创建数据库结构。
php yii migrate/up --migrationPath=@vendor/kartik-v/yii2-tree-manager/src/migrations
选项 2:执行SQL脚本
或者,您可以通过执行SQL脚本来生成您的数据库结构。复制并修改migrations/tree.sql
文件(一个MySQL示例),以创建表tbl_tree
(或您需要的任何表名)。
注意:您可以添加您需要的列到此表,但不能跳过/删除脚本中提到的任何列。如果您选择这样做,可以更改
id
、root
、lft
、rgt
、lvl
、name
、icon
、icon_type
列的名称 - 但必须在模块中相应地设置这些。
步骤 2:设置模型
创建存储树结构的模型,该模型扩展了kartik\tree\models\Tree
类。您还可以选择从yii\db\ActiveRecord
构建自己的模型,但需要修改它以使用kartik\tree\models\TreeTrait
。您必须在模型中提供表名。可选地,您可以添加规则或编辑各种方法,如isVisible
、isDisabled
等,以标识节点的允许标志。
所以,当你从 \kartik\tree\models\Tree
继承时,你可以设置如下
namespace frontend\models; use Yii; class Tree extends \kartik\tree\models\Tree { /** * @inheritdoc */ public static function tableName() { return 'tbl_tree'; } }
或者,你可以配置你的模型不继承自 kartik\tree\models\Tree
,而是实现并使用 kartik\tree\models\TreeTrait
namespace frontend\models; use Yii; class Tree extends \yii\db\ActiveRecord { use kartik\tree\models\TreeTrait; /** * @inheritdoc */ public static function tableName() { return 'tbl_tree'; } }
步骤 3:设置模块
在你的 Yii 配置文件的模块部分配置名为 treemanager
的模块。
'modules' => [ 'treemanager' => [ 'class' => '\kartik\tree\Module', // other module settings, refer detailed documentation ] ]
步骤 4:使用 TreeView 小部件
在你的视图文件中,你现在可以直接使用树视图来管理树数据,如下所示
use kartik\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 kartik\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], ]);
贡献者
代码贡献者
本项目能得以存在,要感谢所有贡献者。[贡献]
财务贡献者
成为财务贡献者,帮助我们维持社区。 [贡献]
个人
组织
使用您的组织支持此项目。您的徽标将在此处显示,并带有指向您网站的链接。[贡献]
许可证
yii2-tree-manager 在 BSD-3-Clause 许可证下发布。请参阅附带的 LICENSE.md
文件以获取详细信息。