Require on Publish
コンテンツの公開時のみフィールドを必須にできます。常に必須にする代わりに、公開時だけ入力を求めることができます。
require_on_publish
インストール
composer require 'drupal/require_on_publish:^2.0'
composer require 'drupal/require_on_publish:8.x-1.11'
概要
Require on Publish モジュールは、エンティティを公開する時のみフィールドの入力を必須にする仕組みを提供します。これは、コンテンツ作成者がすべてのフィールドを埋めなくても下書きを保存できるが、公開前には特定のフィールドを必ず入力しなければならない編集ワークフローで特に役立ちます。
フィールドでこの機能を有効にすると、コンテンツを公開しようとした時のみバリデーションエラーが表示されます。コンテンツを下書き(未公開)として保存する場合は、バリデーションエラーを発生させずにフィールドを空のままにできます。また、オプションの「空の場合に警告」機能も提供しており、フィールドが空の状態で下書きを保存する際に警告メッセージを表示し、公開時にはそれらのフィールドが必須になることを作成者に知らせます。
このモジュールは Drupal の Content Moderation モジュールとシームレスに統合され、編集ワークフローから公開状態を正しく検出します。また、Paragraphs モジュールもサポートしており、Paragraphs 内のフィールドを公開時必須としてマークできます。
Features
- フィールド設定UIから任意のフィールドを「公開時必須」としてマーク可能
- 視覚的インジケーター(青い三角形)で「公開時必須」フィールドと常時必須フィールドを区別
- オプションの「空の場合に警告」機能により、公開時必須フィールドが空の状態で下書きを保存する際に警告を表示
- Content Moderation モジュールおよび編集ワークフローとの完全な統合
- Paragraphs モジュールのサポート - Paragraphs 内のフィールドを公開時必須としてマーク可能
- JavaScript による「必須」と「公開時必須」設定の自動的な相互排他制御
- EntityPublishedInterface を実装するすべてのエンティティタイプ(Node、Media など)で動作
- テキスト、エンティティ参照、ブール値、日時など、さまざまなフィールドタイプをサポート
Use Cases
下書きコンテンツを含む編集ワークフロー
報道機関では、記者が不完全な記事を下書きとして保存する必要があることがよくあります。「公開時必須」を使用すると、「アイキャッチ画像」「概要」「カテゴリ」などのフィールドは下書き中は空のままにできますが、記事を公開する前に入力する必要があります。これにより、柔軟なコンテンツ作成が可能になりながら、公開されるコンテンツが品質基準を満たすことを保証します。
Content Moderation との統合
「下書き」「レビュー中」「公開済み」などの状態を持つ Content Moderation を使用する場合、モジュールはコンテンツが公開状態に移行するタイミングを正しく検出します。「公開時必須」としてマークされたフィールドは、下書きやレビュー段階ではなく、コンテンツを公開状態に移動する時のみバリデーションエラーをトリガーします。
不完全な下書きに対する警告システム
重要なフィールドに対して「公開時必須」と「空の場合に警告」の両方を有効にします。フィールドが空の状態で下書きを保存すると、作成者は公開前に完了する必要があるフィールドについての警告メッセージを確認できます。これにより、保存操作をブロックすることなく、編集者が不完全なコンテンツを追跡できます。
必須フィールドを持つ Paragraphs
Paragraphs を使用した複雑なコンテンツ構造では、Paragraphs タイプ内の個々のフィールドを公開時必須としてマークできます。例えば、「製品機能」Paragraphs には、親の製品ページが公開される時のみ必須となる「機能説明」フィールドを持たせることができます。
Tips
- 「公開時必須」と「空の場合に警告」を組み合わせて使用すると、保存をブロックせずに編集者が不完全なコンテンツを追跡できます
- 視覚的インジケーター(青い三角形)により、「公開時必須」フィールドと常時必須フィールド(赤いアスタリスク)を区別できます
- 「必須」と「公開時必須」の両方がチェックされている場合、JavaScript が自動的に他方のオプションのチェックを外します - これらは相互排他的です
- このモジュールは Node だけでなく、EntityPublishedInterface を実装するすべてのエンティティタイプで動作します
Technical Details
Admin Pages 1
/admin/structure/types/manage/{node_type}/fields/{field_config}
公開可能なエンティティタイプ(Node、Media など)のフィールド設定を編集する際、2つの新しいチェックボックスが表示され、管理者がその特定のフィールドの公開時必須動作を設定できます。
Hooks 9
hook_form_field_config_edit_form_alter
公開可能なエンティティタイプのフィールド設定編集フォームに「公開時必須」と「空の場合に警告」チェックボックスを追加します。
hook_entity_type_alter
EntityPublishedInterface を実装するすべてのエンティティタイプに 'require_on_publish' バリデーション制約を追加します。
hook_form_alter
「公開時必須」が有効なフィールドのフォームウィジェットに視覚的インジケーター(CSS クラス)を追加します。
hook_preprocess_form_element
フォーム要素のラベルに 'form-required-on-publish' CSS クラスを追加します。
hook_preprocess_fieldset
fieldset の legend span に 'form-required-on-publish' CSS クラスを追加します。
hook_preprocess_datetime_wrapper
datetime ラッパー要素に 'form-required-on-publish' CSS クラスを追加します。
hook_preprocess_field_multiple_value_form
複数値フィールドのテーブルヘッダーに 'form-required-on-publish' CSS クラスを追加します。
hook_field_widget_entity_reference_paragraphs_form_alter
Paragraphs ウィジェット要素に公開時必須インジケーターを追加します。
hook_field_widget_single_element_paragraphs_form_alter
単一要素の Paragraphs ウィジェットに公開時必須インジケーターを追加します。
Troubleshooting 4
このチェックボックスは EntityPublishedInterface を実装するエンティティタイプでのみ表示されます。エンティティタイプ(Node、Media など)が公開機能をサポートしていることを確認してください。カスタムエンティティタイプはこのインターフェースを実装する必要があります。
コンテンツが実際に未公開として保存されていることを確認してください。「公開済み」チェックボックスがオフになっていることを確認するか、Content Moderation を使用している場合は、モデレーション状態が「draft」などの非公開状態であることを確認してください。
相互排他性は JavaScript で処理されます。JavaScript が有効になっていて、ブラウザコンソールに JS エラーがないことを確認してください。require_on_publish/config-form ライブラリが読み込まれている必要があります。
モジュールを最新バージョンに更新してください。Issue #3178100 で Content Moderation との Paragraphs サポートが修正されました。モジュールは Paragraphs サブフィールドのバリデーション時に親エンティティのモデレーション状態を正しく読み取るようになりました。