Scheduled Publish
コンテンツEntityのモデレーション状態変更をスケジュールするためのFieldタイプを提供し、指定した時間にワークフロー状態を自動的に遷移させます。
scheduled_publish
インストール
composer require 'drupal/scheduled_publish:^4.1'
composer require 'drupal/scheduled_publish:8.x-3.11'
概要
Scheduled PublishモジュールはDrupalのContent Moderationワークフロー向けの強力なスケジューリングシステムを導入します。NodeやMediaEntityに対して、将来のモデレーション状態変更をスケジュールできるカスタムFieldタイプを提供します。
スケジュールされた日時に達すると、モジュールはCron実行時にEntityのモデレーション状態を自動的に変更します。これにより、深夜0時にコンテンツを公開する、特定の日付以降にコンテンツを自動的にアーカイブする、タイミング指定の遷移を伴う複雑な多段階公開ワークフローを作成するなどのユースケースが可能になります。
モジュールには、サイト全体のスケジュールされた状態変更を管理するための包括的な管理インターフェースが含まれており、スケジュールエントリの追加、編集、削除が可能です。また、複数のEntityに同じスケジュールを一括で適用する一括スケジュール操作もサポートしています。
開発者向けには、スケジュールされた状態変更に反応するカスタムコードを可能にするイベントシステムと、ノーコード自動化ワークフローのためのECA(Event-Condition-Action)モジュールとの完全な統合を提供します。
Features
- 日時とターゲット状態を指定してモデレーション状態変更をスケジュールするカスタムFieldタイプ
- Drupal Cronによるスケジュールされた状態変更の自動実行
- Entity単位で複数のスケジュールされた状態変更をサポート(カーディナリティ設定可能)
- ワークフロー遷移ルールを尊重 - 有効な状態遷移のみ許可
- フィルタリング機能付きでサイト全体のスケジュールされた公開を表示する管理一覧ページ
- 複数のコンテンツアイテムに同じスケジュールを一括適用する一括スケジュールフォーム
- コンテンツ編集中にスケジュールエントリをインラインで追加、編集、削除できるAJAX対応ウィジェット
- カスタマイズ可能な日付形式とテキストパターンを持つ設定可能なFieldフォーマッター
- スケジュールされた更新を手動でトリガーするDrushコマンド
- 状態変更発生時のイベントディスパッチにより、他のモジュールが反応可能
- ノーコード自動化ワークフロー構築のためのECAモジュール統合
- NodeとMediaの両方のEntityタイプをサポート
- 複数のScheduled Publish Fieldにわたる動的データ処理を持つViews統合
- より細かいスケジュール制御のためのオプションのUltimate Cron統合
Use Cases
スケジュールされたコンテンツ公開
特定の日時に下書きコンテンツを公開するようスケジュールします。編集者は事前にコンテンツを準備して公開日を設定し、Cronがスケジュールされた時間に「Draft」から「Published」状態へコンテンツを自動的に遷移させます。
自動コンテンツアーカイブ
一定期間後にコンテンツをアーカイブまたは非公開にするようスケジュールします。プロモーションやお知らせなどの時間制限のあるコンテンツに対して、「Archived」または「Unpublished」状態への自動遷移をスケジュールします。
多段階公開ワークフロー
複数の状態変更を伴う複雑な公開スケジュールを作成します。例えば、コンテンツを1週間後に「Draft」から「Review」へ、その翌週に「Review」から「Published」へ移動するようスケジュールできます。
キャンペーンの一括スケジュール
一括スケジュールフォームを使用して、複数のコンテンツアイテムに同じ公開スケジュールを一度に適用します。キャンペーンの開始や複数のコンテンツの同時リリースに最適です。
エンバーゴ管理
特定の時間にのみ公開されるべきエンバーゴ付きコンテンツを管理します。コンテンツを完全に準備し、エンバーゴが解除される正確な瞬間に公開されるようスケジュールできます。
コンテンツローテーション
コンテンツが表示されるタイミングと置き換えられるタイミングをスケジュールすることで、コンテンツローテーションを自動化します。ホームページの注目コンテンツや季節コンテンツのローテーションに便利です。
Tips
- 正確なスケジューリングのためにCronを頻繁に(1〜5分ごとに)実行してください
- 複数のコンテンツアイテムに一貫したスケジュールを適用するには一括スケジュール機能を使用してください
- 複数の連続した状態変更が必要な場合はFieldのカーディナリティを無制限に設定してください
- 状態変更発生時に追加アクションをトリガーするにはscheduled_state_changeイベントをサブスクライブしてください
- /admin/content/scheduled-publishの管理一覧で、保留中のすべてのスケジュールの包括的な概要を確認できます
- ECA統合を使用してコードを書かずに複雑な自動化ワークフローを構築してください
- 成功した状態遷移を監視するにはDrupalログで「scheduled_publish」からのエントリを確認してください
Technical Details
Admin Pages 4
/admin/content/scheduled-publish
スケジュールされた状態変更が保留中のすべてのコンテンツの一覧を表示します。コンテンツのタイトル、スケジュールされた実行時間、将来のモデレーション状態を表示します。各スケジュールエントリに対して編集と削除の操作を提供します。少なくとも1つのコンテンツタイプにScheduled Publish Fieldが設定されている場合にのみ表示されます。
/admin/content/scheduled-publish/add
複数のコンテンツアイテムに対して一度にスケジュールされた状態変更を追加するフォーム。複数のワークフローが存在する場合はワークフローを選択し、コンテンツアイテムを追加して、選択したすべてのアイテムに適用される1つ以上のスケジュールされた状態変更を定義します。
/admin/content/scheduled-publish/edit/{entity}/{field_delta}
既存のスケジュールされた状態変更エントリを編集するフォーム。ターゲットモデレーション状態とスケジュールされた日時の変更が可能です。変更によって後続のスケジュールされた遷移が無効になる場合、それらは自動的に削除されます。
/admin/content/scheduled-publish/delete/{entity}/{field_delta}
スケジュールされた状態変更エントリを削除するための確認フォーム。削除によって後続のスケジュールされた遷移が無効になる場合、それらも自動的に削除されます。
権限 1
Hooks 2
hook_cron
モジュールはhook_cronを実装して、保留中のすべてのスケジュールされた状態変更を処理するscheduled_publish.updateサービスをトリガーします。
hook_views_data_alter
Views統合のために、コンテンツタイプ全体のすべてのScheduled Publish Fieldを統合された「scheduled_publish_dynamic」テーブルに集約する動的Viewsデータエントリを作成します。
Drush Commands 1
drush scheduled_publish:doUpdate
保留中のすべてのスケジュールされた状態変更の処理を手動でトリガーします。テストやCronを待たずに即時実行が必要な場合に便利です。
Troubleshooting 5
モジュールはスケジュールされた変更の処理にDrupal Cronに依存しています。タイムリーな実行のため、Cronが頻繁に(数分ごとに)実行されるよう設定されていることを確認してください。手動テストにはDrushコマンド「drush schp」の使用を検討してください。
コンテンツタイプでContent Moderationが有効になっていることを確認してください。管理 > 環境設定 > ワークフロー > Workflowsに移動し、コンテンツタイプにワークフローを割り当ててください。
ウィジェットはワークフロー設定とユーザー権限に基づいて、現在の状態(または最後にスケジュールされた状態)からの有効な遷移のみを表示します。ワークフロー設定を確認し、ユーザーが希望する遷移の権限を持っていることを確認してください。
これは想定された動作です。スケジュールされた状態変更が実行されると、Fieldから削除されます。処理後は空になるため、Fieldを必須に設定しないでください。
モジュールはスケジュールされた遷移のチェーン全体を検証します。エントリの編集または削除によって後続のエントリが無効になる場合、有効な遷移チェーンを維持するためにそれらは自動的に削除されます。
Security Notes 4
- 一括スケジュールフォームと編集・削除操作へのアクセスには「access scheduled publish pages」権限が必要です
- メインのScheduled Publish一覧には「view any unpublished content」権限が必要です
- 状態遷移はワークフロー権限を尊重します - ユーザーは手動で実行が許可されている遷移のみスケジュールできます
- モジュールはDrupalのセキュリティレビュープロセスに合格しており、Drupalセキュリティチームの対象となっています