2010-12-05 34 views
4

Ceci est un exemple du livre pro drupal.

function annotate_admin_settings() { 

    $options = node_get_types('names'); 
     $form['annotate_node_types'] = array(

    '#type' => 'checkboxes', 

    '#title' => t('Users may annotate these content types'), 
    '#options' => $options, 
    '#default_value' => variable_get('annotate_node_types', array('page')), 
    '#description' => t('A text field will be available on these content types to 
    make user-specific notes.'), 
    ); 
    return system_settings_form($form); 
    } 

mais forment la documentation drupal, le constructeur du style d'une forme est comme ceci.

function mymodule_myform($form_state) { 

} 

il y a un paramètre (form_state $) dans le funcion, quand je devrais utiliser cette parameter.thank vous.

+0

Je ne comprends pas ce que vous voulez dire. C'est un paramètre, n'est-ce pas? Comment il est nommé (la différence entre '$ form' et' $ form_state') n'a pas d'importance. –

+2

Pekka, la forme $ passée à system_settings_form() n'est pas équivalente à la variable $ form_state transmise à d'autres fonctions de création de formulaire, par ex.block_add_block_form(). Ces noms de variables sont descriptifs de la différence réelle entre un formulaire et un état de formulaire dans Drupal. Bien que vous ayez raison de dire qu'il est possible d'utiliser deux noms de variables pour désigner la même chose, ce n'est pas ce qui se passe ici, et c'est aussi une mauvaise pratique de codage. –

Répondre

2

$form définit la forme, $form_state porte des informations sur la forme traitée.

Alors pourquoi les fonctions de construction de formulaire prennent-elles comme premier argument $form_state (avec un nombre quelconque d'arguments facultatifs spécifiés par l'utilisateur)? Pour fournir des informations de contexte et d'état qui peuvent être nécessaires lors de la création d'un formulaire. Les fonctions de création de formulaire doivent toujours renvoyer une définition de formulaire, mais elles peuvent prendre des décisions sur la définition du formulaire en fonction d'informations telles que le dernier bouton cliqué, les valeurs soumises par l'utilisateur ou d'autres informations. Comme mentionné par ceejayoz dans un commentaire, une utilisation courante de $form_state dans une fonction builder est de gérer des formulaires multi-étapes, où l'état de la forme ("étape 1 + 2 terminée, étape 3 encore à faire) a un effet sur le forme qui est affiché à l'utilisateur.

Dans de nombreux cas d'utilisation commune, $form_state est complètement ignorée, et les arguments facultatifs sont utilisés pour fournir des informations contextuelles (pour l'un des nombreux exemples, consultez la documentation API comment_form).

+0

L'une des utilisations courantes que j'ai vu pour '$ form_state' dans une fonction de formulaire est pour les formulaires multi-étapes/ahah_helper, donc ils peuvent s'adapter à une reconstruction de formulaire. – ceejayoz

+0

@ceejayoz - c'est l'utilisation la plus courante de '$ form_state' que j'ai vu dans mes errances Drupal; Je vais l'ajouter à ma réponse. –

4

Si vous cherchez les différences entre la forme de $ et form_state $:

$ form est un tableau associatif contenant la structure de la forme. Il est modifié avec des appels tels que hook_form_alter pour ajouter des champs ou faire d'autres choses.

$ form_state est un tableau à clés contenant l'état actuel du formulaire. L'état exact dépend de l'étape du processus de noeud dans lequel se trouve le formulaire. En règle générale, il contient les valeurs qui seront traitées lors de la soumission du formulaire. Ceux-ci sont complètement tout à fait correct dans leur discussion de la différence entre $form et $form_state

+0

Ceci est juste, mais ce n'est que la moitié de la réponse si j'ai bien compris la question, ce qui explique pourquoi les fonctions de construction de formulaire prennent $ form_state comme premier argument. –

2

L'utilisation principale de $form_state est de conserver les valeurs d'un formulaire après qu'il a été rempli et soumis.Le $form_state est vérifié par des fonctions de validation pour s'assurer que les valeurs qui ont été entrées répondent aux exigences de validation.est ensuite transmis pour soumettre des fonctions qui peuvent faire des choses avec ces données une fois la validation passée (par ex. enregistrer les données dans la base de données, imprimer quelque chose à la page suivante, etc.). Cela dit, le paramètre $form_state peut être inclus dans n'importe quelle fonction de formulaire, car un formulaire peut être chargé ou rechargé à tout moment dans le processus de soumission. Si vous voulez accéder aux valeurs stockées par votre formulaire, assurez-vous que $form_state est disponible pour votre fonction.

Voir le Form Quickstart de Drupal pour plus de détails, en particulier les sections de validation et d'envoi.

+0

merci! très utile! – Tivie