Как включить ссылку меню при создании нового узла?


Я пытаюсь включить ссылку меню программно, вот как я это делаю:

function create_menu_link() {
    $node = new stdClass();
    $node->type = 'mytype';
    node_object_prepare($node);

    $node->menu['link-title'] = $menu_title;

    node_save($node);
}

Но установка только заголовка не работает. В $node->menu есть некоторые другие переменные, такие как mlid и plid, которые имеют значение 0, это связано с этим? Значение menu_name равно main-menu:0, module установлен на menu.

 1
Author: Ek Kosmos, 2011-03-28

2 answers

Вам нужно будет создать пункт меню отдельно, используя menu_link_save

$item = array(
  'menu_name' => 'main-menu',
  'link_title' => $node->title,
  'link_path' => 'node/'. $node->nid,
);
menu_link_save($item);
 5
Author: Derek Ahmedzai, 2012-03-04 02:21:15

Вам не нужно создавать ссылку вручную. Крючок menu_node_save() автоматически позаботится о создании ссылки при сохранении узла, если вы предоставите следующие переменные:

  $node->menu['enabled'] = TRUE;
  $node->menu['link_title'] = t('My title');
  $node->menu['description'] = ''; // Needed even if empty to avoid notices.
 1
Author: peterpoe, 2013-05-09 11:35:02