web-dev-qa-db-fra.com

spécifier les éléments $ form à exclure de l'affichage?

Je souhaite masquer certains éléments du formulaire à l'aide de form_alter ou d'un fichier de modèle. J'ai lu quelque part que dans Drupal 7, nous pouvons spécifier les éléments $ form afin qu'il ne s'affiche pas sous forme, mais je ne m'en souviens pas! Pas unset () mais une autre fonction!

19
Serjas

L'utilisation de unset() n'est pas une bonne solution pour les formulaires (comme je pense que vous le savez), car vous ne savez jamais quels gestionnaires soumettre/valider pourraient s'attendre à ce que l'élément non défini existe lors de leur traitement. Cela peut entraîner des erreurs indésirables.

Il existe trois méthodes que vous pouvez utiliser en toute sécurité pour "masquer" un élément de formulaire

  • Utilisation '#type' => 'value' sur l'élément, ce qui aura pour effet que la valeur de l'élément sera toujours transmise aux fonctions de soumission/validation avec son #value comme d'habitude. C'est ma méthode préférée.
  • Utilisation '#access' => FALSE sur l'élément pour indiquer qu'il ne doit pas être affiché à l'écran.
  • Utilisation '#type' => 'hidden' comme Bart l'a suggéré (bien que l'utilisation de cela dépend de votre cas d'utilisation; j'imagine que si vous essayez de masquer la valeur d'un élément de formulaire, vous ne voulez pas le produire dans le formulaire en tant qu'entrée masquée).
29
Clive

Si vous utilisez un fichier modèle, vous pouvez masquer des éléments en utilisant hide () .

Si vous souhaitez masquer un élément de formulaire dans hook_form_alter, unset() peut être votre meilleure option.

Si c'est juste pour stocker une valeur, vous pouvez également utiliser '# type' => 'hidden' .

4
Bart

J'ai trouvé que l'utilisation de #access to false peut casser certains formulaires s'ils sont utilisés sur des boutons d'envoi ou similaires. Dans ces cas, je viens d'utiliser CSS pour masquer des éléments:

$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';

Juste une autre option.

4
Tom James