So legen Sie im Kontaktformular eine maximale Länge für das Textfeld fest

11

Ich muss die Textnachricht des Kontaktformulars des Kernmoduls auf eine bestimmte Anzahl von Zeichen beschränken.

Hier sind die Fakten

  1. Die Formular-API erlaubt es nicht, eine maximale Länge für Textfeldfeldtypen festzulegen [während dies bei einfachem HTML der Fall ist]

  2. Mit dem Maxlength- Modul können Sie keine maximale Länge festlegen. Die maximale Länge ergibt sich aus der maximalen Länge des Felds, die im Abschnitt "Feld verwalten" jedes Inhaltstyps definiert ist

  3. Das Erstellen eines neuen Formularelementtyps mit hook_element_info garantiert immer noch nicht, dass ich das #maxlengthzum Textbereich hinzufügen kann . Außerdem muss ich, wenn es mir gelingt, das Kontaktformularmodul erneut ändern, um das tatsächliche Nachrichtentextfeldfeld mit meinem zu überschreiben.

Also kann ich es einfach und unkompliziert ändern?

Was ist die beste Idee, um alle Textfeldfelder auf der Website zu ändern?

drupal_stuff_alter
quelle

Antworten:

6

Die Formular-API erlaubt es nicht, eine maximale Länge für Textfeldfeldtypen festzulegen [während dies bei einfachem HTML der Fall ist].

Das ist nicht unbedingt richtig ... HTML5 hat eine Maxlength-Eigenschaft für Textbereiche eingeführt, frühere Versionen haben sie nicht (siehe https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Die mit Drupal 7 gelieferten Standardvorlagen verwenden alle XHTML. Daher ist der Mangel an expliziter Unterstützung für HTML5 durchaus sinnvoll.

Solange Ihr Doctype ist HTML5, wird dies wahrscheinlich funktionieren:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
Clive
quelle
Clive Ich habe tatsächlich eine funktionierende Lösung gefunden, die ich unten gepostet habe. Danke für deine Antwort.
drupal_stuff_alter
6

Sie können das Maxlength- Modul wie folgt verwenden und den Eigenschaften, die Sie steuern möchten, die Eigenschaften #maxlength und #maxlength_js hinzufügen.

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

Zuerst habe ich ein Einstellungsformular definiert und dann ein Hook-Formular geändert:

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

Dies scheint gut zu funktionieren.

drupal_stuff_alter
quelle
Nebenbei können Sie hook_form_FORM_ID_alter implementieren und die Formular-ID-Prüfung speichern, dh: contact_form_form_contact_site_form_alter. Zugegeben, ein bisschen mundvoll als Funktionsname.
Alfred Armstrong
Das ist eine großartige Idee. Ich habe diese Angewohnheit nicht :-)
drupal_stuff_alter