parent
00447488ee
commit
1fb5c96ef1
|
@ -109,6 +109,7 @@ class Navigation implements ArrayAccess, Countable, IteratorAggregate
|
|||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
$this->order();
|
||||
return new ArrayIterator($this->items);
|
||||
}
|
||||
|
||||
|
@ -269,6 +270,40 @@ class Navigation implements ArrayAccess, Countable, IteratorAggregate
|
|||
return new RecursiveNavigationRenderer($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Order this navigation's items
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function order()
|
||||
{
|
||||
uasort($this->items, array($this, 'compareItems'));
|
||||
foreach ($this->items as $item) {
|
||||
if ($item->hasChildren()) {
|
||||
$item->getChildren()->order();
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether the first item is less than, more than or equal to the second one
|
||||
*
|
||||
* @param NavigationItem $a
|
||||
* @param NavigationItem $b
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
protected function compareItems(NavigationItem $a, NavigationItem $b)
|
||||
{
|
||||
if ($a->getPriority() === $b->getPriority()) {
|
||||
return strcasecmp($a->getLabel(), $b->getLabel());
|
||||
}
|
||||
|
||||
return $a->getPriority() > $b->getPriority() ? 1 : -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge this navigation with the given one
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue