simialbi / yii2-nestable
Yii 2.0 的嵌套集行为实现。
3.1.0
2022-08-10 09:15 UTC
Requires
- php: >=7.3
- creocoder/yii2-nested-sets: *
- simialbi/yii2-simialbi-base: >=0.13.1 | ^1.0.0
- yiisoft/yii2: ~2.0
- yiisoft/yii2-jui: ~2.0
README
使用 jQuery.nestable 插件和基于 nestedSortable jQuery 插件的实现,为 Yii 2 实现嵌套集行为。
- nestedSortable jQuery 插件
- Nested Sets Behavior for Yii 2
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一
$ php composer.phar require simialbi/yii2-nestable "~3.0"
或
"simialbi/yii2-nestable": "~3.0"
将以下内容添加到您的 composer.json
文件的 require
部分。
使用方法
请确保您已正确地将 NestedSetsBehavior (creocoder/yii2-nested-sets) 绑定到您的模型。
然后,在您的视图中渲染小部件。一个高级示例可能如下所示
<?php use simialbi\yii2\nestable\widgets\Nestable; use yii\helpers\Url; use yii\web\JsExpression; echo Nestable::widget([ 'items' => [ [ 'content' => '<div><a href="#test">My Item</a><span class="handle"></span></div>', 'options' => ['class' => 'list-group-item'], 'listOptions' => ['class' => 'list-group'], 'items' => [ [ 'content' => '<div><a href="#testChild">My Child Item</a><span class="handle"></span></div>', 'options' => ['class' => 'list-group-item'] ] ] ], [ 'content' => '<div><a href="#test2">My Item 2</a><span class="handle"></span></div>', 'options' => ['class' => 'list-group-item'], 'listOptions' => ['class' => 'list-group'] ] ], 'clientOptions' => [ 'expandOnHover' => 700, 'forcePlaceholderSize' => true, 'handle' => '.handle', 'isTree' => true, 'items' => 'li', 'placeholder' => 'placeholder', 'startCollapsed' => true, 'toleranceElement' => '> div', // this js event will be called on change order of list 'relocate' => new JsExpression('function (evt, ui) { var context = null; var method = \'root\'; var parent = ui.item.parent(\'ul\').parent(\'.list-group-item\'); if (ui.item.prev(\'.list-group-item\').length) { if (parent.length) { method = \'after\'; } context = ui.item.prev(\'.list-group-item\').data(\'id\'); } else if (ui.item.next(\'.list-group-item\').length) { if (parent.length) { method = \'before\'; } context = ui.item.next(\'.list-group-item\').data(\'id\'); } else if (parent.length) { method = \'prepend\'; context = ui.item.parent(\'ul\').parent(\'.list-group-item\').data(\'id\'); } jQuery.ajax({ url: \''.Url::to(['site/my']).'/\' + method, data: { id: ui.item.data(\'id\'), context: context } }); }') ] ]); ?>
您的控制器应该如下所示
<?php namespace app\controllers; use yii\web\Controller; /** * This controller provides move actions */ class MyController extends Controller { /** * @inheritdoc */ public function actions() { return [ 'root' => [ 'class' => 'simialbi\yii2\nestable\actions\RootAction', 'modelClass' => 'simialbi\yii2\nestable\models\ActiveRecord' ], 'after' => [ 'class' => 'simialbi\yii2\nestable\actions\AfterAction', 'modelClass' => 'simialbi\yii2\nestable\models\ActiveRecord' ], 'before' => [ 'class' => 'simialbi\yii2\nestable\actions\BeforeAction', 'modelClass' => 'simialbi\yii2\nestable\models\ActiveRecord' ], 'prepend' => [ 'class' => 'simialbi\yii2\nestable\actions\PrependAction', 'modelClass' => 'simialbi\yii2\nestable\models\ActiveRecord' ], 'append' => [ 'class' => 'simialbi\yii2\nestable\actions\AppendAction', 'modelClass' => 'simialbi\yii2\nestable\models\ActiveRecord' ] ]; } }
许可协议
yii2-nestable 在 MIT 许可下发布。有关详细信息,请参阅捆绑的 LICENSE。