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 に答える