This project is not covered by Drupal’s security advisory policy.

Defines a menu link field type.

Drupal's core Menu module allows nodes to place menu links (linking to the node) into the menu. The Menu link module however allows entities of any type to place menu links into the menu using a field.

Menu link as a field

Menu links as fields gives you the following benefits.

  • Field API. Menu links will be automatically available to modules that interact with the Field API (like the Views module).
  • Widgets and formatters. Use separate widgets and formatters per entity type (and bundle). Contrib modules can provide all kinds of new widgets and formatters.
  • Revision support. Menu links' properties are stored per revision (among which their location in the menu).
  • Permission control. Menu links on nodes can be added by users that don't have access to administer full menus. Permission for menu links on nodes can even be restricted per role with modules like the Field permissions module.

Menu module integration

The Menu link module integrates seamlessly into the Menu module. The UI for node types, to configure which menus are available, isn't altered.

The "Menu settings" tab is however removed from the node form and replaced by an field widget (To put the widget into a vertical tab use the Field group module).

Now that menu links are stored as a field it is thus possible to use different widgets per node type.


Relations between menu links and entities

The Menu link module provides one predefined field stored in a fixed database table (using field_sql_storage) named {field_data_menu_link}. Using a fixed table allows other modules to use this table to retrieve and build upon relations between menu links and entities (This field is also being used for the integration with the Menu module).

Menu API additions

To speed up saving/deleting of menu links, the Menu link provides a couple of additions to the Menu API. Those may be used by other modules.

  • menu_link_load_multiple(array $mlids, array $conditions = array())
  • menu_link_delete_multiple(array $mlids)


  • Provide an generic parent menu link selector element. Using jQuery we could improve usability. Other modules should be able to hook into it and for example restrict the available parents.


The initial module is provided by casey.

Supporting organizations: 
Features (weight handler), Cleanup, Maintenance

Project Information