Maison >développement back-end >tutoriel php >Construire une forme de type sorcier de plusieurs pages à Drupal

Construire une forme de type sorcier de plusieurs pages à Drupal

Lisa Kudrow
Lisa Kudroworiginal
2025-02-21 09:25:08952parcourir

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.

Concepts clés

  • API Formulaire de Drupal: Automatise la génération de formulaire HTML, y compris les formulaires de plusieurs pages pour une meilleure convivialité.
  • Structure de forme multi-pages: implique un module personnalisé, une route de formulaire et une classe de formulaire de formulaire de gestion des étapes de formulaire, des définitions de champ, une validation et une soumission. Les données de chaque étape sont conservées.
  • Gestion de l'État: le $form_state Array suit les progrès du formulaire et les valeurs soumises entre les pages.
  • Validation: L'API du formulaire permet la validation à chaque étape, assurant l'intégrité des données.

Construire le module de formulaire de plusieurs pages

  1. 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>
  2. Activer le module: Activez le module multipageform de votre administration Drupal.

Building a Multi-Page Wizard-like Form in Drupal

Définition des pages de formulaire et du contenu

  1. É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>
  2. 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>

Building a Multi-Page Wizard-like Form in Drupal

Gérer l'état du formulaire

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>

Validation du formulaire

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>

Building a Multi-Page Wizard-like Form in Drupal

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn