问题描述
我在 Yii2 中使用 Nav 小部件。我有一个下拉菜单作为导航菜单的一部分,但下拉菜单很长并且超出页面底部并且不滚动。为了解决这个问题,我试图将 pre-scrollable
类添加到子菜单容器中。尽我所能,我似乎无法让它发挥作用。
在 $Items
公共属性下的导航小部件 (https://www.yiiframework.com/extension/yiisoft/yii2-bootstrap/doc/api/2.0/yii-bootstrap-nav) 的 Yii 手册中,它说:
dropDownoptions: 数组,可选,将传递给的 HTML 选项 yii\bootstrap\Dropdown 小部件。
我还查看了 Dropdown 小部件 (https://www.yiiframework.com/extension/yiisoft/yii2-bootstrap/doc/api/2.0/yii-bootstrap-dropdown) 的手册页。
我的导航小部件的代码如下:
echo Nav::widget([
'options' => ['class' => 'navbar-nav ml-auto'],'items' => [
['label' => 'Home','url' => ['/site/index']],['label' => 'About','url' => ['/site/about']],[
'label' => 'Dropdown menu',//'dropDownoptions' => ['options' => ['class' => 'pre-scrollable']],//'dropDownoptions' => ['class' => 'pre-scrollable'],//'dropDownoptions' => ['submenuOptions' => ['class' => 'pre-scrollable']],//'submenuOptions' => ['class' => 'pre-scrollable'],//'submenuOptions' => ['options' => ['class' => 'pre-scrollable']],//'submenuOptions' => ['dropDownoptions' => ['class' => 'pre-scrollable']],//'dropDownoptions' => ['dropDownoptions' => ['class' => 'pre-scrollable']],//'submenuOptions' => ['submenuOptions' => ['class' => 'pre-scrollable']],//'options' => ['submenuOptions' => ['class' => 'pre-scrollable']],//'options' => ['class' => 'pre-scrollable'],//'options' => ['dropDownoptions' => ['class' => 'pre-scrollable']],'items' => [
['label' => 'Dropdown menu item 1','url' => '#'],['label' => 'Dropdown menu item 2',...
],],['label' => 'Contact','url' => ['/site/contact']],]);
注释掉的行是我尝试“将 HTML 选项传递给 yii\bootstrap\Dropdown 小部件”的一些不同方式(按绝望程度递增)。
请有人能帮我纠正一下吗?
期待中的感谢!
解决方法
选项 dropDownOptions
在 Yii 版本 2.0.11.2 和 Bootstrap v3.3.7 上测试成功:
'dropDownOptions' => ['class' => 'pre-scrollable'],
结果是包含子菜单项的附加标签类
<ul id="w4" class="pre-scrollable dropdown-menu">
如果您使用的是 yii2-bootstrap4
- 该选项显然已重命名为 dropdownOptions
。
请参阅来源中的 Nav::renderDropdown()
:
/**
* Renders the given items as a dropdown.
* This method is called to create sub-menus.
* @param array $items the given items. Please refer to [[Dropdown::items]] for the array structure.
* @param array $parentItem the parent item information. Please refer to [[items]] for the structure of this array.
* @return string the rendering result.
* @throws \Exception
*/
protected function renderDropdown($items,$parentItem)
{
/** @var Widget $dropdownClass */
$dropdownClass = $this->dropdownClass;
return $dropdownClass::widget([
'options' => ArrayHelper::getValue($parentItem,'dropdownOptions',[]),'items' => $items,'encodeLabels' => $this->encodeLabels,'clientOptions' => false,'view' => $this->getView(),]);
}