PowerCMS XのアプリケーションIDについて

公開

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 );
    }

この仕組みを上手く活用してプラグイン開発にチャレンジしてみてください。