itstructure / yii2-multi-level-menu
用于渲染 Yii2 框架多级菜单的 Widget
3.2.9
2023-01-30 13:47 UTC
Requires
- php: >=7.1.0
- yiisoft/yii2: 2.*
README
简介
此 Widget 旨在显示多级菜单,其中可以嵌套子菜单。适用于 Yii2 框架。
Widget 使用来自 数据库 的数据,其中除了主键外,还有父键。
来自 数据库 的数据来自一个活动的模型,该模型是 yii\db\ActiveRecord 的实例。
要求
- php >= 7.1
- composer
安装
通过 composer
composer require itstructure/yii2-multi-level-menu ~3.2.9
使用方法
在视图模板中的使用
基础应用程序配置必须如下所示
use Itstructure\MultiLevelMenu\MenuWidget;
echo MenuWidget::widget([ 'menuId' => 'multi-level-menu', 'data' => array_values($dataProvider->getModels()), 'itemTemplate' => '@app/views/MultiLevelMenu/main.php' ]);
itemTemplate
文件的示例
use yii\helpers\{Url, Html}; /* @var app\models\Page $data */
<span> <?php echo Html::a( Html::encode($data->title), Url::to(['view', 'id' => $data->id]) ) ?> </span>
当嵌套级别有一些属性时示例
use Itstructure\MultiLevelMenu\MenuWidget;
echo MenuWidget::widget([ 'menuId' => 'multi-level-menu', 'data' => array_values($dataProvider->getModels()), 'itemTemplate' => '@app/views/MultiLevelMenu/main.php' 'mainContainerOptions' => [ 'class' => 'list-group' ], 'itemContainerOptions' => [ 'levels' => [ ['class' => 'list-group-item'], ['class' => 'list-group-item list-group-item-success'], ['class' => 'list-group-item list-group-item-warning'], ] ], ]);
当有一些属性作为可调用的函数时示例
use Itstructure\MultiLevelMenu\MenuWidget;
echo MenuWidget::widget([ 'menuId' => 'multi-level-menu', 'data' => array_values($dataProvider->getModels()), 'itemTemplate' => '@app/views/MultiLevelMenu/main.php' 'mainContainerOptions' => function () { return [ 'class' => $level == 0 ? 'nav navbar-nav navbar-right' : 'dropdown-menu' ]; }, 'itemTemplateParams' => function ($level, $item) { return [ 'linkOptions' => isset($item['items']) && count($item['items']) > 0 ? [ 'class' => 'dropdown-toggle', 'data-toggle' => 'dropdown', 'aria-haspopup' => 'true', 'aria-expanded' => 'false', ] : [], ]; }, 'itemContainerOptions' => function ($level, $item) { return $level == 0 ? [ 'class' => isset($item['items']) && count($item['items']) > 0 ? 'nav-item dropdown' : 'nav-item' ] : [ 'class' => isset($item['items']) && count($item['items']) > 0 ? 'dropdown-item dropdown' : 'dropdown-item' ]; } ]);
数据库表结构示例
表 "pages"
| id | parentId | title | ... |
|-----|----------|------------|-----|
| 1 | NULL | item 1 | ... |
| 2 | NULL | item 2 | ... |
| 3 | NULL | item 3 | ... |
| 4 | NULL | item 4 | ... |
| 5 | NULL | item 5 | ... |
| 6 | 2 | item 2.1 | ... |
| 7 | 2 | item 2.2 | ... |
| 8 | 7 | item 2.2.1 | ... |
| 9 | 7 | item 2.2.2 | ... |
| 10 | 7 | item 2.2.3 | ... |
| ... | ... | ... | ... |
许可协议
版权 © 2018-2023 Andrey Girnik girnikandrey@gmail.com.
在 MIT 许可协议 下发布。有关详细信息,请参阅 LICENSE.txt。