Scheduler
Schedulerは、ウェブサイト編集者が将来の指定された日時にコンテンツを公開・非公開にするスケジュールを設定できるようにします。
scheduler
インストール
composer require 'drupal/scheduler:8.x-1.6'
概要
Schedulerは、指定した将来の日時にEntityの自動公開・非公開を行う強力なモジュールです。柔軟なPluginアーキテクチャを通じて、Nodeコンテンツ、Media Entity、Commerce製品、Taxonomy Termなど、複数のEntityタイプをサポートしています。
このモジュールは、コンテンツ編集中およびCronベースの公開・非公開操作中に、サードパーティモジュールがスケジューリングプロセスと連携するためのHookとイベントを提供します。SchedulerはDrupalのCronシステムとシームレスに統合されていますが、完全なDrupal Cronを実行せずにより細かいスケジューリング制御を可能にする軽量Cronオプションも提供しています。
Schedulerは、翻訳ごとのスケジューリング日付による多言語コンテンツ、公開・非公開アクション両方のリビジョン作成、過去の日付の柔軟な処理(即時公開や次回Cron実行時のスケジュール処理を含む)をサポートしています。
Features
- 指定した将来の日時にコンテンツを自動公開するスケジュール設定
- 指定した将来の日時にコンテンツを自動非公開にするスケジュール設定
- Pluginアーキテクチャを通じたNode、Media、Commerce製品、Taxonomy TermのEntityサポート
- 完全なDrupal Cronを実行せずにより頻繁なスケジューリングを可能にする軽量Cron機能
- 公開・非公開オプションの詳細な制御が可能なEntityタイプごとの設定
- スケジュールされたコンテンツの公開・非公開時に新しいリビジョンを作成するオプション
- 過去の日付の柔軟な処理 - エラー表示、即時公開、または次回Cronでのスケジュール
- スケジュールされた公開時間に合わせてEntityの作成日時を変更
- スケジューリングフィールドを垂直タブまたは別のフィールドセットとして表示
- デフォルト時間設定による日付のみの入力設定
- よりシンプルな時間入力インターフェースのための秒非表示オプション
- publish_onとunpublish_on日付用のToken
- スケジュールされた非公開日付用のSEOフレンドリーなX-Robots-Tagヘッダー
- スケジューリング日付付きテストコンテンツ用のDevel Generateとの統合
- Drupal 7 Schedulerデータの移行サポート
- 翻訳ごとのスケジューリングによる多言語サポート
Use Cases
期限付きプレスリリース
解禁時間に合わせて特定の日時にプレスリリースを公開するスケジュールを設定します。コンテンツを事前に準備しておき、手動操作なしで指定した正確な瞬間に自動的に公開されます。
期間限定プロモーション
セールの告知や特別オファーなどのプロモーションコンテンツに公開日と非公開日の両方を設定します。プロモーションは開始時に自動的に表示され、終了時に消えます。
コンテンツカレンダー
マーケティングチームは数週間先のコンテンツを公開日付付きで事前に準備でき、手動で各コンテンツを公開する必要なく、より良い計画と一貫した公開スケジュールを実現できます。
グローバルコンテンツリリース
協調されたグローバルリリースのために特定のタイムゾーンの深夜にコンテンツを公開するスケジュールを設定し、ターゲットオーディエンスの意図した現地時間にコンテンツが公開されるようにします。
季節コンテンツ
季節や祝日に関連するコンテンツを自動的に公開・非公開にします。クリスマスコンテンツを12月1日に表示開始し、1月2日に非表示にするスケジュールを手動管理なしで設定できます。
Commerceフラッシュセール
期間限定のフラッシュセール用にCommerce製品を公開するスケジュールを設定します。製品はセール開始時に自動的に表示され、セール終了時に非表示になります。
Rulesを使用したワークフロー
Rulesモジュールと組み合わせて複雑なワークフローを作成します。例えば、コンテンツがスケジュールされたときに通知メールを送信したり、スケジュールされたコンテンツに自動的にタグを追加したりできます。
多言語コンテンツの調整
異なる言語の翻訳を異なる時間に公開するスケジュールを設定し、段階的な地域リリースや協調された同時グローバルローンチを可能にします。
Tips
- 完全なDrupal Cronのオーバーヘッドなしにより頻繁なスケジューリングチェックを行うには、軽量Cronを使用してください。/scheduler/cron/{access-key}を呼び出す別のcrontabエントリを設定してください。
- /admin/reports/statusのシステム状態レポートには、タイムゾーンの問題をデバッグするためのサーバー時間、サイト時間、ユーザー時間を表示するScheduler Timecheckセクションが含まれています。
- Content Moderationを使用する場合は、適切なワークフロー状態の処理のためにScheduler Content Moderation Integrationモジュールをインストールしてください。
- スケジューリングが正しく動作していることを確認するために初期セットアップ中はロギングを有効にし、その後データベースログエントリを減らすために無効にしてください。
- Token [node:scheduler-publish]と[node:scheduler-unpublish]は、URLにスケジューリング日付を含めるためにPathautoパターンで使用できます。
- 非公開日付のあるコンテンツにはX-Robots-Tagヘッダーが自動的に追加され、検索エンジンがコンテンツがいつ利用不可になるかを知るのに役立ちます。
- テストには、Scheduler統合を使用してDevel Generateでランダムなスケジューリング日付を持つコンテンツを作成してください。
Technical Details
Admin Pages 3
/admin/config/content/scheduler
すべてのEntityタイプに適用されるスケジュール公開・非公開のグローバル設定を構成します。このページでは、個別のコンテンツタイプ、メディアタイプ、製品タイプ、ボキャブラリーを設定するためのクイックリンクが提供されます。
/admin/config/content/scheduler/cron
完全なDrupal Cronとは独立してSchedulerを実行するための軽量Cron機能を構成およびテストします。より頻繁なスケジューリングチェックが必要なサイトに便利です。
/admin/structure/types/manage/{content_type}
スケジューリングオプションのコンテンツタイプごとの設定。「構造 > コンテンツタイプ > 編集」から各タイプにアクセスします。
権限 9
Hooks 21
hook_scheduler_list
Cron中に処理されるリストにEntity IDを追加します。スケジュール公開または非公開のためにEntityを追加できるようにします。
hook_scheduler_TYPE_list
hook_scheduler_listのEntityタイプ固有バージョン。指定されたEntityタイプに対してのみ呼び出されます。
hook_scheduler_list_alter
Cron中に処理されるEntity IDのリストを操作します。リストからIDを追加または削除できます。
hook_scheduler_TYPE_list_alter
hook_scheduler_list_alterのEntityタイプ固有バージョン。
hook_scheduler_publishing_allowed
Entityの公開を拒否します。公開を防ぐにはFALSEを返します。Entityは後続のCron実行で再試行されます。
hook_scheduler_TYPE_publishing_allowed
hook_scheduler_publishing_allowedのEntityタイプ固有バージョン。
hook_scheduler_unpublishing_allowed
Entityの非公開を拒否します。非公開を防ぐにはFALSEを返します。
hook_scheduler_TYPE_unpublishing_allowed
hook_scheduler_unpublishing_allowedのEntityタイプ固有バージョン。
hook_scheduler_hide_publish_date
Entity編集フォームで公開日フィールドを非表示にします。フィールドを非表示にするにはTRUEを返します。
hook_scheduler_TYPE_hide_publish_date
hook_scheduler_hide_publish_dateのEntityタイプ固有バージョン。
hook_scheduler_hide_unpublish_date
Entity編集フォームで非公開日フィールドを非表示にします。フィールドを非表示にするにはTRUEを返します。
hook_scheduler_TYPE_hide_unpublish_date
hook_scheduler_hide_unpublish_dateのEntityタイプ固有バージョン。
hook_scheduler_publish_process
Entityの公開アクションを処理します。カスタム公開ロジックを可能にします。処理した場合は1、デフォルト処理の場合は0、エラーの場合は-1を返します。
hook_scheduler_TYPE_publish_process
hook_scheduler_publish_processのEntityタイプ固有バージョン。
hook_scheduler_unpublish_process
Entityの非公開アクションを処理します。カスタム非公開ロジックを可能にします。処理した場合は1、デフォルト処理の場合は0、エラーの場合は-1を返します。
hook_scheduler_TYPE_unpublish_process
hook_scheduler_unpublish_processのEntityタイプ固有バージョン。
hook_query_scheduler_alter
処理するEntityを選択するデータベースクエリを変更します。標準的なDrupalのクエリ変更Hook。
hook_query_scheduler_publish_alter
公開するEntityを選択するクエリを変更します。
hook_query_scheduler_unpublish_alter
非公開にするEntityを選択するクエリを変更します。
hook_query_scheduler_TYPE_publish_alter
公開用のEntityタイプ固有クエリ変更。
hook_query_scheduler_TYPE_unpublish_alter
非公開用のEntityタイプ固有クエリ変更。
Drush Commands 3
drush scheduler:cron
Schedulerの軽量Cronプロセスを実行します。スケジュールされた公開・非公開のみを処理し、完全なDrupal Cronは実行しません。
drush scheduler:entity-update
Pluginがカバーするエンティティ用のSchedulerデータベースフィールド(publish_on、unpublish_on)を追加します。新しいEntityタイプを提供するモジュールを有効にした後に実行してください。
drush scheduler:entity-revert
PluginでサポートされなくなったEntityタイプからSchedulerフィールドとサードパーティ設定を削除します。Pluginが使用された後に削除された場合に使用します。
Troubleshooting 7
Drupal Cronが実行されていることを確認してください。コンテンツタイプでスケジュール公開が有効になっているか確認してください。ユーザーが「コンテンツの公開・非公開をスケジュール」権限を持っているか確認してください。dblogでSchedulerからのエラーメッセージを確認してください。
URLのアクセスキーが/admin/config/content/scheduler/cronで設定されたキーと一致しているか確認してください。必要に応じてキーを再生成してください。
Entityタイプの設定でスケジューリングが有効になっているか確認してください。ユーザーがスケジューリング権限を持っているか確認してください。フォーム表示設定でフィールドが非表示になっていないか確認してください。
コンテンツタイプの設定を編集し、「過去の公開日に対するアクション」を「エラーメッセージを表示」から「保存後すぐに公開する」に変更してください。
フィールドウィジェットがCoreの「Datetime Timestamp」ウィジェットではなく「Timestamp (no default)」に設定されていることを確認してください。これはフォーム表示設定で構成できます。
Schedulerはpreprocessで$publish_onと$unpublish_on変数を提供します。NodeとMediaテンプレートでは、これらは自動的に利用可能です。他のEntityタイプでは、変数に異なる方法でアクセスする必要がある場合があります。
publish_onとunpublish_onフィールドがstatusフィールドと一致する翻訳設定を持っていることを確認してください。/admin/config/regional/content-languageでコンテンツ言語設定を確認してください。
Security Notes 4
- 「Schedulerを管理」権限はグローバル設定の変更を許可するため、信頼できる管理者にのみ付与してください。
- 軽量Cronアクセスキーは基本的なセキュリティを提供しますが、機密として保持する必要があります。漏洩した場合は再生成してください。
- スケジューリング権限を持つユーザーは、コンテンツがいつ表示されるかを実質的に制御でき、コンテンツガバナンスに影響を与える可能性があります。
- スケジュールされたコンテンツは公開日まで非公開として保存されるため、標準的なコンテンツアクセス制御が適用されます。