以前の記事でPowerCMS Xプラグインの保存・削除コールバックを紹介しましたが、PowerCMS Xには多数のコールバックが用意されています。今回は、PowerCMS X標準(オプションプラグインを除く)で提供されている主なコールバックを紹介します。
コールバックとは?
コールバックとは、特定のイベントが発生したときに自動的に実行される関数のことです。PowerCMS Xでは、様々な場面でコールバックを利用できるため、処理を挿入してCMSの動作を細かく制御することができます。
PowerCMS Xの主なコールバック
保存コールバック
コールバック名 | タイミング | 備考 |
---|---|---|
save_filter | オブジェクトの保存前(pre_saveより前) | バリデーションなどに利用 |
pre_save | オブジェクトの保存前(save_filterより後) | 新規作成時はID未確定 |
before_save | オブジェクトの生成後、DBにcommit前(pre_saveより後) | 新規作成時にID確定済み |
post_save | オブジェクトの保存後(before_saveより後) | DBにcommit後 |
post_save_clone | オブジェクトの複製時 | |
post_save_revision | オブジェクトのリビジョン保存時 |
削除コールバック
コールバック名 | タイミング |
---|---|
delete_filter | オブジェクトの削除前(pre_deleteより前) |
pre_delete | オブジェクトの削除前(delete_filterより後) |
post_delete | オブジェクトの削除後(pre_deleteより後) |
管理画面の一覧表示や公開側の一覧ページ再構築
コールバック名 | タイミング | 備考 |
---|---|---|
start_listing | 管理画面の一覧表示開始直後(pre_listingより前) | 管理画面の一覧のみ発火 |
pre_listing | 管理画面の一覧表示前(start_listingより後) / 一覧ページの再構築前 | |
before_listing | 一覧画面でDBからオブジェクト読み込み直前(pre_listingより後) | 管理画面の一覧のみ発火 |
post_load_objects | DBからオブジェクト読み込み後(before_listingより後) / 一覧ページの再構築時 | 一覧ページの再構築時にオブジェクト数を取得可能 |
pre_listing、post_load_objectsコールバックは、管理画面の一覧表示時と公開側の一覧ページ再構築時の両方で発火します。コールバック内での$app->idはどちらもPrototypeとなるため、実装処理次第では注意が必要です。
再構築
環境変数publish_callbacks: true
で利用可能(デフォルトはfalse
)。
プラグインのconfig.jsonファイルに、以下の追記で環境変数を上書きします。
"config_overwrite": {
"publish_callbacks": true
}
PluginStarterプラグインで再構築系コールバックを設定すると、config.jsonがpublish_callbacks: true
の状態で生成されます。
コールバック名 | タイミング | 備考 |
---|---|---|
start_publish | 再構築開始直後(pre_publishより前) | |
pre_publish | 再構築前(start_publishより後) | ダイナミックはページアクセス時に発火 |
post_rebuild | 再構築完了直前(pre_publishより後) | ダイナミックはページアクセス時に発火 |
post_publish | ファイル生成時(post_rebuildより後) | ダイナミックでは発火しない |
ダイナミックの時
ポップアップで再構築時にstart_publishのみ発火し、ページにアクセスした際にpre_publishとpost_rebuildが発火します。
スタティックの時
ポップアップで再構築時にstart_publish、pre_publishとpost_rebuildが発火します。post_publishはファイル生成時に発火するため、ファイルが生成済みで更新がなかった(スキップされた)場合は発火しません。
管理画面のテンプレートカスタマイズ
コールバック名 | タイミング | 備考 |
---|---|---|
pre_preview | プレビュー時(post_previewより前) | MTタグはコンパイル前 |
post_preview | プレビュー時(pre_previewより後) | MTタグのコンパイル後 |
template_source | テンプレートのビルド前(template_outputより前) | MTタグはコンパイル前 |
template_output | テンプレートのビルド後(template_sourceより後) | MTタグのコンパイル後 |
スケジュールタスク
コールバック名 | タイミング |
---|---|
scheduled_published | ステータス「公開予約」の公開後 |
scheduled_unpublish | ステータス「公開」「公開終了日を指定」にチェックの入っているオブジェクトの非公開後 |
scheduled_replacement | ステータス「差し替え予約」の公開後 |
インポート
コールバック名 | タイミング |
---|---|
pre_import | インポート前 |
post_import | インポート後 |
ユーザー/メンバー関連
コールバック名 | タイミング |
---|---|
post_load_object | ログイン前のユーザー情報取得直後(pre_loginより前) |
pre_login | ログイン前(post_load_objectより後) |
post_login | ログイン後(pre_loginより後) |
post_logout | ログアウト後 |
recover_password | パスワードリセット後 |
RESTfulAPI
下記コールバック以外にも保存/削除系コールバックは提供されています。
コールバック名 | タイミング |
---|---|
generate_resource | オブジェクトをロードしてレスポンスデータへ変換後 |
pre_response | APIレスポンスが返る直前 |
その他
コールバック名 | タイミング | 備考 |
---|---|---|
validation | フォームのバリデーション後 | フォームのみ |
mail_filter | メール送信前 | |
publish_object | ワークフローで公開時(ビルド前) | ワークフローのみ |
pre_save_plugin_config | プラグイン設定の保存前 |
まとめ
公式ドキュメントプラグイン作成の基礎公開時よりも、多くのコールバックが提供されていることがおわかりいただけたでしょうか。
大半のコールバックは、PluginStarterプラグインで雛形を生成できますが、(バージョンアップにより追加された)未対応のコールバックは、その他に入力すると雛形ができます。ただ、引数は汎用コードになっているため調整が必要です。
引数やタイミングの調査は、PowerCMS Xのソースを読むと理解が深まります。例えば、validationコールバックであればPTFormクラスのrun_callbacks前後を読むと良いでしょう。
今回は、コールバック名とタイミングを簡単に紹介しましたが、カスタマイズの参考になれば幸いです。