想象一下,你正在开发一个复杂的企业级yii2应用,需要一个功能丰富、层级清晰的导航菜单。用户希望能够通过主菜单进入二级子菜单,甚至三级子菜单,以便快速访问特定功能模块。然而,当你开始着手实现时,很快就会发现原生的bootstrap 4下拉菜单在处理多级嵌套时显得力不从心。
我遇到的难题:原生Bootstrap 4下拉菜单的局限
最初,我尝试使用Yii2自带的
yii\bootstrap4\Nav
yii\bootstrap4\NavBar
这意味着我需要:
div
ul
这不仅耗费了大量宝贵的开发时间,而且代码变得臃肿、难以维护,稍有不慎就可能引入UI上的Bug。我急需一个更优雅、更高效的解决方案。
Composer:我的救星,引入 kartik-v/yii2-bootstrap4-dropdown
正当我为此焦头烂额时,我突然想到了Composer——PHP的依赖管理工具。我决定去Packagist上搜索是否有针对Yii2和Bootstrap 4的增强型下拉菜单扩展。果然,我找到了
kartik-v/yii2-bootstrap4-dropdown
这个扩展由著名的Yii2扩展开发者 Kartik Visweswaran 维护,它专门为Yii2框架增强了Bootstrap 4.x的下拉菜单功能,最吸引我的就是它对嵌套子菜单的完美支持。
通过Composer安装它简直是小菜一碟:
<pre class="brush:php;toolbar:false;">$ php composer.phar require kartik-v/yii2-bootstrap4-dropdown "@dev"
或者直接在你的
composer.json
<pre class="brush:php;toolbar:false;">"kartik-v/yii2-bootstrap4-dropdown": "@dev"
然后运行
composer update
如何使用 kartik-v/yii2-bootstrap4-dropdown
安装完成后,集成到我的Yii2应用中变得异常简单。
kartik-v/yii2-bootstrap4-dropdown
Dropdown
以下是几种常见的用法,展示了它是如何轻松实现多级导航的:
1. 在NavBar中集成多级下拉菜单
这是最常见的场景,将多级菜单集成到应用的顶部导航栏中。只需在
Nav::widget
dropdownClass
Dropdown::classname()
<pre class="brush:php;toolbar:false;">use yii\bootstrap4\NavBar;
use yii\bootstrap4\Nav;
use kartik\bs4dropdown\Dropdown; // 注意这里引入的是 kartik 的 Dropdown
use yii\helpers\Html;
NavBar::begin(['brandLabel' => '我的应用']);
echo Nav::widget([
'items' => [
['label' => '首页', 'url' => ['/site/index']],
[
'label' => '产品中心', // 一级菜单
'items' => [
['label' => '产品分类 A', 'url' => '/products/category-a'],
['label' => '产品分类 B', 'url' => '#'],
[
'label' => '更多产品', // 二级菜单
'items' => [
['label' => '子产品 3.1', 'url' => '/products/sub-3-1'],
['label' => '子产品 3.2', 'url' => '#'],
[
'label' => '高级选项', // 三级菜单
'items' => [
['label' => '选项 3.3.1', 'url' => '/advanced/option-1'],
['label' => '选项 3.3.2', 'url' => '#'],
],
],
],
],
],
],
['label' => '关于我们', 'url' => ['/site/about']],
],
'dropdownClass' => Dropdown::classname(), // 使用 kartik 的自定义下拉菜单
'options' => ['class' => 'navbar-nav mr-auto'],
]);
NavBar::end();2. 独立的多级下拉按钮
如果你需要在页面中的任何位置创建一个独立的、带有多级子菜单的下拉按钮,也可以直接使用
Dropdown::widget()
<pre class="brush:php;toolbar:false;"><?php
use \yii\helpers\Html;
use kartik\bs4dropdown\Dropdown;
?>
<div class="dropdown">
<?php
echo Html::button('操作菜单', [
'id' => 'actionMenuButton',
'class' => 'btn btn-primary dropdown-toggle', // 使用 btn-primary 让按钮更显眼
'data-toggle' => 'dropdown',
'aria-haspopup' => 'true',
'aria-expanded' => 'false'
]);
echo Dropdown::widget([
'items' => [
['label' => '编辑', 'url' => '/item/edit'],
['label' => '删除', 'url' => '#'],
[
'label' => '更多操作',
'items' => [
['label' => '导出数据', 'url' => '/item/export'],
['label' => '打印报告', 'url' => '#'],
[
'label' => '高级设置',
'items' => [
['label' => '设置项 A', 'url' => '/settings/a'],
['label' => '设置项 B', 'url' => '#'],
],
],
],
],
],
'options' => ['aria-labelledby' => 'actionMenuButton']
]);
?>
</div>3. 使用 ButtonDropdown
kartik-v/yii2-bootstrap4-dropdown
ButtonDropdown
<pre class="brush:php;toolbar:false;">use \yii\helpers\Html;
use kartik\bs4dropdown\ButtonDropdown;
echo ButtonDropdown::widget([
'label' => '快捷入口',
'dropdown' => [
'items' => [
['label' => '我的账户', 'url' => '/profile'],
['label' => '消息中心', 'url' => '#'],
[
'label' => '系统管理',
'items' => [
['label' => '用户管理', 'url' => '/admin/users'],
['label' => '角色权限', 'url' => '#'],
[
'label' => '日志查看',
'items' => [
['label' => '操作日志', 'url' => '/admin/logs/op'],
['label' => '错误日志', 'url' => '#'],
],
],
],
],
],
],
'buttonOptions' => ['class'=>'btn-info'] // 可以自定义按钮样式
]);通过这些例子,可以看到
kartik-v/yii2-bootstrap4-dropdown
items
items
优势总结与实际应用效果
使用
kartik-v/yii2-bootstrap4-dropdown
总而言之,
kartik-v/yii2-bootstrap4-dropdown
以上就是如何解决Yii2中Bootstrap4多级下拉菜单的复杂实现问题,使用kartik-v/yii2-bootstrap4-dropdown让导航更灵活的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号