I have a new Drupal installation; when I installed my first module, I got the following error:

Undefined index: link path in menu_link_save() (line 3113 of /includes/menu.inc). error.

I have seen the line 3113 of menu.inc but I don't understand what happened. The error happen every time I install a custom module.

Does anybody know what the problem is?

This is the code I am using.

function froga_menu() {
  $items = array();
  $items['anunciantes'] = array(
    'title' => 'Editar perfil',
    'description' => 'Editar perfil - Anunciante',
    // 'parent' => array('anunciantes'),
    // 'page callback' => 'drupal_get_form',
    // 'page arguments' => array('form_editar_perfil'),
    'access callback' => TRUE,
    'type' => 'MENU_NORMAL_ITEM',
    'menu_name' => 'main-menu',
    'customized' => 1, // Must be 1 in order to not dispaly the link in any language
    'language'  => 'es', // language is required in order to make the item translatable

  $mlid = menu_link_save($menu_item); // You don't need to receive it in a variable
  $ml = menu_link_load($mlid); // I'm loading $mlid just to display the result and verify it

  return $items;

closed as off-topic by Mołot, AjitS, Free Radical, Letharion, Beebee Feb 14 '14 at 14:16

  • This question does not appear to be about Drupal within the scope defined in the help center.
If this question can be reworded to fit the rules in the help center, please edit the question.

  • Can you provide more details? Was the site working after the fresh install? What module did you install that threw this error? – Craig Jan 28 '14 at 13:06
  • 2
    This question appears to be off-topic because it is a bug report that should be posted in module's issue queue, not here. – Mołot Jan 28 '14 at 13:08
  • That module is a simple module that shows a main-menu item. It seams that the error appears when I install a custom module. – more770 Jan 28 '14 at 13:14
  • @more770 If this is a contrib module please provide the name, if it's a custom module, please provide the code. It's literally impossible to help you otherwise. This doesn't happen on a stock install of Drupal, so you have dodgy code in either a contrib or custom module – Clive Jan 28 '14 at 13:30
  • I have edited the question, you have there the code. – more770 Jan 28 '14 at 13:43

You are using the correct function (menu_link_save()), but you are passing it the wrong arguments, and you are calling it from the wrong hook.

The array key you can pass in &$item are described in the function documentation; the ones marked as (required) are required, and you need to pass them.

  • link_path: (required) The path of the menu item, which should be normalized first by calling drupal_get_normal_path() on it.
  • link_title: (required) Title to appear in menu for the link.
  • menu_name: (optional) The machine name of the menu for the link. Defaults to 'navigation'.
  • weight: (optional) Integer to determine position in menu. Default is 0.
  • expanded: (optional) Boolean that determines if the item is expanded.
  • options: (optional) An array of options, see l() for more.
  • mlid: (optional) Menu link identifier, the primary integer key for each menu link. Can be set to an existing value, or to 0 or NULL to insert a new link.
  • plid: (optional) The mlid of the parent.
  • router_path: (optional) The path of the relevant router item.

hook_menu() is used to tell Drupal which menu paths the module is using, not for saving a menu link when the module is installed. For that there is hook_install() or, in alternative, hook_enable() which is called every time the module is enabled, even after the module is installed; in the case you use the latter, the code needs also to check the menu link is not already present. As side note, hook_enable() is not used from Drupal 8.

Not the answer you're looking for? Browse other questions tagged or ask your own question.