Drupal:添加新节点时自动添加菜单项

ane*_*yzm 5 drupal drupal-6

我在Drupal中向页面添加节点时是否可以自动添加菜单项?

换句话说,我可以将菜单父级与节点内容类型相关联,然后在添加新节点时自动添加子级吗?

谢谢

Jer*_*nch 1

是的。

我确信有一个模块可以做类似的事情,但您也可以创建自己的模块。

有两种方法可以解决这个问题。

您可以使用hook_menu()查询所需的项目并返回正确的菜单结构。您还需要确保使用hook_nodeapi()在节点保存上重建菜单缓存。 请参阅下面 henricks 的评论,了解为什么这是一个坏主意

或者,您可以使用 hook_nodeapi() 通过menu_link_save()添加自定义菜单项。

编辑

hook_menu 应该返回一个菜单项数组,通常这些都是静态的,但是动态生成这些数组没有任何问题。

因此,您可以查询节点表以获取所需的节点列表,循环遍历这些项目并动态创建一个包含正确菜单项的数组。

非常粗略地:

function example_menu() {
  $result = db_query('select * from node where ...'); // put in your own select items and where clause
  $menu = array();
  while ($row = db_fetch_object($result)) {
    $menu['my_path/' . $row->nid;] = array(
      // See hook menu docs for what to put here.
    );
  }
  return $menu;
}
Run Code Online (Sandbox Code Playgroud)

  • **不应为此使用`hook_menu()`!**创建可见的菜单条目只是钩子的副作用/便利功能,**不是它的主要目的**。此挂钩创建/操作的“菜单”是 Drupal 内部菜单系统(路由器表),而不是可见的 UI 菜单。根据 Jeremy 的第二个建议,应通过 menu_link_save 创建可见的菜单条目(这就是 hook_menu 使用自身来创建“便利”条目的方式)。 (7认同)