MaxLength
サイト管理者がタイトル、テキストフィールド、リンクフィールドにハードまたはソフトの文字数制限を設定でき、リアルタイムで文字数をカウントします。
maxlength
インストール
composer require 'drupal/maxlength:^3.1'
composer require 'drupal/maxlength:^2.1'
概要
MaxLengthは、Drupalの包括的な文字数制限モジュールで、サイト管理者が様々なテキスト入力フィールドに文字数制限を設定できます。入力フィールドの下にカスタマイズ可能なカウントダウンメッセージを表示し、リアルタイムで文字数をカウントします。
このモジュールは2種類の制限をサポートしています:超過時に警告を表示するソフトリミット(マイナスのカウントを表示)と、指定した文字数を超えて入力できなくするハードリミットです。HTMLコンテンツを賢く処理し、表示されるテキスト文字のみをカウントしながら、切り詰め時にはHTMLタグ構造を保持します。
MaxLengthはDrupalのField Widgetシステムとシームレスに統合され、フォーム表示の管理インターフェースを通じてフィールドごとに制限を設定できます。標準的なテキストフィールド、テキストエリア、サマリー付きテキストフィールド(コンテンツとサマリーに別々の制限を設定可能)、リンクフィールド、CKEditor 5 WYSIWYGエディタをサポートしています。また、主要な文字数カウントのマイルストーンでスクリーンリーダーにアナウンスするアクセシビリティ機能も含まれています。
Features
- @limit、@remaining、@countプレースホルダーを使用したカスタマイズ可能なカウントダウンメッセージによるリアルタイム文字数カウント
- 文字数超過時に警告を表示し、マイナスの残り文字数を表示するソフトリミットモード
- 指定した文字数を超えて入力できなくするハードリミットモード
- HTMLタグを無視し、HTMLエンティティを適切に処理して、表示されるテキストのみをカウントするHTML対応の文字数カウント
- ハードリミット適用時にタグ構造を保持するHTML安全な切り詰め処理
- text_textarea_with_summaryウィジェットでコンテンツとサマリーフィールドに別々の文字数制限を設定可能
- WYSIWYGエディタ内での自動検出と文字数カウントを含む完全なCKEditor 5統合
- リンクフィールドのタイトルテキストをサポートし、255文字の最大値を自動的に適用
- 残り10文字、残り0文字、制限超過時にスクリーンリーダーでアナウンスするアクセシビリティサポート
- hook_maxlength_widget_settings()を介して他のモジュールがカスタムウィジェットにMaxLengthサポートを追加できる拡張可能なアーキテクチャ
- Drupalの標準的なフォーム表示の管理インターフェースを通じたフィールドごとの設定
Use Cases
SEO向けの記事タイトル長の制限
検索エンジンの結果で適切に表示されるように、記事タイトルに60文字の制限を設定します。構造 > コンテンツタイプ > 記事 > フォーム表示の管理に移動し、タイトルウィジェットのMaxLength設定で60文字の制限を設定し、著者がこれを超えないようにハードリミットを有効にします。
ソーシャルメディア投稿の準備
280文字制限(Twitter/Xの文字数制限)のソーシャルメディア用抜粋テキストフィールドを作成します。ソフトリミットモードを使用して、著者が制限を超えた場合に警告を表示しながら、どれだけ超過したかを確認できるようにします。
サマリーフィールドの管理
サマリー付きの本文フィールドに対して、サマリーに160文字(メタディスクリプションに最適)、メイン本文に5000文字など、別々の制限を設定します。カウントダウンメッセージにより、著者は簡潔なサマリーを書くことができます。
リンクテキストの標準化
ナビゲーションメニューやコールトゥアクションボタンで一貫した表示を確保するために、リンクフィールドのタイトルを50文字に制限します。これを厳格に適用するためにハードリミットを有効にします。
カスタムウィジェットの統合
サイトでカスタムField Widgetを使用している場合、モジュールにhook_maxlength_widget_settings()を実装してMaxLengthサポートを有効にします。ウィジェットIDをサポートする設定(maxlength_setting、summary_maxlength_setting、truncate_setting)にマッピングする配列を返します。
Tips
- コンテンツ移行中にソフトリミットを使用して、インポートをブロックせずに制限を超えるコンテンツを特定できます
- デフォルトのカウントダウンメッセージ「Content limited to @limit characters, remaining: <strong>@remaining</strong>」は、コンテキスト固有のガイダンスを提供するためにフィールドごとにカスタマイズできます
- 多言語サイトでは、翻訳によって長さが異なることが多いため、文字数制限の調整が必要な場合があります
- ハードリミットモードはHTMLをインテリジェントに処理し、文字数制限で切り詰めながら開いているHTMLタグを適切に閉じます
- スクリーンリーダーユーザーは、アクセシビリティのために残り10文字、残り0文字、制限超過時にアナウンスを受け取ります
Technical Details
Hooks 5
hook_maxlength_widget_settings
モジュールがMaxLength設定をサポートする追加のウィジェットタイプを定義できるようにします。このフックを使用して、カスタムField WidgetにMaxLength機能を追加します。
hook_element_info_alter
MaxLengthはこのフックを使用して、textfield、textarea、text_formatフォーム要素にpre_renderとprocessコールバックを追加し、文字カウンター機能をアタッチします。
hook_field_widget_third_party_settings_form
MaxLengthはこのフックを実装して、フォーム表示の管理ページでサポートされているField Widgetに設定フォームを追加します。
hook_field_widget_settings_summary_alter
MaxLengthはこのフックを実装して、フォーム表示の管理ページのウィジェット設定サマリーに設定された制限を表示します。
hook_field_widget_single_element_form_alter
MaxLengthはこのフックを実装して、レンダリング時にField Widgetフォーム要素に設定された文字数制限を適用します。
Troubleshooting 5
その特定のフィールドのフォーム表示の管理でMaxLength設定が構成されていることを確認してください。最大長の値が設定されている(空でない)ことを確認してください。JavaScriptが有効で、ブラウザコンソールにJSエラーが表示されていないことを確認してください。
MaxLengthはHTMLタグを除去し、表示されるテキストのみをカウントします。HTMLエンティティは単一の文字としてカウントされます。これはユーザーが実際に見るコンテンツの長さを反映するための意図的な動作です。
CKEditor 5の初期化にわずかな遅延(400ms)がある場合があります。問題が続く場合は、CKEditor 5モジュールが有効になっていることを確認してください。モジュールはテキストフォーマットの変更を処理するためにMutationObserverを使用します。
カスタムウィジェットはhook_maxlength_widget_settings()を介した明示的なサポートが必要です。モジュールにこのフックを実装して、適切な設定でウィジェットを登録してください。
カスタムメッセージで最大文字数には@limit、残り文字数には@remaining、現在の文字数には@countを使用してください。各プレースホルダー名の前に@記号を含めることを確認してください。