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%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