it-swarm-es.com

¿Cómo generar valores de elementos de formulario como texto?

En un formulario de edición de nodos, quiero que ciertos campos no sean editables por todos los usuarios, pero los valores almacenados en ellos sean visibles en el formulario. Mi pensamiento era simplemente imprimirlos como texto en lugar de en un elemento de forma HTML. Cuál es la mejor manera de lograr esto?

Para proporcionar algún contexto, estos valores se rellenan a través de una migración y no deben editarse en el sitio.

3
markdorison

Cambiar un campo de formulario a un elemento de marcado crea problemas si el campo de formulario se verifica mediante un controlador de validación de formulario o un controlador de envío de formulario: #markup Elementos no se pasan en el $form_state['values'] matriz, que contiene los valores actuales asociados con los campos de formulario (y cuál es la matriz utilizada por los manipuladores de formulario, tanto la validación como los mandos de envío). Este método funciona para campos de formulario que usan #element_validate, como #element_validate también se usa desde el #markup Formulario de campos.
Si está seguro de que no hay manipuladores de validación de formulario que verifiquen el valor de los campos de formulario que desea mostrar, entonces puede adoptar este método. Como los módulos de terceros podrían agregar los manejadores de validación de formularios para esos campos, no sugeriría que lo adopte, si no, en el caso de que los campos de formulario sean creados por un módulo personalizado que creó, y ningún otro desarrollador alterará los campos de formulario agregados por Su código (o altere el formulario creado por su código).

Utilizando #attributes Para hacer un campo, solo lectura no es un método seguro (como señaló Berdir); Asegúrese de que los valores del campo de formulario no se modifiquen, debe compararlos con el valor contenido en el formulario antes de que se muestre (lo que significa verificar los valores contenidos en el $form matriz). Este método aún tiene problemas con los manejadores de validación de formularios (y formulan los manejadores de envío) porque otros módulos actuarán, ya que esos valores no son solo de lectura; Solo su código actuará como como esos valores son solo de lectura. La otra razón para no adoptar este método es que es "más fácil" para agregar el #disable atributo a un campo de formulario.

Otro método es cambiar el tipo de campo de formulario a #hidden. Si elige este método, entonces debe hacer que el valor del campo de formulario use #prefix, y #suffix.

$form['field']['#type'] = 'hidden';
$form['field']['#prefix'] = '<strong>' . t("Field title: ") . '</strong>' . 
  check_plain($form['field']['#default_value']);

Como nota lateral, si esos campos de formulario no necesitan ser visibles para los usuarios, pero deben estar presentes en el $form_state matriz Debido a que otros módulos (incluido el que crearon el formulario) implementan los manipuladores de forma, puede cambiar el tipo de campo de formulario a #value.

4
kiamlaluno

Puedes usar el yourmodule_form_alter para cambiar los campos #type del campo de texto para marcar.

1
Rafael Caceres