Api 如何在创建节点时以编程方式创建菜单项?

Api 如何在创建节点时以编程方式创建菜单项?,api,drupal,Api,Drupal,我以编程方式创建了一些节点,因此: foreach ($titles as $t) { $n = new stdClass(); $n->type = 'myType'; $n->uid = 1; $n->title = $t; $menu = array(); $menu['link_title'] = $t; $menu['menu_name'] = 'primary-links'; // this attem

我以编程方式创建了一些节点,因此:

foreach ($titles as $t) {
    $n = new stdClass();
    $n->type = 'myType';
    $n->uid = 1;
    $n->title = $t;
    $menu = array();
    $menu['link_title'] = $t;
    $menu['menu_name'] = 'primary-links';
    // this attempt at placing the menu item in a particular place in the 
    // menu hierarchy didn't work:
    $menu['parent'] = 'primary-links:867';
    $menu['depth'] = 3;
    $menu['p1'] = '580';
    $menu['p2'] = '867';
    $n->menu = $menu;
    node_save($n);
}
我有一个这样的菜单结构:

primary-links
    Parent 1
        Child 1
        Child 2
    Parent 2
        Child 3

我希望新菜单项显示为Child 3的子菜单项。我能够在创建节点的同时创建菜单项,它们出现在正确的菜单中,但不在层次结构中的正确位置。我遗漏了什么?

我认为你把事情复杂化了。过去,当我以编程方式为节点创建菜单项时,我只需设置菜单名称、链接标题和plid(父链接id),即:

在调用node_save的过程中,菜单模块会在某个时候接管,并为您完成其余的工作


~Matt

在drupal 7中,还需要将enabled设置为1(请参见:):

也不得不补充

“说明”=>“


对于数组,否则我得到了Drupal 7的一个错误

plid是我缺少的部分。谢谢。您如何在不硬编码的情况下以编程方式获得
867
?您可以使用0将菜单项置于菜单的顶层,或者根据要设置为父级的内容,您可以使用node_load()加载节点并检查菜单项(您希望从中获得mlid),或者从菜单链接表中查询它。祝你好运。如果没有显式设置“enabled”,将不会为节点创建新的菜单项+对于这个答案,我的答案是1。
$menu['link_title'] = $t;
$menu['menu_name'] = 'primary-links';
$menu['plid'] = 867;
$node->menu = array(
  'link_title' => $node->title,
  'menu_name' => 'main-menu',
  'plid' => 0,
  'enabled' => 1,
);