我有简单的模块:
function cabinet_menu() {
$items['cabinet'] = array(
'title' => 'cabinet',
'title callback' => 'cabinet_title',
//'title arguments' => array(1),
'page arguments' => array('cabinet_mysettings'),
'page callback' => 'cabinet_page',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
我想传递给'page arguments'一个名为'cabinet_mysettings'的函数
function cabinet_mysettings() {
debug('call settings');
global $user;
$cabinet = user_load($user->uid);
return $cabinet;
}
function cabinet_page($cabinet) {
debug($cabinet);
}
在'cabinet_page'中,debug只显示字符串“cabinet_mysettings”。
为什么菜单钩子不明白页面参数不是函数名而是sting?
UPD:devel模块hook_menu:
$items['devel/reinstall'] = array(
'title' => 'Reinstall modules',
'page callback' => 'drupal_get_form',
'page arguments' => array('devel_reinstall'),
'description' => 'Run hook_uninstall() and then hook_install() for a given module.',
'access arguments' => array('access devel information'),
'file' => 'devel.pages.inc',
'menu_name' => 'devel',
);
我认为'devel_reinstall'是一个函数。
有谁知道这些回调是如何运作的?
答案 0 :(得分:0)
页面参数不是为在幕后做某事而设计的。您可以使用它们将参数传递给页面回调,方法是将它们放在url中。
将字符串放在页面参数中('page arguments'=> array('cabinet_mysettings'))会导致只传递该字符串。没有办法解决这个问题。有关更全面的说明,请参阅hook_menu documentation。
因此,在你的情况下,我会考虑这样的事情:
function cabinet_menu() {
$items['cabinet/%'] = array(
'title' => 'cabinet',
'title callback' => 'cabinet_title',
'page arguments' => array(1),
'page callback' => 'cabinet_page',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function cabinet_mysettings() {
debug('call settings');
global $user;
$cabinet = user_load($user->uid);
return $cabinet;
}
function cabinet_page($my_param_name) {
$cabinet = cabinet_mysettings($my_param_name);
debug($cabinet);
}
这有帮助吗?