Comment définir réellement une longueur maximale pour le champ de zone de texte dans le formulaire de contact

11

Je dois limiter le message de la zone de texte du formulaire de contact du module principal à un certain nombre de caractères.

Voici les faits

  1. L'API de formulaire ne permet pas de définir une longueur maximale sur les types de champs de zone de texte [contrairement au HTML simple]

  2. Le module Maxlength ne vous permet pas de définir réellement une longueur maximale. Il obtient sa longueur maximale à partir de la longueur maximale du champ, définie dans la section de gestion du champ de chaque type de contenu

  3. La création d'un nouveau type d'élément de formulaire à l'aide de hook_element_info, ne garantit toujours pas que je peux l'ajouter #maxlengthà la zone de texte. De plus, si je réussis, je dois modifier à nouveau le module du formulaire de contact pour remplacer le champ de texte du message par le mien.

Je peux donc le modifier simplement et simplement?

Quelle est la meilleure idée pour modifier tous les champs de zone de texte du site Web?

drupal_stuff_alter
la source

Réponses:

6

L'API Form ne permet pas de définir une longueur maximale sur les types de champs de zone de texte [contrairement au HTML simple]

Ce n'est pas strictement vrai ... HTML5 a introduit une propriété maxlength pour les zones de texte, les versions précédentes ne l'ont pas (voir https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Les modèles par défaut fournis avec Drupal 7 utilisent tous XHTML, donc l'absence de prise en charge explicite de HTML5 est parfaitement logique.

Tant que votre doctype est HTML5, cela fonctionnera probablement:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
Clive
la source
Clive J'ai effectivement trouvé une solution de travail, je l'ai postée ci-dessous. Merci pour votre réponse.
drupal_stuff_alter
6

Vous pouvez utiliser le module Maxlength comme ceci, mettre les propriétés #maxlength et #maxlength_js sur les éléments que vous souhaitez contrôler.

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

Tout d'abord, j'ai défini un formulaire de configuration, puis j'ai modifié un formulaire de crochet:

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

Cela semble bien fonctionner.

drupal_stuff_alter
la source
En passant, vous pouvez implémenter hook_form_FORM_ID_alter et enregistrer la vérification de l'ID du formulaire, c'est-à-dire: contact_form_form_contact_site_form_alter. Certes, une bouchée comme nom de fonction.
Alfred Armstrong
C'est une bonne idée. Je n'ai pas cette habitude :-)
drupal_stuff_alter