web-dev-qa-db-ja.com

お問い合わせフォームのtextareaフィールドのmaxlengthを実際に設定する方法

コアモジュールの連絡フォームのtextareaメッセージを特定の文字数に制限する必要があります。

ここに事実があります

  1. Form APIは、textareaフィールドタイプにmaxlengthを設定することを許可しません[プレーンHTMLは許可します]

  2. Maxlength モジュールでは、実際に最大長を設定することはできません。各コンテンツタイプのフィールド管理セクションで定義されているフィールドの最大長から最大長を取得します

  3. Hook_element_infoを使用して新しいフォーム要素タイプを作成しても、#maxlengthをtextareaに追加することは保証されません。その上、私が成功した場合、コンタクトフォームモジュールを再度変更して、実際のメッセージテキストエリアフィールドを私のもので上書きする必要があります。

だから私はそれを単純明快に変更できますか?

Webサイトのすべてのtextareaフィールドを変更する最良のアイデアは何ですか?

11

まず、設定フォームを定義してから、フックフォームを変更しました。

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

これは正常に動作しているようです。

4

このように Maxlength モジュールを使用して、制御する要素に#maxlengthプロパティと#maxlength_jsプロパティの両方を配置できます。

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

Form APIは、textareaフィールドタイプにmaxlengthを設定することを許可しません[プレーンHTMLは許可します]

これは厳密には当てはまりません。..HTML5はtextareasにmaxlengthプロパティを導入しましたが、以前のバージョンにはありません( https://developer.mozilla.org/en-US/docs/Web/HTML/Element/を参照)。 textarea )。

Drupal 7に付属するデフォルトのテンプレートはすべてXHTMLを使用しているため、HTML5の明示的なサポートがないことは完全に理にかなっています。

あなたのdoctypeHTML5である限り、これはおそらく機能します:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);
6
Clive