Risposte:
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
'#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 #value
normali. Questo è il mio metodo preferito.'#access' => FALSE
sull'elemento per denotare che non deve essere emesso sullo schermo.'#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).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 :)
drupal_render($form['base']['prices']['sell_price'])
non funziona?
drupal_render()
, non otterrai alcun tag / token / etc del modulo. a meno che non venga emesso l'intero $form
array
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' .
drupal_render($form['base']['prices']['sell_price'])
visualizzerà il modulo, ma non si risparmia!