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


11

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

ここに事実があります

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

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

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

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

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

回答:


6

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

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

Drupal 7に付属しているデフォルトのテンプレートはすべてXHTMLを使用しているため、HTML5を明示的にサポートしていなくても問題ありません。

Doctype HTML5である限り、これはおそらく機能します。

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

Clive実際に有効な解決策を見つけたので、以下に投稿しました。ご回答有難うございます。
drupal_stuff_alter 2013年

6

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

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

4

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

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

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


余談ですが、hook_form_FORM_ID_alterを実装してフォームIDチェックを保存できます。つまり、contact_form_form_contact_site_form_alterです。確かに、関数名としては一口です。
アルフレッドアームストロング

それはいい考えです。私にはこの癖はありません:-)
drupal_stuff_alter 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.