specificare $ elementi form da escludere dalla visualizzazione?


20

Voglio nascondere alcuni elementi nel modulo usando form_alter o un file modello. Ho letto da qualche parte che in Drupal 7, possiamo specificare $ elementi form in modo che non vengano visualizzati nel modulo, ma non ricordo! Non unset () ma qualche altra funzione!

Risposte:


29

L'utilizzo unset()non è una buona soluzione per i moduli (come penso che tu sappia), poiché non sai mai quali gestori di invio / convalida potrebbero aspettarsi che l'elemento non impostato esista quando vengono elaborati. Questo può portare a errori indesiderati.

Esistono tre metodi che è possibile utilizzare in modo sicuro per "nascondere" un elemento del modulo

  • Utilizzare '#type' => 'value'sull'elemento, che avrà l'effetto che il valore per l'elemento verrà comunque passato alle funzioni di invio / convalida con le sue #valuenormali. Questo è il mio metodo preferito.
  • Utilizzare '#access' => FALSEsull'elemento per denotare che non deve essere emesso sullo schermo.
  • Usa '#type' => 'hidden'come Bart ha suggerito (anche se l'uso di questo dipende dal tuo caso d'uso; immagino che se stai cercando di nascondere il valore di un elemento del modulo, non vuoi emetterlo nel modulo come input nascosto).

ho dimenticato hide () .
Yusef,

2
@zhilevan hide()non dovrebbe essere usato sugli elementi del modulo, può facilmente rovinare l'intero processo di invio del modulo poiché i validatori sono ancora in esecuzione per l'elemento. Ad esempio, se si è hide($form['title']);su un modulo nodo, non sarà mai possibile inviare il modulo, poiché il campo del titolo è obbligatorio, ma non verrà fornito un valore. I 3 metodi sopra indicati sono i migliori da utilizzare, in questo ordine :)
Clive

@Clive grazie, conosco i metodi di cui sopra, la mia domanda era qualcosa correlata a hide () penso (ancora non ricordo la funzione) .. comunque si prega di fare riferimento al mio commento in prima risposta, perché drupal_render($form['base']['prices']['sell_price'])non funziona?
Serjas,

Quel codice è in un file modello a tema del modulo? In caso contrario, il motivo per cui non funziona è che mentre puoi stampare qualsiasi elemento di rendering sullo schermo con drupal_render(), non otterrai alcun tag / token / etc del modulo. a meno che non venga emesso l'intero $formarray
Clive

ho usato hook theme e print_r ($ form) e persino drupal_render ($ form ['title']) stanno funzionando, il problema sono gli elementi nelle schede verticali!
Serjas,

4

Se stai usando un file modello puoi nascondere cose usando hide () .

Se vuoi nascondere un elemento del modulo in hook_form_alter, unset()potrebbe essere l'opzione migliore.

Se si tratta solo di memorizzare un valore, è possibile utilizzare anche '#type' => 'nascosto' .


nascondere è il metodo migliore per esaltare l'elemento.
Yusef,

Quello che stavo cercando di ottenere era un modulo di nodo prodotto Ubsercart personalizzato, tutto quello che volevo visualizzare è sell_price e nascondere altri elementi come spedizione, peso ecc. Ma drupal_render($form['base']['prices']['sell_price'])visualizzerà il modulo, ma non si risparmia!
Serjas,

4

Ho scoperto che l'uso di #access su false può interrompere alcuni moduli se utilizzato su pulsanti di invio o simili. In quei casi ho appena usato CSS per nascondere elementi:

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

Solo un'altra opzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.