我正在使用Yii2 Menu widget。这是我的菜单
echo Menu::widget([
'items' => [
'label' => 'Products',
'url' => '/products' // Not working.
'items' => [
[
'label' => 'New Products',
'url' => '/new-products'
]
]
]
]);
但是当用户单击Products时,URL /products
不起作用,那么菜单必须打开(它可以工作)并且还打开URL /products
(它不起作用)。
指定菜单项的URL时,即使使用默认操作,也必须以
controller/action
的形式指定它们,而不仅仅是/controller
。
在注释的第一个示例代码中,这是在类引用Note
中作为yii-widgets-menu
写在顶部。
因此,将Products
项目的网址更改为
'url' => '/products/index'
还有new-products
'url' => '/products/new-products'
希望能帮助到你。
注意:当您指定/controller/action
之类的网址时,它会将其添加到baseUrl或域名,之后删除所有内容。比如,如果你有域名http://example.com
,你在页面http://example.com/contact-us
。它将替换域名后的所有内容并添加指定的http://example.com/controller/action
,如果提供的菜单项URL如controller/action
,则单击它会将其附加到现有URL http://example.com/contact-us/controller/action
。
您不能指望单击“产品”项目将打开子菜单并重定向到/products
页面。它没有任何意义,因为在您有机会点击子菜单中的某些内容之前,您将被重定向到不同的页面。这就是点击“产品”只显示子菜单下拉列表的原因。但这个链接确实有效 - 尝试使用鼠标中键或在浏览器中禁用javascript。
在您的情况下,您应该将菜单定义为:
echo Menu::widget([
'items' => [
'label' => 'Products',
'url' => '/products'
'items' => [
[
'label' => 'All Products',
'url' => '/products'
],
[
'label' => 'New Products',
'url' => '/new-products'
],
]
]
]);
所有导航链接都应位于子菜单中。