You are here

function page_example_menu in Examples for Developers 7

Same name and namespace in other branches
  1. 6 page_example/page_example.module \page_example_menu()

Implements hook_menu().

Because hook_menu() registers URL paths for items defined by the function, it is necessary for modules that create pages. Each item can also specify a callback function for a given URL. The menu items returned here provide this information to the menu system.

We will define some menus, and their paths will be interpreted as follows:

If the user accesses http://example.com/?q=examples/page_example/simple, the menu system will first look for a menu item with that path. In this case it will find a match, and execute page_example_simple().

If the user accesses http://example.com/?q=examples/page_example/arguments, the menu system will find no explicit match, and will fall back to the closest match, 'examples/page_example', executing page_example_description().

If the user accesses http://example.com/?q=examples/page_example/arguments/1/2, the menu system will first look for examples/page_example/arguments/1/2. Not finding a match, it will look for examples/page_example/arguments/1/%. Again not finding a match, it will look for examples/page_example/arguments/%/2. Yet again not finding a match, it will look for examples/page_example/arguments/%/%. This time it finds a match, and so will execute page_example_arguments(1, 2). Since the parameters are passed to the function after the match, the function can do additional checking or make use of them before executing the callback function.

See also

hook_menu()

Example: Menu

Related topics

File

page_example/page_example.module, line 102
Module file for page_example_module.

Code

function page_example_menu() {

  // This is the minimum information you can provide for a menu item. This menu
  // item will be created in the default menu, usually Navigation.
  $items['examples/page_example'] = array(
    'title' => 'Page Example',
    'page callback' => 'page_example_description',
    'access callback' => TRUE,
    'expanded' => TRUE,
  );
  $items['examples/page_example/simple'] = array(
    'title' => 'Simple - no arguments',
    'page callback' => 'page_example_simple',
    'access arguments' => array(
      'access simple page',
    ),
  );

  // By using the MENU_CALLBACK type, we can register the callback for this
  // path without the item appearing in the menu; the admin cannot enable the
  // item in the menu, either.
  //
  // Notice that 'page arguments' is an array of numbers. These will be
  // replaced with the corresponding parts of the menu path. In this case a 0
  // would be replaced by 'examples', a 1 by 'page_example', and a 2 by
  // 'arguments.' 3 and 4 will be replaced by whatever the user provides.
  // These will be passed as arguments to the page_example_arguments() function.
  $items['examples/page_example/arguments/%/%'] = array(
    'page callback' => 'page_example_arguments',
    'page arguments' => array(
      3,
      4,
    ),
    'access arguments' => array(
      'access arguments page',
    ),
    'type' => MENU_CALLBACK,
  );
  return $items;
}