2010-08-16 4 views
4

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

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

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

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

Ура!

ответ

4

Это довольно легко с Form API и a custom module. Вы создадите форму с помощью 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; 
} 

Подробнее:

2

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

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

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

+0

Никогда не используйте 'drupal_goto()': она немедленно прекращает обработку формы перед другими представить обработчики, которые, возможно, уже присоединенные себя в форму после вашей. '$ form_state ['redirect']' является предпочтительным способом обработки перенаправления отправки, поскольку он не прерывает рабочий процесс формы и позволяет другим обработчикам отправки завершить работу. – 2010-08-16 16:34:53

+0

@Mark Trapp - Спасибо, что указали, что я обновил свой ответ. – Icode4food

2

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

Смежные вопросы