0

求人検索である Drupal 7 でカスタム モジュールを作成しています。次のように、クリーンな URL を指定して検索を実行できるようにしたいと考えています。

www.example.com/job-board/cardiology/california

ここで、「循環器」は「専門」変数であり、「カリフォルニア」は「場所」変数です。

これで、hook_menu で変数をマッピングし、変数にアクセスする限り、これを行う方法がわかりました。問題は、送信時にクリーンな URL を作成する検索フォームをどのように作成するかです。言い換えれば、私がこれを持っていた場合:

<form method="get" action="job-board">
  <select name="specialty">
    <option value="cardiology">Cardiology</option>
    <option value="some_other_value">Some Other Value</option>
  </select>
  <select name="location">
    <option value="california">California</option>
    <option value="some_other_state">Some Other State</option>
  </select>
  <input type="submit">
</form>

送信すると、www.example.com/cardiology/california ではなく、www.example.com/job-board?specialty=cardiology&location=california に移動します。フォームできれいな URL を作成するにはどうすればよいですか?

4

1 に答える 1

1

Drupal の Form API を使用してそのフォームを作成し、それにカスタム送信コールバックを割り当てる必要があります。

そのサブミット コールバックで検証を実行し、すべて問題なければ、ユーザーを適切な URL にリダイレクトできます。

詳細については、サンプルモジュールのソース コード、特にフォーム API に関連するモジュールを参照してください。

要するに、これがあなたがすることです:

/**
 * Sample form.
 */
function MYMODULE_sample_form() {
  $form['specialty'] = array(
    '#title' => t('Specialty'),
    '#type' => 'textfield',
    '#required' => TRUE,
  );
  $form['state'] = array(
    '#title' => t('State'),
    '#type' => 'select',
    '#options' => array(
      'california' => t('California')
    ),
  );
  $form['actions'] = array('#type' => 'actions');
  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Submit the form'));

  return $form;
}

/**
 * Sample form submit processing.
 */
function MYMODULE_sample_form_submit($form, &$form_state) {
  $specialty = $form_state['values']['specialty'];
  $state     = $form_state['values']['state'];

  drupal_goto($specialty . '/ ' . $state);
}
于 2013-10-23T13:22:48.023 に答える