如何设置节点菜单链接的mlid和plid?

时间:2013-11-12 15:27:25

标签: drupal drupal-7

我正在从安装配置文件创建多个节点,每个节点都有自己的菜单设置。

我想要发生的是让一些菜单项成为其他菜单项的子项,必要时对mlidplid进行硬编码。

从下面的代码段中,除了mlidparent之外,从Drupal管理员和数据库中查看时,所有值都反映在节点中。我还尝试设置plid代替parent,但它也无效。

$node->menu['link_title'] = 'Some title';
$node->menu['menu_name'] = 'main-menu';
$node->menu['mlid'] = 11000;
$node->menu['parent'] = 10000;
$node->path = array(
  'alias' => 'somealias'
);
node_save($node);

如何强制设置节点菜单链接?

3 个答案:

答案 0 :(得分:2)

查看menu模块的核心代码,似乎enabled值必须是menu item定义的一部分,否则它不会在数据库中保存任何内容(它只会删除,基于给定的mlid)。

$node->menu = array(
    'link_title' => 'Some title',
    'description' => '', // needs to pass this also or you will get php warnings
    'menu_name' => 'main-menu',
    'mlid' => 361, // needs to be an existing mlid or it will generate a new mlid value
    'plid' => 299, // needs to be an existing foreign mlid id
    'enabled' => 1,
);

node_save($node);

答案 1 :(得分:-1)

您可能需要将其设置为第二步。

首先创造&保存你的节点 保存节点后,您应该拥有每个节点的路径。

此时你应该使用

hook_menu
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7

你可能不必担心对mlid和amp;的值进行硬编码。 plid,只需设置link_path值即可创建菜单结构


 function mymodule_menu() {
    $items['abc/def'] = array(
      'page callback' => 'mymodule_abc_view',
    );

    $items['abc/def/ghi'] = array(
      'page callback' => 'mymodule_abc_view',
    );

    $items['abc/def/lmn'] = array(
      'page callback' => 'mymodule_abc_view',
    );

    $items['abc/def/opq'] = array(
      'page callback' => 'mymodule_abc_view',
    );

    etc...

    return $items;
  }

您还可以查看

menu_link_save
https://api.drupal.org/api/drupal/includes%21menu.inc/function/menu_link_save/7

答案 2 :(得分:-1)

我在这里回答了一个非常相似的问题:

how to programmatically create menu items while creating nodes?

试试看,看看它是否有效。