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/job-board?specialty=cardiology&location=california 而不是 www.example.com/cardiology/california。如何使表单构造一个干净的 URL?

4

1 回答 1

1

您应该使用 Drupal 的 Form API 创建该表单并为其分配自定义提交回调。

在该提交回调中,您可以执行验证,如果一切正常,则将用户重定向到适当的 URL。

请参阅示例模块的源代码,特别是与 Form 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 回答