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
Libérer: 2025-02-21 09:25:08
original
949 Les gens l'ont consulté

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>
      Copier après la connexion
    • 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;
        }
      }
      Copier après la connexion
  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:

    /**
     * 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;
    }
    Copier après la connexion
  2. Définition du formulaire: Définissez la forme de plusieurs pages en utilisant multipageform_form1 et une fonction d'assistance 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;
    }
    Copier après la connexion

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:

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());
}
Copier après la connexion

Validation du formulaire

Ajouter une validation à chaque étape en utilisant 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
  }
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal