PowerCMS ブログ

2012年08月03日

PowerCMSプラグイン開発勉強会フォローアップ(1) - サンプルプラグイン

8月1日に実施した「PowerCMSプラグイン開発勉強会」で解説、また説明しながらライブでコーディングしたサンプルプラグイン「CampaignPlus」を公開しました。

以下、config.yamlの記述に沿って、簡単にそれぞれについて解説します(実際のコードはすべてlib/CampaignPlus/Plugin.pmに記述されています)。

オブジェクト一覧画面へのアクションの追加

list_actions:
    campaign: $campaignplus::CampaignPlus::Plugin::list_actions

管理画面の「バナー(キャンペーン)の一覧」にプラグインアクションを追加するサンプルです。この例ではバナー情報をエクスポートする機能を追加しています。

キャンペーン一覧のアクション

このアクションが実行された時のメソッドについては以下の部分で定義しています(尚example_methodのほうは、MT::Objectを扱うデモを行ったときの画面表示用のメソッドです)。

applications:
    cms:
        methods:
            export_campaign_info: $campaignplus::CampaignPlus::Plugin::export_campaign_info
            example_method: $campaignplus::CampaignPlus::Plugin::example_method

コールバックのサンプル

バナー(グループ)が保存された時にインデックスアーカイブを再構築する処理を実装しました。

config_settings:
   RebuildIndexAtSaveCampaign:
       default: 1
   RebuildIndexAtSaveCampaignGroup:
       default: 1
callbacks:
    cms_post_save.campaign: $campaignplus::CampaignPlus::Plugin::cms_post_save_campaign
    cms_post_save.campaigngroup: $campaignplus::CampaignPlus::Plugin::cms_post_save_campaigngroup
    MT::App::CMS::template_param.edit_campaign: $campaignplus::CampaignPlus::Plugin::edit_campaign_param
    MT::App::CMS::template_param.edit_campaigngroup: $campaignplus::CampaignPlus::Plugin::edit_campaigngroup_param
config_settings
mt-config.cgiに環境変数を指定する記述です。ここではRebuildIndexAtSaveCampaign / RebuildIndexAtSaveCampaignGroup(バナー(グループ)保存時にインデックスを再構築するか、しないかをmt-config.cgiで指定できるようにするための設定を定義しています。初期値は1(再構築する))。mt-config.cgiに「RebuildIndexAtSaveCampaign 0」と書けば、この処理は無効化されます(この処理分岐のコードはcms_post_save.campaign(group)に記述)。
callbacks
cms_post_save.campaign(group) : バナー(グループ)の保存後に実行する処理です。RebuildIndexAtSaveCampaign(Group)が指定されていた場合、statusをチェックして変更の可能性がある場合に、インデックスアーカイブを再構築する処理を記述しています。
MT::App::CMS::template_param.edit_campaign(group) : バナー(グループ)の保存後に、再構築を促すメッセージが表示されるのですが、せっかく再構築処理をプラグインで設定したのですから、このメッセージも表示されないようにする方がより親切です。そこで、テンプレートのパラメタを変更してメッセージを非表示にする処理を入れています。
バナーグループ保存後のメッセージ表示
tags
FlaggedCampaigns : バナーオブジェクトにチェックボックスカスタムフィールドを追加して、チェックの入っているバナーオブジェクトをフィルタリングしてロードするブロックタグのサンプルです。
IfCampaignFlagged? : カスタムフィールドにチェックが入っているかどうかを判別するブロックタグ(条件タグ)です。条件タグの場合はタグ名を If で始め、最後に ? を付けます。
FlaggedCampaignTitle : バナーのタイトルを出力するファンクションタグです(MTCampaignTitleタグが既に存在するため、このタグは必要ないタグですが、ブロックタグで$ctxをセットしてそれをファンクションタグで取り出すサンプルの説明用にこのタグを定義しています。

引き続き、テンプレートタグの拡張やDynamicMTMLの拡張についてもフォローアップエントリを作成予定です。

カテゴリー
PowerCMS 3
プラグイン
技術情報

ページの先頭へ