2014-01-10 38 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