確認画面を作成します。そのため、パスをhook_menu
で初期化する必要がありますが、何らかの理由で、引数$node
が関数と一緒に送信されません...何が問題なのですか?
これは私のhook_menu
です:
$items['node/%/revisions/%/offline'] = array(
'title' => 'Offline,
'description' => 'Confirm the action "Fiche offline".',
'page callback' => 'drupal_get_form',
'page arguments' => array('_mymodule_confirm_offline'),
'type' => MENU_LOCAL_TASK,
'weight' => -4,
);
return $items;
そして、これは私の機能です:
function _redactie_omgeving_confirm_offline($form, $form_state, $node) {
$question = t('Take fiche offline. ');
return confirm_form($form,
$question,
'node/7', t('You\'re about to depublish this fiche. <br />Are you sure you want to depublish this fiche?'),
t('Yes'), t('Cancel'));
}
しかし、関数の$node
変数は空のままです...この変数を埋めるにはどうすればよいですか?
ページコールバックは_drupal_get_form
_であり、ページ引数は__mymodule_confirm_offline
_であるため、呼び出しDrupal makeはdrupal_get_form('_mymodule_confirm_offline');
であり、まったくありません。やりたいことのようです。
代わりにカスタムコールバックが必要です。
Hook_menu内:
_'page callback' => '_confirmation_form_page',
'page arguments' => array(1, 3),
_
その後
_function _confirmation_form_page($node) {
$question = t('Take fiche offline. ');
return confirm_form($form, $question, 'node/' . $node->nid, t('You\'re about to depublish this fiche. <br />Are you sure you want to depublish this fiche?'), t('Yes'), t('Cancel'));
}
_
URLからオブジェクトを「自動ロード」するには、namedである必要があります。そうでない場合は、Drupal canロードの実行方法がわかりません。「node /%nid」のようなURLでは、引数は「nid」という名前になります。実際には、引数は通常%nodeと呼ばれますが、パーツを区別したいのです。Drupalは、load_nidという関数を探し、URLから数値を渡します。この関数は、完全にロードされたオブジェクトを返します。コアには「load_node」関数があるため、%nodeという名前の引数はあなたの側からのさらなる努力なしに自動ロードされます。
コールバックにオートローディングを追加するには、以下が必要です
_$items['node/%node/revisions/%/offline'] = array(
_
ただし、これは正しいノードではなく、正しいリビジョンを提供します。 node_load() は、正しいリビジョンを取得するために使用する必要がある2番目の引数_$vid
_をサポートします。 Drupalに追加の引数を渡すように指示することは_load arguments
_キーで使用されます。これには、URL _node/%node/revision/%/offline
_の4番目の引数を使用する必要があります。
したがって、結論として、hook_menuの実装は次のようになります。
_$items['node/%node/revisions/%/offline'] = array(
'title' => 'Offline',
'description' => 'Confirm the action "Fiche offline".',
'page callback' => '_confirmation_form_page',
'page arguments' => array(1),
'load arguments' => array(3),
);
return $items;
_
hook_menuはパラメーターとして$ nodeオブジェクトを取得しません。 Node 'node /%/ revisions /%/ offline'は単なるパスであり、ノードではありません。