Come impostare effettivamente una lunghezza massima per il campo textarea nel modulo di contatto


11

Devo limitare il messaggio textarea del modulo di contatto del modulo principale a un certo numero di caratteri.

Ecco i fatti

  1. L'API del modulo non consente di impostare una lunghezza massima sui tipi di campi textarea [mentre HTML semplice]

  2. Il modulo Maxlength , non ti consente di impostare effettivamente una lunghezza massima. Ottiene la sua lunghezza massima dalla lunghezza massima del campo, definita nella sezione di gestione del campo di ciascun tipo di contenuto

  3. La creazione di un nuovo tipo di elemento modulo utilizzando hook_element_info, non garantisce ancora che sia possibile aggiungere l'area #maxlengthdi testo. Inoltre, se riesco, devo modificare nuovamente il modulo del modulo di contatto per sostituire il campo textarea del messaggio reale con il mio.

Quindi posso modificarlo in modo semplice e chiaro?

Qual è l'idea migliore per modificare tutti i campi textarea nel sito Web?

Risposte:


6

L'API del modulo non consente di impostare una lunghezza massima sui tipi di campi textarea [mentre HTML semplice]

Questo non è assolutamente vero .... HTML5 ha introdotto una proprietà maxlength per textareas, le versioni precedenti non ce l'hanno (vedi https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

I modelli predefiniti forniti con Drupal 7 utilizzano tutti XHTML, quindi la mancanza di supporto esplicito per HTML5 ha perfettamente senso.

Finché il tuo tipo di documento è HTML5, probabilmente funzionerà:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);

Clive In realtà ho trovato una soluzione funzionante, l'ho pubblicata di seguito. Grazie per la tua risposta.
drupal_stuff_alter,

6

È possibile utilizzare il modulo Maxlength in questo modo, inserire le proprietà #maxlength e #maxlength_js sugli elementi che si desidera controllare.

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

4

Prima di tutto, ho definito un modulo di impostazione, quindi ho modificato un hook form:

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 ;
    }
  }
}

Questo sembra funzionare bene.


A parte questo, è possibile implementare hook_form_FORM_ID_alter e salvare il controllo dell'ID del modulo, ovvero: contact_form_form_contact_site_form_alter. Un po 'un boccone come nome di una funzione, è vero.
Alfred Armstrong,

Questa è una grande idea. Non ho questa abitudine :-)
drupal_stuff_alter
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.