$ form-Elemente angeben, die von der Anzeige ausgeschlossen werden sollen?

20

Ich möchte bestimmte Elemente in Formularen mithilfe von form_alter oder einer Vorlagendatei ausblenden. Ich habe irgendwo gelesen, dass wir in Drupal 7 $ form-Elemente angeben können, damit diese nicht in Form angezeigt werden, aber ich kann mich nicht erinnern! Nicht unset (), sondern eine andere Funktion!

Serjas
quelle

Antworten:

29

Die Verwendung von unset()ist keine gute Lösung für Formulare (wie Sie wahrscheinlich wissen), da Sie nie wissen, welche Submit / Validate-Handler das nicht gesetzte Element bei der Verarbeitung möglicherweise erwarten. Dies kann zu unerwünschten Fehlern führen.

Es gibt drei Methoden, mit denen Sie ein Formularelement sicher ausblenden können

  • Verwenden Sie '#type' => 'value'für das Element, wodurch der Wert für das Element wie gewohnt an die Submit / Validate-Funktionen übergeben wird #value. Dies ist meine bevorzugte Methode.
  • Verwenden Sie dieses '#access' => FALSEElement, um anzuzeigen, dass es nicht auf dem Bildschirm ausgegeben werden soll.
  • Verwendung '#type' => 'hidden'wie von Bart vorgeschlagen (obwohl dies von Ihrem Anwendungsfall abhängt; ich stelle mir vor, wenn Sie versuchen, den Wert eines Formularelements auszublenden, möchten Sie es nicht als versteckte Eingabe im Formular ausgeben).
Clive
quelle
habe hide () vergessen .
Yusef
2
@zhilevan hide()sollte nicht für Formularelemente verwendet werden. Es kann den gesamten Formularübermittlungsprozess durcheinander bringen, da für das Element noch Überprüfungen ausgeführt werden. Wenn Sie sich beispielsweise hide($form['title']);in einem Knotenformular befinden, können Sie das Formular niemals senden, da das Titelfeld erforderlich ist, aber kein Wert angegeben wird. Die 3 oben genannten Methoden sind die besten in dieser Reihenfolge :)
Clive
@Clive danke, ich weiß, obige Methoden, meine Frage war etwas im Zusammenhang mit hide () Ich denke (kann mich immer noch nicht an die Funktion erinnern) .. trotzdem beziehen Sie sich bitte auf meinen Kommentar in der 1. Antwort, warum drupal_render($form['base']['prices']['sell_price'])funktioniert nicht?
Serjas
Befindet sich dieser Code in einer Vorlagendatei, die dem Formular entspricht? Wenn nicht, funktioniert es nicht, weil Sie zwar ein Renderelement auf dem Bildschirm ausdrucken können, drupal_render()aber keine der Formulartags / Token / etc. Erhalten. es sei denn, Sie geben das gesamte $formArray aus
Clive
ich habe hook theme verwendet und print_r ($ form) und sogar drupal_render ($ form ['title']) funktionieren, das problem sind die elemente unter vertcal tabs!
Serjas
4

Wenn Sie eine Vorlagendatei verwenden, können Sie mit hide () Inhalte ausblenden .

Wenn Sie ein Formularelement in ausblenden möchten hook_form_alter, ist dies unset()möglicherweise die beste Option.

Wenn Sie nur einen Wert speichern möchten, können Sie auch '#type' => 'hidden' verwenden .

Bart
quelle
hide ist eine bessere Methode, um Elemente zu entfernen.
Yusef
Was ich erreichen wollte, war ein benutzerdefiniertes Ubsercart-Produktknotenformular. Alles, was ich anzeigen wollte, ist sell_price und andere Elemente wie Versand, Gewicht usw. ausblenden. Es drupal_render($form['base']['prices']['sell_price'])wird jedoch das Formular angezeigt, aber es wird nicht gespeichert.
Serjas
4

Ich habe festgestellt, dass die Verwendung von #access to false einige Formulare beschädigen kann, wenn sie für Senden-Schaltflächen oder ähnliches verwendet werden. In diesen Fällen habe ich nur CSS verwendet, um Elemente auszublenden:

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

Nur eine andere Option.

Tom James
quelle