Zend_View_Helper_Navigation_Menu
genişletilmiş ve menü ağacı üzerinde yinelemek için bir RecursiveIteratorIterator
kullanır. Benim belirleyebileceğim şey, ağaçtaki bir dal seviyesi için ilk veya son öğede olduğumdur. İşte PHP RecursiveIteratorIterator: Her bir şube düzeyinde ilk ve son öğeyi belirleme
- Nav 1 (ilk)
- Nav 1.1 (son ilk &)
- Nav 1.1.1 (ilk)
- Nav 1.1.2
- Nav 1.1.3 (son)
- Nav 1.1 (son ilk &)
- Gezinme 2
- Gezinme 2.1 (ilk)
- Gezinme 2.2 (son)
- Gezinme 3 (son)
- Gezinme 3.1 (ilk)
- Gezinme 3.2 (son)
Ek Bilgiler
- PHP Sürümü 5.2.13
Çözüm iki değişken takip etmek için kullanılabilecek foreach ($iterator as $page)
döngü içinde
derinlikler, $depth
ve $prevDepth
. Basit bir karşılaştırma koşulu, daha sonra bir dal seviyesinde ilk maddeyi belirleyebilir: if ($depth > $prevDepth)
.
Zend_Navigation_Container
nesne kullanılarak RecursiveCachingIterator
oluşturma ve daha sonra bu RecursiveIteratorIterator
hasNext()
yöntemi ekler oluşturmak için kullanılmıştır.
$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;
}
Bir şekilde 'getChildren' veya' nextElement' kullanılarak mümkün olmalıdır ... Ancak ne yazık ki, bu sınıflar henüz belgelenmiş değil http://www.php.net/manual/en/class.recursiveiteratoriterator.php –
Ne mod, "RecursiveIteratorIterator" ile çalışıyor (kurucunun ikinci parametresidir)? "LEAVES_ONLY", "CHILD_FIRST" veya "SELF_FIRST" ("LEAVES_ONLY" varsayılan)? – ircmaxell
nasıl kullanacağınızı nasıl kullanacağınıza dair bir örnek verebilir misiniz – Gordon