Maison >développement back-end >tutoriel php >Construire une forme de type sorcier de plusieurs pages à Drupal
Drupal simplifie la création de forme en manipulant le HTML sous-jacent. Vous définissez les champs et Drupal génère la forme. Bien que les formes simples soient simples, des formes complexes avec de nombreux champs peuvent submerger les utilisateurs. Cet article détaille la construction de formulaires de plusieurs pages dans Drupal pour améliorer l'expérience utilisateur.
$form_state
Array suit les progrès du formulaire et les valeurs soumises entre les pages. Créez le module: Créez un répertoire sites/all/modules/multipageform
et ajoutez ces fichiers:
multipageform.info
:
<code>name = multipageform description = Creates a multi-page form. core = 7.x</code>
multipageform.module
:
<code class="language-php"><?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; } }</code>
Activer le module: Activez le module multipageform
de votre administration Drupal.
Élément de menu: Ajouter un élément de menu pour accéder au formulaire à l'aide de hook_menu
:
<code class="language-php">/** * 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; }</code>
Définition du formulaire: Définissez la forme de plusieurs pages en utilisant multipageform_form1
et une fonction d'assistance getForm
:
<code class="language-php">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; }</code>
La fonction multipageform_form1_submit
gère la soumission de la forme et la persistance de l'état:
<code class="language-php">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()); }</code>
Ajouter une validation à chaque étape en utilisant multipageform_form1_validate
:
<code class="language-php">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 } }</code>
Cette explication améliorée fournit un guide plus structuré et complet pour créer des formes de plusieurs pages dans Drupal à l'aide de l'API Form. N'oubliez pas de remplacer les commentaires d'espace réservé par votre logique réelle de traitement des données et de stockage. Cette approche favorise une meilleure expérience utilisateur en décomposant les formes complexes en étapes gérables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!