especificar $ elementos de formulario que se excluirán de la visualización?

20

Quiero ocultar ciertos elementos en forma usando form_alter o un archivo de plantilla. He leído en alguna parte que en Drupal 7, podemos especificar elementos $ form para que no se muestren en forma, ¡pero no puedo recordarlo! ¡No desarmado () sino alguna otra función!

Serjas
fuente

Respuestas:

29

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

  • Úselo '#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 #valuenormal. Este es mi método preferido.
  • El uso '#access' => FALSEen el elemento para denotar que no debe salir a la pantalla.
  • Úselo '#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).
Clive
fuente
olvidé hide () .
Yusef
2
@zhilevan 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 :)
Clive
@Clive gracias, conozco los métodos anteriores, mi pregunta era algo relacionado con hide () creo (todavía no recuerdo la función) ... de todos modos, consulte mi comentario en la primera respuesta, ¿por qué drupal_render($form['base']['prices']['sell_price'])no funciona?
Serjas
¿Está ese código en un archivo de plantilla que está dando forma al formulario? Si no es así, la razón por la que no funciona es que, si bien puede imprimir cualquier elemento de representación en la pantalla drupal_render(), no obtendrá ninguna de las etiquetas / tokens / etc. a menos que envíe la $formmatriz completa
Clive
utilicé el tema de gancho y print_r ($ form) e incluso drupal_render ($ form ['title']) están funcionando, ¡el problema son los elementos debajo de las pestañas verticales!
Serjas
4

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' .

Bart
fuente
hide es un mejor método para exluir el elemento.
Yusef
Lo que estaba tratando de lograr era un formulario de nodo de producto Ubsercart personalizado, todo lo que quería mostrar es sell_price, y ocultar otros elementos como envío, peso, etc. ¡Pero drupal_render($form['base']['prices']['sell_price'])mostrará el formulario, pero no se guarda!
Serjas
4

Descubrí que usar #access to false puede romper algunos formularios si se usa en botones de envío o similar. En esos casos, acabo de usar CSS para ocultar elementos:

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

Solo otra opción.

Tom James
fuente