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?

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.