web-dev-qa-db-fra.com

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

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 ajouter le #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?

11
drupal_stuff_alter

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.

4
drupal_stuff_alter

Vous pouvez utiliser le module Maxlength comme celui-ci, 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,
);
6
ThomasHuang025

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/ zone de texte ).

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),
);
6
Clive