An enhanced tree management module from Krajee with tree node selection and manipulation using nested sets. The extension features are listed below:
The following important PHP classes are available with this module:
treemanager
. Refer documentation for details. You can see detailed documentation, API Code Documentation and TreeView demonstration or TreeViewInput demonstration on usage of the extension.
The preferred way to install this extension is through composer.
NOTE: Check the composer.json for this extension's requirements and dependencies. Read this web tip /wiki on setting the
minimum-stability
settings for your application's composer.json.
Either run
$ php composer.phar require kartik-v/yii2-tree-manager "@dev"
or add
"kartik-v/yii2-tree-manager": "@dev"
to the require
section of your composer.json
file.
Create your database table to store the tree structure. You can do it in one of the following ways:
You can run the migrations script provided to create the database structure from your yii programming console:
php yii migrate/up --migrationPath=@vendor/kartik-v/yii2-tree-manager/src/migrations
Alternatively, you can execute the SQL script to generate your DB structure. Copy and modify the migrations/tree.sql
file (a MySQL example), to create the table tbl_tree
(or for any table name you need).
NOTE: You can add columns you need to this table, but you cannot skip/drop any of the columns mentioned in the script. You can choose to rename the
id
,root
,lft
,rgt
,lvl
,name
,icon
,icon_type
columns if you choose to - but these must be accordingly setup in the module.
Create your model for storing the tree structure extending kartik\tree\models\Tree
class. You can alternatively build your own model extending from yii\db\ActiveRecord
but modify it to use the kartik\tree\models\TreeTrait
. You must provide the table name in the model. Optionally you can add rules, or edit the various methods like isVisible
, isDisabled
etc. to identify allowed flags for nodes.
So when extending from the \kartik\tree\models\Tree
, you can set it like below:
namespace frontend\models;
use Yii;
class Tree extends \kartik\tree\models\Tree
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'tbl_tree';
}
}
Alternatively, you can configure your model to not extend from kartik\tree\models\Tree
and instead implement and use the 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';
}
}
Configure the module named treemanager
in the modules section of your Yii configuration file.
'modules' => [
'treemanager' => [
'class' => '\kartik\tree\Module',
// other module settings, refer detailed documentation
]
]
In your view files, you can now use the tree view directly to manage tree data as shown below:
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
]);
If you wish to use the tree input to select tree items, you can use the TreeViewInput widget as shown below. Normally you would use this as a dropdown with the asDropdown
property set to true
. If asDropdown
is set to false
, the treeview input widget will be rendered inline for selection.
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],
]);
This project exists thanks to all the people who contribute. [Contribute].
Become a financial contributor and help us sustain our community. [Contribute]
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
yii2-tree-manager is released under the BSD-3-Clause License. See the bundled LICENSE.md
for details.
yii2-tree-manager
Date: 04-Mar-2022
iconEditSettings['show']
._iconPrefix
to iconPrefix
and make it public.Date: 13-Mar-2021
BS_HIDE
within bsCssMap
.treeview:
.hideCssClass
.Date: 29-Nov-2018
nodeViewParams
.noNodesMessage
setting during tree manage.Date: 03-Oct-2018
Date: 13-Sep-2018
TreeSecurity
helper class (BC Breaking).TreeView::allowNewRoots
.TreeView::nodeButtonLabels
to configure submit and reset button icons/labels.child-allowed
to control children being added for certain nodes.src
folder as per yii standards.TreeView::nodeViewParams
for setting additional (or overriding) parameters to the nodeView
.kv-tree.min.js
.treeEncryptSalt
parsing without using session dependencies.NodeController
to perform safe extraction of post parameters.TreeView::showNameAttribute
to hide/show name attribute in form.Date: 29-Apr-2017
alwaysDisabled
setting within toolbar
buttons config to force disable the button (which will never become enabled).hideUnmatchedSearchItems
(defaults to true) that will intelligently hide nodes/node groups that do not have any matching nodes.TreeTrait::removeNode
.VIEW_PART_5
rendering.Date: 15-Jan-2017
treeview.selected
after node detail form is rendered.NodeController
actions security for console apps.NodeController::checkSignature
.kartik-v/yii2-dialog
in composer.cascadeSelectChildren
to control child nodes selection when parent node is selected.Date: 16-Dec-2016
Module::treeEncryptSalt
available to generate a stateless hashed signature.treeEncryptSalt
is not set, it will be randomly generated and stored in a session variable.yii\base\Security::hashData
and yii\base\Security::validateData
.nodeSelected
session identifier for every TreeView widget instance.dev-master
updates.TreeViewInput::autoCloseOnSelect
.Date: 28-Dec-2015
movable
node validations.Date: 13-Dec-2015
move
, remove
, and select
.tree
).keyAttribute
to parse node key.Date: 22-Jun-2015
TreeTrait
to Tree
model.multiple
is false
.Tree
model to use a TreeTrait
.beforeSend
ajax request in events.formOptions
correctly for new root creation.Date: 22-May-2015
treeAttribute
by setting it to false
.Date: 11-May-2015
TreeView::nodeFormOptions
to control HTML attributes for form.move left
when the parent is root.TreeView::showIDAttribute
to hide/show key attribute in form.Tree
model.Tree
model.Date: 21-Apr-2015
Model
class in TreeViewInput
.nodeAddlViews
.$_POST
to boolean.Tree::activateNode
and Tree::removeNode
Comments