阅读menu_tree_page_data()的文档,在我看来,我应该能够通过以下方式调用函数来检索主菜单的全部内容:menu_tree_page_data('main-menu')
。由于参数2 $max_depth
默认为NULL,因此应递归遍历所有级别。由于参数3 $only_active_trail
默认为FALSE,因此应检索所有链接,而不仅仅是活动路径上的链接。
但是,在调用此函数时,我最终会得到以下类型的树数据。
第一级深度的所有链接
第二层深度的所有链接。
只有第三级深度的活动链接。
这里发生了什么?我也尝试将params设置为menu_tree_page_data('main-menu', 10, FALSE)
,以确保我没有误解默认行为。我必须编写自己的函数来给我整个菜单,但它没有主动跟踪数据。现在,我发现自己处于这样一种情况,即我正在混合这两个函数来创建一个包含主动跟踪信息的完整菜单树,而且它非常混乱。如果一个解决方案能够奏效,那就太好了。
或者,是否有一种确定给定菜单项的活动跟踪的简单方法?如果是这样,我只需将其添加到我已经在工作的树爬虫功能中并将其称为一天。
答案 0 :(得分:2)
我认为menu_tree_page_data()
中的静态缓存存在问题。缓存ID是使用(除其他外)传递给函数或 $max_depth
的{{1}}建立的,以较小者为准。
由于MENU_MAX_DEPTH
等于9,当你将10传递给函数时,它会自动重置为9,并从中构建缓存ID。如果另一个函数已将MENU_MAX_DEPTH
调用menu_tree_page_data()
作为MENU_MAX_DEPTH
参数(在Drupal页面中更早发生),并且$max_depth
设置为$only_active_trail
然后,仅使用 活动跟踪项返回静态缓存的数据。
我认为以下内容可行:
TRUE
如果没有,您可能还需要清除其他功能(_menu_build_tree()
)的缓存,请尝试以下操作:
drupal_static_reset('menu_tree_page_data');
$tree = menu_tree_page_data('main-menu');
希望这很有意义解释:)