代码之家  ›  专栏  ›  技术社区  ›  sprugman

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

  •  4
  • sprugman  · 技术社区  · 15 年前

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

    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
    

    我希望新菜单项显示为3号孩子的孩子。我可以在创建节点的同时创建菜单项,它们出现在正确的菜单中,但不在层次结构中的正确位置。我错过了什么?

    3 回复  |  直到 11 年前
        1
  •  4
  •   m4olivei    15 年前

    我觉得你太复杂了。在过去,当我以编程方式为节点创建菜单项时,我只是设置菜单名称、链接标题和plid(父链接ID),即:

    $menu['link_title'] = $t;
    $menu['menu_name'] = 'primary-links';
    $menu['plid'] = 867;
    

    菜单模块在调用node_save期间的某个时间点接管,并为您完成其余的工作。

    Matt

        2
  •  6
  •   LarS    13 年前

    在Drupal 7中,您还需要将启用设置为1(请参见: menu_node_save() )以下内容:

    $node->menu = array(
      'link_title' => $node->title,
      'menu_name' => 'main-menu',
      'plid' => 0,
      'enabled' => 1,
    );
    
        3
  •  2
  •   Fons Vandamme    11 年前

    还得加上

    '说明'=>''

    到数组,否则我得到一个drupal 7的错误