diff --git a/src/View/Helper/BootstrapHtmlHelper.php b/src/View/Helper/BootstrapHtmlHelper.php index 2632ea1..ba4c785 100644 --- a/src/View/Helper/BootstrapHtmlHelper.php +++ b/src/View/Helper/BootstrapHtmlHelper.php @@ -316,9 +316,14 @@ public function dropdown (array $menu = [], array $options = []) { } $name = array_shift($action) ; $url = array_shift($action) ; + $li_options = ['role' => 'presentation']; + if (array_key_exists('_options', $action)) { + $li_options += $action['_options']; + unset($action['_options']); + } $action['role'] = 'menuitem' ; $action['tabindex'] = -1 ; - $output .= '
  • '.$this->link($name, $url, $action).'
  • '; + $output .= $this->tag('li', $this->link($name, $url, $action), $li_options); } } else { @@ -333,6 +338,61 @@ public function dropdown (array $menu = [], array $options = []) { return $this->tag($tag, $output, $options) ; } + public function navbarNav(array $menu = [], array $options = []) { + $output = ''; + foreach ($menu as $item => $submenu) { + if ($item === 'divider' || (is_array($item) && $item[0] === 'divider')) { + $output .= '' ; + } + elseif (is_array($submenu)) { + $dropdown_options = ['tag' => 'ul']; + $link_options = [ + 'data-toggle' => 'dropdown', + 'role' => 'button', + 'aria-haspopup' => 'true', + 'aria-expanded' => 'false' + ]; + $li_options = ['caret' => true]; + if (array_key_exists('_options', $submenu) && is_array($submenu['_options'])) { + if (array_key_exists('dropdown', $submenu['_options'])) { + $dropdown_options += $submenu['_options']['dropdown']; + $dropdown_options = $this->addClass($dropdown_options, 'dropdown-menu'); + } + if (array_key_exists('link', $submenu['_options'])) { + $link_options += $submenu['_options']['link']; + $link_options = $this->addClass($link_options, 'dropdown-toggle'); + } + if (array_key_exists('li', $submenu['_options'])) { + $li_options += $submenu['_options']['li']; + } + unset($submenu['_options']); + } + + $caret = ''; + if ($li_options['caret'] === TRUE) { + $caret = ' '; + } elseif ($li_options['caret'] === FALSE) { + $caret = ''; + } else { + $caret = $li_options['caret']; + } + unset($li_options['caret']); + + $output .= $this->tag( + 'li', + $this->link($item.$caret, '#', $link_options). + $this->dropdown($submenu, $dropdown_options), + $li_options + ); + } + else { + $output .= '
  • '.$submenu.'
  • ' ; + } + } + $options = ['tag' => 'ul', 'class' => 'nav navbar-nav'] + $options; + return $this->tag($options['tag'], $output, $options); + } + /** * Create a formatted collection of elements while * maintaining proper bootstrappy markup. Useful when