Respuestas:
El uso unset()
no es una buena solución para los formularios (como creo que usted sabe), ya que nunca se sabe qué controladores de envío / validación pueden esperar que exista el elemento no establecido cuando se procesan. Esto puede conducir a errores no deseados.
Hay tres métodos que puede usar de forma segura para 'ocultar' un elemento de formulario
'#type' => 'value'
en el elemento, lo que tendrá el efecto de que el valor del elemento aún se pasará a las funciones de envío / validación con su estado #value
normal. Este es mi método preferido.'#access' => FALSE
en el elemento para denotar que no debe salir a la pantalla.'#type' => 'hidden'
como Bart ha sugerido (aunque el uso de esto depende de su caso de uso; imagino que si está tratando de ocultar el valor de un elemento de formulario, no desea generarlo en el formulario como una entrada oculta).hide()
no debe usarse en elementos de formulario, puede complicar fácilmente todo el proceso de envío del formulario, ya que los validadores todavía se ejecutan para el elemento. Por ejemplo, si está hide($form['title']);
en un formulario de nodo, nunca podrá enviar el formulario, ya que el campo de título es obligatorio, pero no se proporcionará un valor. Los 3 métodos anteriores son los mejores para usar, en ese orden :)
drupal_render($form['base']['prices']['sell_price'])
no funciona?
drupal_render()
, no obtendrá ninguna de las etiquetas / tokens / etc. a menos que envíe la $form
matriz completa
Si está usando un archivo de plantilla, puede ocultar cosas usando hide () .
Si desea ocultar un elemento de formulario hook_form_alter
, unset()
podría ser su mejor opción.
Si es solo para almacenar un valor, también puede usar '#type' => 'hidden' .
drupal_render($form['base']['prices']['sell_price'])
mostrará el formulario, pero no se guarda!