web-dev-qa-db-ja.com

カスタムモジュールのデフォルトルーティング

私は最初のモジュールを作成しようとしていますが、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から必要なコンテンツを表示する方法に関する提案はありますか?

2
cbaigorri

コードを変更した後、Drupalメニューを再構築するよう強制しましたか?それを行わない場合、Drupalは以前に定義されたメニューを使用します。

Drupalメニューを再構築するには、モジュールページ(インストールされているすべてのモジュールのリストを表示する管理ページ)にアクセスし、モジュールを無効にして再度有効にする必要があります。最後の2つの操作は厳密には必要ありません。そのページにある[保存]ボタンをクリックしても、モジュールを有効または無効にせずに同じ効果が得られるでしょう。
Drupalはhook_menu()およびhook_menu_alter()の実装を呼び出し、モジュールから定義された最後のメニューコールバックを取得します。

または、コードから menu_rebuild() を呼び出すか、インストールを強制的に許可するリンクを含むブロックがある Devel をインストールできますDrupalキャッシュするメニューリストを再構築します。

2
kiamlaluno

問題は、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_TASKorder/formメニュー項目に使用することもできますが、デフォルトではタブが生成されると思います。

これらの変更を行った後は、必ずキャッシュをクリアしてください。

2
googletorp