Jak w rzeczywistości ustawić maksymalną długość pola tekstowego w formularzu kontaktowym

11

Muszę ograniczyć wiadomość tekstową formularza kontaktowego modułu podstawowego do określonej liczby znaków.

Oto fakty

  1. Interfejs API formularza nie pozwala ustawić maksymalnej długości dla typów pól textarea [podczas gdy zwykły HTML to robi]

  2. MaxLength moduł, nie pozwalają właściwie ustawić maksymalną długość. Pobiera maksymalną długość z maksymalnej długości pola, zdefiniowanej w sekcji zarządzania polami każdego typu zawartości

  3. Tworząc nowy typ elementu formularza za pomocą hook_element_info, nadal nie mogę zagwarantować, że mogę dodać go #maxlengthdo obszaru tekstowego. Poza tym, jeśli mi się uda, muszę ponownie zmienić moduł formularza kontaktowego, aby zastąpić faktyczne pole wiadomości tekstowej moim.

Czy mogę to zmienić w prosty i prosty sposób?

Jaki jest najlepszy pomysł na zmianę wszystkich pól tekstowych na stronie?

drupal_stuff_alter
źródło

Odpowiedzi:

6

Interfejs API formularza nie pozwala ustawić maksymalnej długości dla typów pól tekstowych [podczas gdy zwykły HTML to robi]

To nie jest do końca prawdą ... HTML5 wprowadził właściwość maxlength dla obszarów tekstowych, poprzednie wersje jej nie mają (patrz https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Domyślne szablony dostarczane z Drupalem 7 używają XHTML, więc brak wyraźnej obsługi HTML5 ma sens.

Dopóki twój typ dokumentu to HTML5, prawdopodobnie będzie to działać:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
Clive
źródło
Clive Znalazłem działające rozwiązanie, zamieściłem je poniżej. Dziękuję za odpowiedź.
drupal_stuff_alter
6

Możesz użyć modułu Maxlength w ten sposób, umieścić właściwości #maxlength i #maxlength_js na elementach, które chcesz kontrolować.

$form['comments'] = array(
  '#type' => 'textarea',
  '#title' => t('Comments'),
  '#maxlength_js' => TRUE,
  '#maxlength' => 1000,
);
ThomasHuang025
źródło
4

Najpierw zdefiniowałem formularz ustawień, a następnie zmieniłem formularz haka:

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

To wydaje się działać dobrze.

drupal_stuff_alter
źródło
Tak na marginesie, możesz zaimplementować hook_form_FORM_ID_alter i zapisać kontrolę identyfikatora formularza, tj .: contact_form_form_form_contact_site_form_alter. Trzeba przyznać, że to raczej kęs jako nazwa funkcji.
Alfred Armstrong
To jest wspaniały pomysł. Nie mam tego nawyku :-)
drupal_stuff_alter