2014-01-10 75 views
0

我想了解Joomla 3.x的mod_menu文件夾中的helper.php文件。我正在看的代碼段是我們碰到的第一個isset調用來檢查我們新推出的元素的值瞭解Joomla 3.x的mod_menu中的helper.php的代碼塊

特別是我試圖弄清楚$ item-> shallowower如何能夠計算深度的菜單結構,它允許我們通過這個特定模塊的默認輸出模板在列表元素中創建列表。

// add these elements to each item 

    $item->deeper  = false; 
    $item->shallower = false; 
    $item->level_diff = 0; 

if (isset($items[$lastitem])) { 

    $items[$lastitem]->deeper  = ($item->level > $items[$lastitem]->level); 
    $items[$lastitem]->shallower = ($item->level < $items[$lastitem]->level); 
    $items[$lastitem]->level_diff = ($items[$lastitem]->level - $item->level); 

    var_dump($items[$lastitem]->shallower);//(bool)true or false 
    var_dump($item->level);//string 
    var_dump($items[$lastitem]->level);//string 
    } 

我只是努力讓我的頭一輪這段代碼,更使雙方$用品 - >深入和$用品 - >水平似乎他們應該工作,但我沒有什麼$的理解lastitem] - >淺層在做。任何解釋都是最有幫助的。

問候

w9914420

回答

1

的關鍵是$lastitem,這是先前創建的項的索引;它是你粘貼代碼後立即設置:

$lastitem  = $i; 

其中$ i是通過與變量$項目的所有項目$在foreach循環高於迭代的關鍵。

因此,在下一次迭代中,$items[$lastitem]是以前創建的項目。

爲了確定一個項目是否有子項目,比較當前和以前的元素級別就足夠了。這是實現這一目標的一種有效方式,因爲只需要對所有項目進行一次迭代就可以構建數據結構並集成更深層/更淺層的字段。

較淺的是更深層次的相反:

+ item 
+-- item // this is deeper; 
+-- item 
+-- item 
+ item // this is shallower; 
+ item 
+0

嗨裏卡多,很抱歉的響應晚了,我不得不離開了,並做一些轟轟烈烈的測試。我明白你的意思,因爲$ lastitem引用了循環中創建的最後一個迭代(在前面的代碼中提到)。我現在明白淺層的價值是什麼,爲什麼它很重要。無需關閉主題,這是通過評估創建項目的值,然後使用這些值作爲標識來表示對象$ item [$ lastitems]中的元素狀態,這本身似乎是對象集合:-S – W9914420

+0

我在頂部添加了一個簡短的解釋,我希望它能更好地解釋。 $ items的確是所有菜單項的集合。 –

+0

嗨@riccardozorn再次感謝您的洞察力,我走開了,並查看了foreach,看看它究竟在做什麼,它不像我原先想象的那樣行事)。乾杯 – W9914420