Como realmente definir um comprimento máximo para o campo de área de texto no formulário de contato

11

Preciso limitar a mensagem de área de texto do formulário de contato do módulo principal a um determinado número de caracteres.

Aqui estão os fatos

  1. A API do formulário não permite definir um comprimento máximo nos tipos de campos da área de texto [enquanto o HTML simples]

  2. O módulo Maxlength , não permite que você defina um comprimento máximo. Ele obtém seu comprimento máximo do comprimento máximo do campo, definido na seção de gerenciamento de campos de cada tipo de conteúdo

  3. Criando um novo tipo de elemento de formulário usando hook_element_info, ainda não garante que eu possa adicionar a #maxlengthárea de texto. Além disso, se for bem-sucedido, preciso alterar novamente o módulo do formulário de contato para substituir o campo atual da área de texto da mensagem pelo meu.

Então eu posso alterá-lo de maneira clara e direta?

Qual é a melhor ideia para alterar todos os campos da área de texto no site?

drupal_stuff_alter
fonte

Respostas:

6

A API do formulário não permite definir um comprimento máximo nos tipos de campos da área de texto [enquanto o HTML simples]

Isso não é rigorosamente verdade ... O HTML5 introduziu uma propriedade maxlength para áreas de texto, as versões anteriores não a possuem (consulte https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Todos os modelos padrão que acompanham o Drupal 7 usam XHTML, portanto, a falta de suporte explícito ao HTML5 faz todo sentido.

Contanto que seu doctype seja HTML5, isso provavelmente funcionará:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
Clive
fonte
Clive Na verdade, encontrei uma solução funcional, publiquei abaixo. Obrigado pela sua resposta.
drupal_stuff_alter
6

Você pode usar o módulo Maxlength assim, colocar as propriedades #maxlength e #maxlength_js nos elementos que deseja controlar.

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

Em primeiro lugar, defini um formulário de configuração e depois alterei um formulário de gancho:

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

Isso parece estar funcionando bem.

drupal_stuff_alter
fonte
Apenas como um aparte, você pode implementar hook_form_FORM_ID_alter e salvar a verificação de ID do formulário, ou seja: contact_form_form_contact_site_form_alter. Um pouco como um nome de função, é certo.
Alfred Armstrong
É uma ótima ideia. Eu não tenho esse hábito :-)
drupal_stuff_alter 24/10