通過處理基礎HTML來簡化形式的創建。 您定義字段,Drupal生成表單。 雖然簡單的表單很簡單,但具有眾多字段的複雜表單會壓倒用戶。 本文詳細介紹了Drupal中的多頁形式,以改善用戶體驗。
>
關鍵概念$form_state
數組跟踪表格的進度和跨頁面提交的值。 創建模塊:創建一個目錄並添加以下文件:sites/all/modules/multipageform
multipageform.info
<code>name = multipageform description = Creates a multi-page form. core = 7.x</code>
multipageform.module
<?php /** * @file * Main module file. */ /** * Implements hook_help(). */ function multipageform_help($path, $arg) { if ($path == 'admin/help#multipageform') { $output = '<h3>' . t('About') . '</h3>'; $output .= '<p>' . t('The multipageform module demonstrates creating a multi-page form.') . '</p>'; return $output; } }
在您的drupal管理中啟用模塊。
multipageform
定義表單頁面和內容
添加菜單項以使用:訪問表單
hook_menu
/** * Implements hook_menu(). */ function multipageform_menu() { $items['multipageform/form1'] = array( 'type' => MENU_CALLBACK, 'access arguments' => array('access content'), 'page callback' => 'drupal_get_form', 'page arguments' => array('multipageform_form1') ); return $items; }
>使用和輔助函數:multipageform_form1
來定義多頁面形式:getForm
function multipageform_form1($form, &$form_state) { if (isset($form_state['values'])) { $currstep = $form_state['step'] + 1; } else { $currstep = 0; } $form_state['step'] = $currstep; $allsteps = getForm(); $currform = $allsteps[$currstep]; return $currform; } function getForm() { $form = array(); // Step 1 $step1['name'] = array( '#type' => 'textfield', '#title' => t('Enter your name'), '#description' => t('Your first name') ); $step1['last_name'] = array( '#type' => 'textfield', '#title' => t('Enter your last name'), '#description' => t('Your last name') ); $step1['submit'] = array( '#type' => 'submit', '#value' => t('Next') ); $form[] = $step1; // Step 2 (and so on...) Add more steps as needed. // ... return $form; }
函數處理形式提交和狀態持久性:multipageform_form1_submit
function multipageform_form1_submit($form, &$form_state) { $form_state['storedvalues'][$form_state['step']] = $form_state['values']; if ($form_state['step'] + 1 != getNumberOfSteps()) { $form_state['rebuild'] = TRUE; } else { // Process final form values (e.g., save to database) $finalformvalues = array(); $currStep = 0; foreach (getForm() as $step) { foreach ($step as $key => $value) { if (strcmp($key, "submit") != 0) { $finalformvalues[$key] = $form_state['storedvalues'][$currStep][$key]; } } $currStep++; } // Store $finalformvalues } } function getNumberOfSteps() { return count(getForm()); }
向每個步驟添加驗證
multipageform_form1_validate
function multipageform_form1_validate($form, $form_state) { switch ($form_state['step']) { case 0: if (empty($form_state['values']['name'])) { form_set_error('name', t('Name cannot be empty')); } // ... other validations break; // ... other steps } }
結論
以上是在Drupal中構建多頁嚮導狀形式的詳細內容。更多資訊請關注PHP中文網其他相關文章!