开发者

how to programmatically create menu items while creating nodes?

开发者 https://www.devze.com 2022-12-26 09:04 出处:网络
I\'m creating some nodes programmatically, thus: foreach ($titles as $t) { $n = new stdClass(); $n->type = \'myType\';

I'm creating some nodes programmatically, thus:

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

I've got a menu structure like this:

pr开发者_开发问答imary-links
    Parent 1
        Child 1
        Child 2
    Parent 2
        Child 3

I want the new menu items to appear as children of Child 3. I was able to create menu items at the same time as the nodes, and they appeared in the correct menu, but not in the correct place in the hierarchy. What am I missing?


In drupal 7 you need to set also enabled to 1 (see: menu_node_save()):

$node->menu = array(
  'link_title' => $node->title,
  'menu_name' => 'main-menu',
  'plid' => 0,
  'enabled' => 1,
);


I think your over complicating it. In the past when I've programmatically created menu items for nodes, I just set the menu_name, link_title, and plid (parent link id), ie:

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

The menu module takes over at some point during the call to node_save and does the rest for you.

~Matt


Also had to add

'description' => ''

to the array otherwise I got an error for Drupal 7

0

精彩评论

暂无评论...
验证码 换一张
取 消