理解Joomla 3.x的mod_menu中的helper.php的代码块

时间:2014-01-10 20:48:38

标签: joomla3.0 joomla3.2

我正在尝试了解Joomla 3.x的mod_menu文件夹中的helper.php文件。我正在寻找的代码部分是我们遇到第一个isset调用以检查新引入元素的值的地方

特别是我试图弄清楚$ item->浅层如何计算菜单结构的深度与深层次的区别,它允许我们通过默认输出模板为列表元素创建列表模块。

    // 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
    }

我正在努力让我的头脑绕过这段代码,更多的是$ item-&gt;更深层次和$ item-&gt;级别似乎正常工作,但我不知道$ lastitem是什么 - &gt;浅薄的做法。任何解释都会有所帮助。

问候

w9914420

1 个答案:

答案 0 :(得分:1)

键是$lastitem,它是上一个项目的索引;它是在您粘贴的代码后立即设置的:

$lastitem     = $i;

其中$ i是上面foreach循环中的键,它使用变量$ item迭代所有$项。

因此,在下一次迭代中,$items[$lastitem]是之前创建的项目。

为了确定某个项目是否包含子项目,只需比较当前和之前的元素级别即可。这是实现这一目标的有效方法,因为只需对所有项进行一次迭代即可构建数据结构并集成更深/更浅的字段。

Shallower与更深层次相反:

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