drupal5和drupal6的菜单钩子hook_menu在写法上也有很大的区别。
下面是一个例子来说明。
drupal5.7的captcha模块的菜单如下:
function captcha_menu($may_cache) {
$items = array();
if ($may_cache) {
// main configuration page of the basic CAPTCHA module
$items[] = array(
'path' => 'admin/user/captcha',
'title' => t('CAPTCHA'),
'description' => t('Administer how and where CAPTCHAs are used.'),
'callback' => 'captcha_admin',
'access' => user_access('administer CAPTCHA settings'),
'type' => MENU_NORMAL_ITEM,
);
// the default local task (needed when other modules want to offer
// alternative CAPTCHA types and their own configuration page as local task)
$items[] = array(
'path' => 'admin/user/captcha/captcha',
'title' => t('CAPTCHA'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -20,
);
$items[] = array(
'path' => 'admin/user/captcha/captcha/settings',
'title' => t('General settings'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 0,
);
$items[] = array(
'path' => 'admin/user/captcha/captcha/examples',
'title' => t('Examples'),
'description' => t('An overview of the available challenge types with examples.'),
'callback' => 'captcha_examples',
'type' => MENU_LOCAL_TASK,
'weight' => 5,
);
}
return $items;
}
drupal6.4的captcha模块的菜单如下:
function captcha_menu() {
$items = array();
// main configuration page of the basic CAPTCHA module
$items['admin/user/captcha'] = array(
'title' => 'CAPTCHA',
'description' => 'Administer how and where CAPTCHAs are used.',
'file' => 'captcha.admin.inc',
'page callback' => 'drupal_get_form',
'page arguments' => array('captcha_admin_settings'),
'access arguments' => array('administer CAPTCHA settings'),
'type' => MENU_NORMAL_ITEM,
);
// the default local task (needed when other modules want to offer
// alternative CAPTCHA types and their own configuration page as local task)
$items['admin/user/captcha/captcha'] = array(
'title' => 'CAPTCHA',
'access arguments' => array('administer CAPTCHA settings'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -20,
);
$items['admin/user/captcha/captcha/settings'] = array(
'title' => 'General settings',
'access arguments' => array('administer CAPTCHA settings'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 0,
);
$items['admin/user/captcha/captcha/examples'] = array(
'title' => 'Examples',
'description' => 'An overview of the available challenge types with examples.',
'file' => 'captcha.admin.inc',
'page callback' => 'drupal_get_form',
'page arguments' => array('captcha_examples', 5, 6),
'access arguments' => array('administer CAPTCHA settings'),
'type' => MENU_LOCAL_TASK,
'weight' => 5,
);
$items['admin/user/captcha/captcha/captcha_point'] = array(
'title' => 'CAPTCHA point adminstration',
'file' => 'captcha.admin.inc',
'page callback' => 'captcha_point_admin',
'page arguments' => array(5, 6),
'access arguments' => array('administer CAPTCHA settings'),
'type' => MENU_CALLBACK,
);
return $items;
}
通过菜单钩子的对比,得出一些区别
区别一:drupal6.4的菜单少了$may_cache,也就是少了菜单缓存这项。
区别二:菜单路径放置不同了。
drupal5.7的菜单路径是'path' => 'admin/user/captcha',
drupal6.4的菜单路径是$items['admin/user/captcha'] ,直接把路径写到了$items数组元素里。
区别三:函数回调、回调参数、权限控制的写法也不同了。
drupal5.7的函数回调、回调参数、权限控制写法是:
'callback' => 'captcha_admin',
'access' => user_access('administer CAPTCHA settings'),
drupal6.4的函数回调、回调参数、权限控制写法是:
'page callback' => 'drupal_get_form',
'page arguments' => array('captcha_admin_settings'),
'access arguments' => array('administer CAPTCHA settings'),
区别四:drupal6.4在菜单钩子里可以调用文件。
'file' => 'captcha.admin.inc'

评论
感谢
感谢支持!
这么“深层”的话题
这么“深层”的话题一定要支持的,顺便试试评论测试~
顶顶Jason兄的研究~
顶顶Jason兄的研究~