I Zend_View_Helper_Navigation_Menu
artırdık ve bir RecursiveIteratorIterator
menü ağacı üzerinde yineleme için kullanır. Ne belirlemek mümkün olmak istiyorum ben ağacında bir dal düzeyi için ilk veya son öğeyi duyuyorum olup olmadığıdır.
İşte aradığım bir örnek:
- Nav 1 (first)
- Nav 1.1 (first & last)
- Nav 1.1.1 (ilk)
- 1.1.2 NAV
- Nav 1.1.3 (son)
- Nav 1.1 (first & last)
- Nav 2
- Nav 2.1 (ilk)
- Nav 2.2 (son)
- Nav 3 (last)
- Nav 3.1 (ilk)
- Nav 3.2 (son)
Additional Information
- PHP Version 5.2.13
Solution
foreach ($iterator as $page)
döngü içinde iki parametre, $depth
ve $prevDepth
, derinliklerin takip etmek için kullanılabilir. Koşullu basit bir karşılaştırma, daha sonra şube düzeyinde ilk öğeyi belirleyebilirsiniz: if ($depth > $prevDepth)
.
Oluşturma RecursiveCachingIterator
Zend_Navigation_Container
nesnesi kullanılarak ve ardından RecursiveIteratorIterator
ekler hasNext()
yöntemi oluşturmak için kullanarak.
$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;
}