0

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

我想要发生的事情是让一些菜单项成为其他一些菜单项的子项,硬编码mlidorplid如有必要。

从下面的代码片段中,当从 Drupal 管理员和数据库中查看时,所有值都反映在节点中,除了mlidand parent。我也尝试过设置plidparent但也没有用。

$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);

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

4

3 回答 3

2

查看menu模块的核心代码,似乎enabledvalue 需要成为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);
于 2013-11-13T13:46:58.143 回答
-1

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

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

试试看,看看是否有效。

于 2013-11-13T00:24:17.353 回答
-1

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

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

那时你应该使用

钩子菜单
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7

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

 功能 mymodule_menu() {
    $items['abc/def'] = 数组(
      '页面回调' => 'mymodule_abc_view',
    );

    $items['abc/def/ghi'] = 数组(
      '页面回调' => 'mymodule_abc_view',
    );

    $items['abc/def/lmn'] = 数组(
      '页面回调' => 'mymodule_abc_view',
    );

    $items['abc/def/opq'] = 数组(
      '页面回调' => 'mymodule_abc_view',
    );

    ETC...

    返回$项目;
  }

你也可以看看

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

于 2013-11-12T19:48:38.217 回答