私は最初のモジュールを作成しようとしていますが、hook_menuを使用してページをルーティングしています。モジュールは、マルチステップフォームと2つの静的コンテンツページで構成されています。
/**
* Implements hook_menu().
*/
function order_menu() {
$items = array();
$items['order/form'] = array(
'title' => 'Order Form',
'description' => 'Order multistep form.',
'page callback' => 'drupal_get_form',
'page arguments' => array('order_form'),
'access callback' => TRUE,
'file' => 'order_form.inc',
'tpe' => MENU_CALLBACK,
);
$items['order/cancel'] = array(
'title' => 'Order Cancelled',
'description' => 'Order cancelled.',
'page callback' => 'order_cancel',
'access callback' => TRUE,
'file' => 'order_form.inc',
'type' => MENU_CALLBACK,
);
$items['order/success'] = array(
'title' => 'Order Success',
'description' => 'Order Successful.',
'page callback' => 'order_success',
'access callback' => TRUE,
'file' => 'order_form.inc',
'type' => MENU_CALLBACK,
);
return $items;
}
私がしたいことは、「example.com/order」から「example.com/order/form」にアクセスできることですが、メニューフックを$ items ['order/form']から$ items ['orderに変更すると']ページが見つかりませんと表示されます。
モジュールにexample.com/orderから必要なコンテンツを表示する方法に関する提案はありますか?
コードを変更した後、Drupalメニューを再構築するよう強制しましたか?それを行わない場合、Drupalは以前に定義されたメニューを使用します。
Drupalメニューを再構築するには、モジュールページ(インストールされているすべてのモジュールのリストを表示する管理ページ)にアクセスし、モジュールを無効にして再度有効にする必要があります。最後の2つの操作は厳密には必要ありません。そのページにある[保存]ボタンをクリックしても、モジュールを有効または無効にせずに同じ効果が得られるでしょう。
Drupalはhook_menu()
およびhook_menu_alter()
の実装を呼び出し、モジュールから定義された最後のメニューコールバックを取得します。
または、コードから menu_rebuild() を呼び出すか、インストールを強制的に許可するリンクを含むブロックがある Devel をインストールできますDrupalキャッシュするメニューリストを再構築します。
問題は、order
がメニュー項目として定義されていないことです。これを修正する簡単な方法は、フックメニューの定義に含めることです。
/**
* Implements hook_menu().
*/
function order_menu() {
$items = array();
$items['order'] = $items['order/form'] = array(
'title' => 'Order Form',
'description' => 'Order multistep form.',
'page callback' => 'drupal_get_form',
'page arguments' => array('order_form'),
'access callback' => TRUE,
'file' => 'order_form.inc',
'type' => MENU_CALLBACK,
);
...
}
MENU_DEFAULT_LOCAL_TASK
をorder/form
メニュー項目に使用することもできますが、デフォルトではタブが生成されると思います。
これらの変更を行った後は、必ずキャッシュをクリアしてください。