Calculation of activity menu item through the closure

Extended documentation
This commit is contained in:
voskobovich
2015-12-28 13:01:12 +02:00
committed by SilverFire - Dmitry Naumenko
parent 8d813f7bf1
commit 4afbad1aae

View File

@ -60,7 +60,8 @@ class Menu extends Widget
* otherwise, [[labelTemplate]] will be used. * otherwise, [[labelTemplate]] will be used.
* - visible: boolean, optional, whether this menu item is visible. Defaults to true. * - visible: boolean, optional, whether this menu item is visible. Defaults to true.
* - items: array, optional, specifies the sub-menu items. Its format is the same as the parent items. * - items: array, optional, specifies the sub-menu items. Its format is the same as the parent items.
* - active: boolean, optional, whether this menu item is in active state (currently selected). * - active: boolean or closure that returns boolean, optional, whether this menu item is in active state (currently selected).
* When using a closure, its signature should be `function ($item, $hasActiveChild, $widget)`.
* If a menu item is active, its CSS class will be appended with [[activeCssClass]]. * If a menu item is active, its CSS class will be appended with [[activeCssClass]].
* If this option is not set, the menu item will be set active automatically when the current request * If this option is not set, the menu item will be set active automatically when the current request
* is triggered by `url`. For more details, please refer to [[isItemActive()]]. * is triggered by `url`. For more details, please refer to [[isItemActive()]].
@ -285,6 +286,8 @@ class Menu extends Widget
} else { } else {
$items[$i]['active'] = false; $items[$i]['active'] = false;
} }
} elseif ($item['active'] instanceof \Closure) {
$active = $items[$i]['active'] = call_user_func($item['active'], $item, $hasActiveChild, $this);
} elseif ($item['active']) { } elseif ($item['active']) {
$active = true; $active = true;
} }