Разработка модуля: hook_form (), hook_menu () и как получить $ _POST - PullRequest
0 голосов
/ 18 марта 2011

Я хочу улучшить свои знания в разработке модулей (что далеко от базовых), поэтому я пытаюсь разработать модуль поиска по периметру. На данный момент я достиг блока, содержащего форму:

function perimeter_search_block_view($delta = '') {
  // Define an empty array for the block output.
  $block = array();

  switch($delta) {
    case 'perimeter_search_box':
      $block['subject'] = t('Perimeter search box');
      $block['content'] = drupal_get_form('perimeter_search_form');;
      break;
  }

  return $block;
}

/**
* Implementation of the perimeter search form
* @return array with form data
*/
function perimeter_search_form($form, &$form_state) {
  $form = array(
    '#action' => 'perimeter-search-results',
    'keyword' => array(
      '#type' => 'textfield'
    ),
    'location' => array(
      '#type' => 'textfield'
    ),
    'perimeter' => array(
      '#type' => 'select',
      '#title' => t('Perimeter'),
      '#options' => array('15 km', '30 km', '60 km', '120 km')
    ),
    'submit' => array(
      '#type' => 'submit',
      '#value' => t('Start search')
    )
  );

  return $form;
}

У меня также есть функция для вывода результатов поиска:

/**
* Implementation of hook_menu()
* @return defined menu/page items
*/
function perimeter_search_menu() {
  $items = array();

  // Search results page
  $items['perimeter-search-results'] = array(
    'title' => t('Perimeter search results'),
    'page callback' => 'perimeter_search_results',
    'access arguments' => array('view perimeter search'),
    'type' => MENU_NORMAL_ITEM
  );

  return $items;
}

/**
* Processing job search queries
*/
function perimeter_search_results() {
  $page_content = t('Search results');
  return $page_content;
} 

Мой (простой?) Вопрос: как получить данные поста (ключевое слово, местоположение, периметр) в моей функции perimeter_search_results ()?

1 Ответ

0 голосов
/ 04 июня 2012

Легко, вам нужно создать функцию _submit для вашей формы, вот пример:

function perimeter_search_form_submit($form, &$form_state) {
    /*
     * Your data handling goes here on the $form_state['values']['myfieldname']
     * variable.
     */
     drupal_set_message(t('Awesome, you managed to fill the form!'));
}

А если вам нужно проверить ..

function perimeter_search_form_validate($form, &$form_state) {
    if($form_state['values'['myfieldname'] == '') {
      form_set_error('', t('Hey, it doesn't work like that!'));
    }
}

Просто помните, что если вы добавите атрибут '#required' => TRUE в поле формы, поле будет автоматически проверено, чтобы всегда требовать это поле, поэтому вам не нужно использовать валидатор для этого поля, если просто нужно, чтобы он был скомпилирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...