From cbc374e6193ba81e393a69b03c1810c15c529b2d Mon Sep 17 00:00:00 2001 From: Grant Date: Mon, 17 Feb 2014 02:43:51 -0600 Subject: [PATCH] Added extra attribute fields for additional styling. --- .../View/Helper/NavigationMenu.php | 20 ++++++-- .../View/Helper/NavigationMenuOptions.php | 48 +++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/SpiffyNavigation/View/Helper/NavigationMenu.php b/src/SpiffyNavigation/View/Helper/NavigationMenu.php index 3060850..aeae27f 100644 --- a/src/SpiffyNavigation/View/Helper/NavigationMenu.php +++ b/src/SpiffyNavigation/View/Helper/NavigationMenu.php @@ -40,6 +40,7 @@ public function renderMenu($container = null, array $options = array()) $prevDepth = -1; foreach($iterator as $page) { $depth = $iterator->getDepth(); + $pageAttributes = $page->getAttributes(); if ($depth == $options->getMinDepth()) { $prevDepth = $depth; @@ -47,7 +48,12 @@ public function renderMenu($container = null, array $options = array()) } if ($depth > $prevDepth) { - $html .= sprintf('', $prevDepth == $options->getMinDepth() ? ' class="' . $options->getUlClass() .'"' : ''); + if ($prevDepth == $options->getMinDepth()) { + $ulId = $options->getUlId() ? ' id="' . $options->getUlId() . '"' : ''; + $html .= sprintf('', ' class="' . $options->getUlClass() . '"' . $ulId); + } else { + $html .= sprintf('', $options->getUlSubClass() ? ' class="' . $options->getUlSubClass() . '"' : ''); + } } elseif ($prevDepth > $depth) { for ($i = $prevDepth; $i > $depth; $i--) { $html .= ''; @@ -58,8 +64,14 @@ public function renderMenu($container = null, array $options = array()) $html .= ''; } - $liClass = $this->navigation->isActive($page) ? ' class="' . $options->getActiveClass() . '"' : ''; - $html .= sprintf('%s', $liClass, $this->htmlify($page)); + if ($this->navigation->isActive($page)) { + $liExtraClass = isset($pageAttributes['liClass']) ? $pageAttributes['liClass'] : ''; + $liClass = ' class="' . $options->getActiveClass() . ' ' . $liExtraClass . '"'; + } else { + $liClass = isset($pageAttributes['liClass']) ? ' class="' . $pageAttributes['liClass'] . '"' : ''; + } + + $html .= sprintf('%s', $liClass, $this->htmlify($page)); $prevDepth = $depth; } @@ -151,6 +163,8 @@ protected function htmlify(Page $page) $element = 'span'; } + unset($attribs['liClass']); + return sprintf('<%s%s>%s', $element, $this->htmlAttribs($attribs), $label, $element); } } \ No newline at end of file diff --git a/src/SpiffyNavigation/View/Helper/NavigationMenuOptions.php b/src/SpiffyNavigation/View/Helper/NavigationMenuOptions.php index 5bd646e..27dd60f 100644 --- a/src/SpiffyNavigation/View/Helper/NavigationMenuOptions.php +++ b/src/SpiffyNavigation/View/Helper/NavigationMenuOptions.php @@ -27,6 +27,18 @@ class NavigationMenuOptions extends AbstractOptions */ protected $ulClass = 'nav'; + /** + * Attribute id of the base ul element. + * @var string + */ + protected $ulId = ''; + + /** + * Class of the sub ul element. + * @var string + */ + protected $ulSubClass = ''; + /** * @param string $ulClass * @return NavigationMenu @@ -45,6 +57,42 @@ public function getUlClass() return $this->ulClass; } + /** + * @param string $ulId + * @return NavigationMenu + */ + public function setUlId($ulId) + { + $this->ulId = $ulId; + return $this; + } + + /** + * @return string + */ + public function getUlId() + { + return $this->ulId; + } + + /** + * @param string $ulSubClass + * @return NavigationMenu + */ + public function setUlSubClass($ulSubClass) + { + $this->ulSubClass = $ulSubClass; + return $this; + } + + /** + * @return string + */ + public function getUlSubClass() + { + return $this->ulSubClass; + } + /** * @param $minDepth * @return NavigationMenu