Вам придется проверить последний элемент отдельно.
длилZend_View_Helper_Navigation_Menu
и он используетRecursiveIteratorIterator
перебирать дерево меню. То, что я хочу иметь возможность определить, нахожусь ли я на первом или последнем элементе для уровня ветви в дереве.
Вот пример того, что я ищу:
Нав 1 (первый)Nav 1.1 (первый и последний)Nav 1.1.1 (первая)Nav 1.1.2Nav 1.1.3 (последняя)Nav 2Nav 2.1 (первая)Nav 2.2 (последняя)Нав 3 (последний)Nav 3.1 (первая)Нав 3.2 (последний)Дополнительная информация
Версия PHP 5.2.13Решение
В пределахforeach ($iterator as $page)
цикл две переменные могут быть использованы для отслеживания глубины,$depth
а также$prevDepth
, Простое условное сравнение может затем определить первый элемент на уровне ветви:if ($depth > $prevDepth)
.
СозданиеRecursiveCachingIterator
с использованиемZend_Navigation_Container
объект, а затем с помощью этого, чтобы создатьRecursiveIteratorIterator
добавляетhasNext()
метод.
$rci = new RecursiveCachingIterator($container, CachingIterator::FULL_CACHE);
$iterator = new RecursiveIteratorIterator($rci,
RecursiveIteratorIterator::SELF_FIRST);
/* snip */
$prevDepth = -1;
foreach ($iterator as $page) {
$depth = $iterator->getDepth();
/* snip */
if ($depth > $prevDepth) {
// first branch item
}
/* snip */
if (!$iterator->hasNext()) {
// last branch item
}
/* snip */
$prevDepth = $depth;
}