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

20

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 me souviens pas! Pas unset () mais une autre fonction!

Serjas
la source

Réponses:

29

L'utilisation unset()n'est pas une bonne solution pour les formulaires (comme je pense que vous le savez), car vous ne savez jamais quels gestionnaires de soumission / validation peuvent 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 #valuecomme d'habitude. C'est ma méthode préférée.
  • Utilisez '#access' => FALSEsur l'élément pour indiquer qu'il ne doit pas être affiché à l'écran.
  • Utilisez '#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).
Clive
la source
oublié de cacher () .
Yusef
2
@zhilevan hide()ne doit pas être utilisé sur des éléments de formulaire, il peut facilement gâcher tout le processus de soumission de formulaire car les validateurs sont toujours exécutés pour l'élément. Par exemple, si vous hide($form['title']);utilisez un formulaire de nœud, vous ne pourrez jamais soumettre le formulaire, car le champ de titre est obligatoire, mais aucune valeur ne sera fournie. Les 3 méthodes ci-dessus sont les meilleures à utiliser, dans cet ordre :)
Clive
@Clive merci, je sais méthodes ci - dessus, ma question était quelque chose lié à cacher () Je pense (encore ne me souviens plus de la fonction) .. de toute façon s'il vous plaît consulter mon commentaire en 1ère réponse, pourquoi drupal_render($form['base']['prices']['sell_price'])ne fonctionne pas?
Serjas
Ce code se trouve-t-il dans un fichier modèle qui a pour thème le formulaire? Sinon, la raison pour laquelle cela ne fonctionne pas est que même si vous pouvez imprimer n'importe quel élément de rendu à l'écran avec drupal_render(), vous n'obtiendrez aucune des balises de formulaire / jetons / etc. à moins que vous ne sortiez la totalité du $formtableau
Clive
j'ai utilisé le thème du crochet et print_r ($ form) et même drupal_render ($ form ['title']) fonctionnent, le problème est les éléments sous les onglets vertcal!
Serjas
4

Si vous utilisez un fichier de modèle, vous pouvez masquer des éléments à l'aide de hide () .

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

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

Bart
la source
hide est la meilleure méthode pour exclure l'élément.
Yusef
Ce que je cherchais à obtenir était une forme de noeud de produit Ubsercart personnalisé, tout ce que je voulais afficher est sell_price, et cacher d' autres éléments comme la livraison, le poids , etc. Mais drupal_render($form['base']['prices']['sell_price'])affichera forme, mais ce ne est pas sauver!
Serjas
4

J'ai trouvé que l'utilisation de #access sur 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.

Tom James
la source