0

我有简单的模块:

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;
}

我想将一个名为“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”中,调试仅显示字符串“cabinet_mysettings”。

为什么菜单钩子不明白页面参数不是函数名而是字符串?

UPD:开发模块 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'是一个函数。

有谁知道这样的回调是如何工作的?

4

1 回答 1

0

页面参数不是为了在幕后做某事而设计的。您可以通过将它们放在 url 中来使用它们将参数传递给页面回调。

像您一样将字符串放入页面参数 ('page arguments' => array('cabinet_mysettings')) 会导致仅传递该字符串。没有办法解决这个问题。有关更全面的说明,请参阅hook_menu 文档

因此,在你的情况下,我会考虑这样的事情:

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);
}

这有帮助吗?

于 2013-06-05T21:26:02.230 回答