有条件地显示 Nav 小部件的项目
Conditionally show items of Nav widget
我想为菜单项添加一个条件,这样当用户登录时,他将看到取决于他 user_type
的菜单。这是我的代码。
Nav::widget([
'encodeLabels' => false,
'options' => ['class' => 'sidebar-menu'],
'items' => [
// I want to insert condition here
[
'label' => '<span class="fa fa-fw fa-globe"></span> Menu1',
'url' => ['/menu1'],
],
[
'label' => '<span class="fa fa-fw fa-list-alt"></span> Menu2',
'url' => ['/menu2'],
],
]);
一些用户可以访问 menu1
,而其他用户只能访问 menu2
。
1) 单件使用 visible
属性(信息可用 here):
[
'label' => '<span class="fa fa-fw fa-globe"></span> Menu1',
'url' => ['/menu1'],
'visible' => $condition,
],
2) 作为替代方案,您可以在呈现小部件之前构建数组,并根据条件有条件地包含/排除某些数组项。
$items = [];
if ($condition) {
$items[] = ...
} else {
...
}
echo Nav::widget([
'items' => $items,
]);
例如,请参阅 advanced template frontend layout 中菜单项的构成方式。
我通过扩展 Nav class,使用自己的访问检查功能做了这样的事情。
class AccessNav extends Nav
{
public function renderItem($item)
{
$url = ArrayHelper::getValue($item, 'url', '#');
if( PermissionManager::checkAccessByUrl($url))
{
return parent::renderItem($item);
}
}
}
我想为菜单项添加一个条件,这样当用户登录时,他将看到取决于他 user_type
的菜单。这是我的代码。
Nav::widget([
'encodeLabels' => false,
'options' => ['class' => 'sidebar-menu'],
'items' => [
// I want to insert condition here
[
'label' => '<span class="fa fa-fw fa-globe"></span> Menu1',
'url' => ['/menu1'],
],
[
'label' => '<span class="fa fa-fw fa-list-alt"></span> Menu2',
'url' => ['/menu2'],
],
]);
一些用户可以访问 menu1
,而其他用户只能访问 menu2
。
1) 单件使用 visible
属性(信息可用 here):
[
'label' => '<span class="fa fa-fw fa-globe"></span> Menu1',
'url' => ['/menu1'],
'visible' => $condition,
],
2) 作为替代方案,您可以在呈现小部件之前构建数组,并根据条件有条件地包含/排除某些数组项。
$items = [];
if ($condition) {
$items[] = ...
} else {
...
}
echo Nav::widget([
'items' => $items,
]);
例如,请参阅 advanced template frontend layout 中菜单项的构成方式。
我通过扩展 Nav class,使用自己的访问检查功能做了这样的事情。
class AccessNav extends Nav
{
public function renderItem($item)
{
$url = ArrayHelper::getValue($item, 'url', '#');
if( PermissionManager::checkAccessByUrl($url))
{
return parent::renderItem($item);
}
}
}