Commit 0adc6563 by Alex-Code

sub menus didn't get checked for being active.

Based off the method in ```Menu.php``` I've updated ```Nav``` so it will check if sub menus are active or not.
parent 993963bb
...@@ -75,6 +75,10 @@ class Nav extends Widget ...@@ -75,6 +75,10 @@ class Nav extends Widget
*/ */
public $activateItems = true; public $activateItems = true;
/** /**
* @var boolean whether to activate parent menu items when one of the corresponding child menu items is active.
*/
public $activateParents = false;
/**
* @var string the route used to determine if a menu item is active or not. * @var string the route used to determine if a menu item is active or not.
* If not set, it will use the route of the current request. * If not set, it will use the route of the current request.
* @see params * @see params
...@@ -110,11 +114,37 @@ class Nav extends Widget ...@@ -110,11 +114,37 @@ class Nav extends Widget
*/ */
public function run() public function run()
{ {
$this->activateItems($this->items, $hasActiveChild);
echo $this->renderItems(); echo $this->renderItems();
BootstrapAsset::register($this->getView()); BootstrapAsset::register($this->getView());
} }
/** /**
* Check for active items adding the active class if found.
* @param array $items the items to check
* @param boolean $active does an item have an active child
*/
protected function activateItems(&$items, &$active)
{
foreach ($items as &$item) {
$hasActiveChild = false;
if (isset($item['items']) && is_array($item['items'])) {
$this->activateItems($item['items'], $hasActiveChild);
}
if (!isset($item['active'])) {
if ($this->activateParents && $hasActiveChild || $this->activateItems && $this->isItemActive($item)) {
$active = $item['active'] = true;
}
} elseif ($item['active']) {
$active = true;
}
if (ArrayHelper::remove($item, 'active', false)) {
Html::addCssClass($item['options'], 'active');
}
}
}
/**
* Renders widget items. * Renders widget items.
*/ */
public function renderItems() public function renderItems()
...@@ -151,16 +181,6 @@ class Nav extends Widget ...@@ -151,16 +181,6 @@ class Nav extends Widget
$url = ArrayHelper::getValue($item, 'url', '#'); $url = ArrayHelper::getValue($item, 'url', '#');
$linkOptions = ArrayHelper::getValue($item, 'linkOptions', []); $linkOptions = ArrayHelper::getValue($item, 'linkOptions', []);
if (isset($item['active'])) {
$active = ArrayHelper::remove($item, 'active', false);
} else {
$active = $this->isItemActive($item);
}
if ($active) {
Html::addCssClass($options, 'active');
}
if ($items !== null) { if ($items !== null) {
$linkOptions['data-toggle'] = 'dropdown'; $linkOptions['data-toggle'] = 'dropdown';
Html::addCssClass($options, 'dropdown'); Html::addCssClass($options, 'dropdown');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment