Anatomy of hook_menu
Last modified: September 17, 2009 - 19:13
hook_menu() is called rarely, such as when modules are enabled. If you edit a module’s hook_menu(), you must visit admin/build/modules for the changes to take effect.
<?php
$items['mypath/%object'] = array(
'title' => 'Page title',
'title arguments' => array(),
'title callback' => 't',
'description' => 'Your description goes here.',
'access callback' => 'object_check_access',
'access arguments' => array(1),
'page arguments' => array(1),
'page callback' => 'object_display',
'block callback' => '',
'menu_name' => NULL,
'tab_parent' => NULL,
'tab_root' => NULL,
'file' => 'name_of_file.inc',
'file path' => drupal_get_path('module', 'name_of_module_goes_here'),
'weight' => 0,
'type' => MENU_NORMAL_ITEM,
);
function object_load() {}
function object_to_arg() {}
?>Example:
<?php
$items['admin/settings/admin'] = array(
'title' => 'Administration theme',
'description' => 'Settings for how your administrative pages should look.',
'position' => 'left',
'page callback' => 'drupal_get_form',
'page arguments' => array('system_admin_theme_settings'),
'access arguments' => array('administer site configuration'),
'block callback' => 'system_admin_theme_settings',
'file' => 'system.admin.inc',
);
?>The keys are explained here: http://api.drupal.org/api/function/hook_menu

Please explain these keys:
'block callback''tab_parent'
'tab_root'
What do these keys do?
I did a little digging and found...
'block callback'is not used in any meaningful way anywhere. The only place that sets it is in system.module line 270. But no where else make use of this field. This must be some detritus from the pass we can safely ignore?As to 'tab_parent' and 'tab_root', it's described in system.install:
'tab_parent' => array(
'description' => 'Only for local tasks (tabs) - the router path of the parent page (which may also be a local task).',
'tab_root' => array(
'description' => 'Router path of the closest non-tab parent page. For pages that are not local tasks, this will be the same as the path.',
These are probably used internally to make two level local task tabs? I can't tell how these are supposed to be used. Looks to me like these are used internally and need not be explicitly set. Just a guess.
And 'position' is mentioned
And 'position' is mentioned in the Example but not in the anatomy.
Here is the full hook_menu() api page: http://api.drupal.org/api/function/hook_menu/6
'position' is used by theme_admin_page()
This is for when you define your own administration section. It controls on the left or right column to show your section on the 'admin' page, 'weight' control up or down position.
Block in right side bar
If we need to put block in rightside bar between other blocks then what $item[????] we need to specify ?
Mess with the best - die like the rest
I'm interested in
I'm interested in this;
$items['node/%node/panel_layout'] = array('path' => $base . 'layout',
'title' => 'Panel layout',
'page callback' => 'panels_node_edit_layout',
'weight' => 2,
) + $base;
Obviously from the Panels (panels_node) module, what's this 'path' being defined? I can find no record of it anywhere?
Pobster
Those tricky args
The 'path' appears to be a dynamically built path to a particular panel page. It is aliased for the sake of a clean URL, but it looks to essentially be a URL constructed of the necessary arguments to notify Drupal of which panel it is you would like to view at that particular moment.
I dug around and could not find direct record, but did find some other places where it appears and is used in a similar fashion for this purpose.