我已经扩展Zend_View_Helper_Navigation_Menu
了,它使用 aRecursiveIteratorIterator
来遍历菜单树。我希望能够确定的是我是在树中分支级别的第一个还是最后一个项目上。
这是我正在寻找的示例:
- 导航 1(第一)
- 导航 1.1(第一个和最后一个)
- 导航 1.1.1(第一)
- 导航 1.1.2
- 导航 1.1.3(最后)
- 导航 1.1(第一个和最后一个)
- 导航 2
- 导航 2.1(第一)
- 导航 2.2(最后)
- 导航 3(最后)
- 导航 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;
}