我正在尝试了解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
答案 0 :(得分:1)
键是$lastitem
,它是上一个项目的索引;它是在您粘贴的代码后立即设置的:
$lastitem = $i;
其中$ i是上面foreach循环中的键,它使用变量$ item迭代所有$项。
因此,在下一次迭代中,$items[$lastitem]
是之前创建的项目。
为了确定某个项目是否包含子项目,只需比较当前和之前的元素级别即可。这是实现这一目标的有效方法,因为只需对所有项进行一次迭代即可构建数据结构并集成更深/更浅的字段。
Shallower与更深层次相反:
+ item
+-- item // this is deeper;
+-- item
+-- item
+ item // this is shallower;
+ item