Создайте ОЧЕНЬ простую форму в Drupal


Все, что мне нужно сделать, это создать форму, которая делает это:

  1. Пользователь вводит почтовый индекс в текстовое поле
  2. После отправки пользователь перенаправляется на mysite.com /[почтовый индекс пользователя]

Вот и все! Я знаю, что такое проверка и т. Д. было бы также желательно, но мне просто нужно, чтобы это работало сейчас. Я не возражаю, если он закодирован или использует API формы Drupal (на самом деле я бы предпочел первое!).

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

Ура!

 4
Author: james6848, 2010-08-16

3 answers

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

Вот пример, в котором реализована форма, как вы хотите: вы захотите просмотреть ссылку на API формы, чтобы увидеть все параметры, которые у вас есть при создании форма. Он также предоставляет два способа доступа к форме:

  1. Использование hook_menu() чтобы предоставить страницу для формы по адресу http://example.com/test
  2. Использование hook_block() чтобы предоставить блок, содержащий форму, которую вы можете добавлять и перемещать на странице администрирования блока.

Пример кода:

// Form builder. Form ID = function name
function test_form($form_state) {

  $form['postcode'] = array(
    '#type' => 'textfield',
    '#title' => t('Postcode'),
    '#size' => 10,
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Go'),
  );

  return $form;
}

// Form submit handler. Default handler is formid_submit()
function test_form_submit($form, &$form_state) {
  // Redirect the user to http://example.com/test/<Postcode> upon submit
  $form_state['redirect'] = 'test/' . check_plain($form_state['values']['postcode']);
}

// Implementation of hook_menu(): used to create a page for the form
function test_menu() {

  // Create a menu item for http://example.com/test that displays the form
  $items['test'] = array(
    'title' => 'Postcode form',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('test_form'),
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

// Implementation of hook_block(): used to create a movable block for the form
function test_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list': // Show block info on Site Building -> Blocks
      $block['postcode']['info'] = t('Postcode form');
      break;
    case 'view':
      switch ($delta) {
        case 'postcode':
          $block['subject'] = t('Postcode');
          $block['content'] = drupal_get_form('test_form');
          break;
      }
      break;
  }

  return $block;
}

Дополнительная информация:

 4
Author: , 2010-08-16 16:33:54

API-интерфейс Drupal Form очень прост, и это то, что вам в конечном итоге нужно изучить как разработчику. С таким же успехом можно вмешаться и сделать это через API, так как это не слишком сложно, то, что вы пытаетесь сделать.

 2
Author: Kevin, 2010-08-16 13:38:29

Создание форм в Drupal довольно просто, как только вы освоитесь с этим. Я бы рекомендовал прочитать следующую ссылку. http://drupal.org/node/751826 Это дает хороший обзор того, как создать форму.

В крючке _submit вы можете перенаправить на соответствующую страницу, установив $form_state['redirect'].

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

 2
Author: Icode4food, 2010-08-16 16:59:58