我正在从安装配置文件创建多个节点,每个节点都有自己的菜单设置。
我想要发生的是让一些菜单项成为其他菜单项的子项,必要时对mlid
或plid
进行硬编码。
从下面的代码段中,除了mlid
和parent
之外,从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);
如何强制设置节点菜单链接?
答案 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_menuhttps://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_savehttps://api.drupal.org/api/drupal/includes%21menu.inc/function/menu_link_save/7
答案 2 :(得分:-1)