「PowerCMS X Advent Calendar 2021」の22日目です。そういえば正式な名前は聞いたことがない気がしますが、PowerCMS XのアプリケーションID…つまりPrototypeクラスのid
プロパティ(メンバ変数)の話です。「ダウンロードフォームをプラグインで作成する | PowerCMS X ブログ」で以下のコードを見てよく分からなかった方(つまり「Bootstrapper
ってなんやねん?」)向けです。
function pre_save_contact ( &$cb, $app, &$obj, $original ) {
if ( $app->id != 'Bootstrapper' || $form->basename != 'developer-download' ) {
// 管理画面からコンタクトを保存した時、フォームのベースネームが「developer-download」でないときは通常の処理
return true;
}
管理画面にアクセスした時
class.Prototype.php
にあるid
プロパティのデフォルト値はPrototype
です。よって/powercmsx/index.php
で管理画面をリクエストした時、以下のコードでPrototypeクラスのインスタンスが生成されるので$app->id
(アプリケーションID)はPrototype
になります。
$app = new Prototype();
ダイナミック生成ページにアクセスした時
ダイナミック生成されるページを呼び出した時はどうでしょうか? ダイナミック生成ページの表示には.htaccess
を準備してリクエストをpt-view.php
で処理するようにするのが基本です。pt-view.php
では以下のコードでPrototypeクラスのインスタンスが生成されるので$app->id
(アプリケーションID)はBootstrapper
です。
$app = new Prototype( ['id' => 'Bootstrapper'] );
つまり、管理画面にアクスした時とダイナミック生成ページを表示した時でアプリケーションIDが変わるのです。この性質を利用し『管理画面からコンタクトを保存した時、フォームのベースネームが「developer-download」でないときは通常の処理』という分岐ができるのです。
定期実行タスクを実行した時
tools/worker.php
はどうでしょうか。以下のコードでPrototypeクラスのインスタンスが生成されるので$app->id
(アプリケーションID)はWorker
です。
$app = new Prototype( ['id' => 'Worker'] );
自作アプリケーションの場合
最近案件対応で開発したセミナー検索アプリでは以下のようなコードにしましたので、アプリケーションIDはSearchSeminar
です。
// app/pt-search-seminar.php
require_once 'class.PTSearchSeminar.php';
$app = new PTSearchSeminar();
// lib/Prototype/class.PTSearchSeminar.php
require_once 'class.Prototype.php';
/**
* SearchSeminarクラス
*/
class PTSearchSeminar extends Prototype {
/**
* コンストラクタ
*
* @access public
* @param array $options オプション設定
* @return void
*/
public function __construct( array $options = [] ) {
$this->id = 'SearchSeminar';
parent::__construct( $options );
}
この仕組みを上手く活用してプラグイン開発にチャレンジしてみてください。