Создать пользовательскую форму поиска drupal - PullRequest
2 голосов
/ 30 июля 2010

Я хочу добавить пользовательскую опцию поиска в моей теме drupal в блоке. Это будет форма с текстовым полем и несколькими флажками. Все, что форма должна делать при отправке, это ... генерировать URL-адрес поиска на основе состояния флажка.

http://localhost/restaurant/search/node/type:restuarant категория: 34,38% ключевое слово%

Ключевым словом будет текст в поле поиска, и категория будет добавлена ​​в соответствии с состоянием флажка. Я знаю, как сделать это на обычном php-сайте, но не знаю, как реализовать это в моей теме drupal.

Я проверил форму api, я понял, что нужно создать форму в модуле ... и получить к ней доступ через URL, например

http://localhost/restaurant/my_module/form

Но не получил никакой подсказки о том, как я могу поместить его в блок в моем шаблоне.

1 Ответ

4 голосов
/ 30 июля 2010

Реализация hook_block(), настройте пользовательский обработчик отправки в своей форме, используя $form['#submit'], а в своем пользовательском обработчике отправки установите $form_state['redirect'] на свой пользовательский URL.Пример:

function mymodule_block($op = 'list', $delta = 0, $edit = array()) {
  $block = array();

  switch ($op) {
    case 'list':
      $block[0]['info'] = t('Custom search form');
      break;
    case 'view':
      switch ($delta) {
        case 0:
          $block['subject'] = t('Custom search');
          $block['content'] = drupal_get_form('mymodule_custom_search_form');
          break;
      }
      break;
  }

  return $block;
}

function mymodule_custom_search_form($form_state) {
  $form = array();

  $form['keyword'] = array(
    '#type' => 'textfield',
    '#title' => t('Keyword'),
    '#required' => TRUE,
  );
  $form['category'] = array(
    '#type' => 'textfield',
    '#title' => t('Categories'),
    '#required' => TRUE,
  );
  $form['type'] = array(
    '#type' => 'textfield',
    '#title' => t('Type'),
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search'),
  );

  $form['#submit'] = array('mymodule_custom_search_form_submit');

  return $form;
}

function mymodule_custom_search_form_submit($form, &$form_state) {
  $redirect_url = 'search/node/';
  $redirect_url .= 'type:' . $form_state['values']['type'];
  $redirect_url .= ' category:' . $form_state['values']['category'];
  $redirect_url .= ' %' . $form_state['values']['keyword'] . '%';

  $form_state['redirect'] = $redirect_url;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...