Cómo establecer realmente una longitud máxima para el campo de área de texto en el formulario de contacto

11

Necesito limitar el mensaje de área de texto del formulario de contacto del módulo principal a un cierto número de caracteres.

Aquí están los hechos

  1. La API de formulario no permite establecer una longitud máxima en los tipos de campo de área de texto [mientras que HTML simple sí]

  2. El módulo Maxlength no le permite establecer realmente una longitud máxima. Obtiene su longitud máxima de la longitud máxima del campo, definida en la sección de campo de administración de cada tipo de contenido

  3. Crear un nuevo tipo de elemento de formulario usando hook_element_info, todavía no garantiza que pueda agregarlo al área #maxlengthde texto. Además, si tengo éxito, necesito alterar nuevamente el módulo del formulario de contacto para anular el campo del área de mensajes de texto real con el mío.

Entonces, ¿puedo alterarlo de manera simple y directa?

¿Cuál es la mejor idea para alterar todos los campos de área de texto en el sitio web?

drupal_stuff_alter
fuente

Respuestas:

6

La API de formulario no permite establecer una longitud máxima en los tipos de campo de área de texto [mientras que HTML simple sí]

Eso no es estrictamente cierto ... HTML5 introdujo una propiedad de longitud máxima para áreas de texto, las versiones anteriores no la tienen (consulte https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Todas las plantillas predeterminadas que vienen con Drupal 7 usan XHTML, por lo que la falta de soporte explícito para HTML5 tiene mucho sentido.

Mientras su doctype sea HTML5, esto probablemente funcionará:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
Clive
fuente
Clive En realidad encontré una solución de trabajo, la publiqué a continuación. Gracias por tu respuesta.
drupal_stuff_alter
6

Puede usar el módulo Maxlength de esta manera, poner las propiedades #maxlength y #maxlength_js en los elementos que desea controlar.

$form['comments'] = array(
  '#type' => 'textarea',
  '#title' => t('Comments'),
  '#maxlength_js' => TRUE,
  '#maxlength' => 1000,
);
ThomasHuang025
fuente
4

En primer lugar, definí un formulario de configuración, luego hice un formulario de enganche alter:

function contact_form_form_alter(&$form, &$form_state, $form_id) {

  if ($form_id == 'contact_site_form') {
    $maximum_limit = (int) variable_get('contact_form_maxlength', 500);
    if($maximum_limit && is_numeric($maximum_limit)) {
    $form['message']['#title'] = $form['message']['#title'] . t(' (maximum @max characters)', array( '@max' => $maximum_limit));
    $form['message']['#maxlength'] = $maximum_limit ;
    }
  }
}

Esto parece estar funcionando bien.

drupal_stuff_alter
fuente
Por otro lado, podría implementar hook_form_FORM_ID_alter y guardar la verificación de ID de formulario, es decir: contact_form_form_contact_site_form_alter. Un poco bocado como nombre de una función, es cierto.
Alfred Armstrong
Esa es una gran idea. No tengo este hábito :-)
drupal_stuff_alter