baserCMSプラグイン開発要約
http://basercms.net/manuals/3/programmers/4.html
上記URLに書いてあることを短く要約しただけの内容です。詳しくは上記サイトへ。
1, データベース、テーブル
2, お約束、インストール設定他
3, コントローラー、モデル
4, イベントリスナ
1, データベース、テーブル
純粋なテーブル名が「pens」、インストール時のプレフィックスを仮に「bc_」とした場合、プラグイン用プレフィックス「pg_」をはさんで、
bc_pg_pens
これをデータベースに直接登録。
スキーマファイルと初期DBファイル
管理画面(admin) → システム管理 → データメンテナンス
バックアップのダウンロードを行う。
この中に入っている.phpがスキーマファイル。
.csvが初期データのファイルになる。
※自分で作ったプラグインのスキーマファイルが取り出せない場合
http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=2006&forum=7&post_id=7464
.csvはクリーニングする。
id / created / modified の値を空にして保存。
その他要らないテストデータなんかも消す。
.csv仕様
・文字コードは、Shift-JIS
・各フィールドをカンマで区切る
・各フィールドをダブルコーテーション(”)で囲む
・フィールド内のダブルコーテーションは、ダブルコーテーションでエスケープする
・1行目は、フィールド名の定義とする
・id / created / modified の値は空にする
スキーマの設置
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Config/Schema/{プレフィックスなしのテーブル名}.php
初期データの設置
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Config/data/default/{プレフィックスなしのテーブル名}.csv
2,お約束、インストール設定他
インストール用設定ファイルを設置
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/config/config.php
config.phpの内容
<?php $title = '{プラグイン名(日本語可)}'; $description = '{プラグインの説明文}'; $adminLink = '/admin/{プラグイン名のスネークケース}/{コントローラー名}/index’; $installMessage = ‘{インストール時に表示するメッセージ}'; $author = '{プラグインの作成者名}'; $url = '{プラグイン作成者のホームページURL}';
インストールスクリプトを設置
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Config/init.php
init.phpの内容
スキーマファイルと初期DBファイルを読み込む
<?php $this->Plugin->initDb('plugin', '{プラグイン名}');
バージョンファイルを設置
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/VERSION.txt
VERSION.txtの内容
(例)1.2.3・・・{メジャーバージョン}.{マイナーバージョン}.{パッチ}
3,コントローラー、モデル
プラグインのコントローラーは、BcPluginAppController を継承する。
App::uses('BcPluginAppController', 'Controller'); class DemoController extends BcPluginAppController{ }
モデルは、BcPluginAppModel を継承する。
App::import('Model', 'BcPluginAppModel'); class Demo extends BcPluginAppModel { }
4,イベントリスナ
BaserEvent : イベントリスナ
本体、または他のプラグインに対して、処理を割り込ませることができる。処理をインターセプトできる。
作れるイベントリスナは以下4つ。
・コントローラーイベントリスナ
・モデルイベントリスナ
・ビューイベントリスナ
・ヘルパイベントリスナ
コールバックメソッド名
$eventsに設定したイベント名から、ドットを外してロワーキャメルケースに変換。
プラグインイベントの場合は、頭にプラグイン名を付ける。
例)Mail.Mail.beforeSendEmail → mailMailBeforeSendEmail
コールバックメソッド内でのデータの参照方法
コールバックメソッドでは、引数に CakeEvent を定義します。
引数名を $event とした場合、イベント固有のデータは、$event->data で参照する事ができます。
また、イベントの発動元のオブジェクトを、$event->subject で参照する事ができます。
コントローラーイベントリスナ
● {プラグイン名}ControllerEventListener
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Event/{プラグイン名}ControllerEventListener.php
<?php class PluginNameControllerEventListener extends BcControllerEventListener { public $events = array(); }
$eventsの配列
{CakePHP標準イベント名}(例:beforeRender)
{ControllerName}.{CakePHP標準イベント名}(例:Users.beforeRender)
本体イベント:Mail.Mail.beforeSendEmail / Mail.Mail.afterSendEmail / Blog.BlogPosts.afterAdd / Blog.BlogPosts.afterEdit / Users.afterAdd / Users.afterEdit / Pages.afterAdd / Pages.afterEdit
モデルイベントリスナ
● {プラグイン名}ModelEventListener
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Event/{プラグイン名}ModelEventListener.php
<?php class PluginNameModelEventListener extends BcModelEventListener { public $events = array(); }
$eventsの配列
{CakePHP標準イベント名}(例:beforeFind)
{ModelName}.{CakePHP標準イベント名}(例:User.beforeFind)
ビューイベントリスナ
● {プラグイン名}ViewEventListener
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Event/{プラグイン名}ViewEventListener.php
<?php class PluginNameViewEventListener extends BcViewEventListener { public $events = array(); }
{CakePHPの標準イベント名}(例:beforeLayout)
{ControllerName}.{CakePHPの標準イベント名}(例:Users.beforeLayout)
本体イベント:beforeElement / afterElement / header / footer
{ControllerName}.{EventName}(コントローラー毎に分けたい場合はこんな感じで)
ヘルパイベントリスナ
● {プラグイン名}HelperEventListener
{baserCMSの設置フォルダ}/app/Plugin/{プラグイン名}/Event/{プラグイン名}HelperEventListener.php
<?php class PluginNameHelperEventListener extends BcHelperEventListener { public $events = array(); }
本体イベント:Html.beforeGetLink / Html.afterGetLink / Form.beforeCreate / Form.afterCreate / Form.beforeEnd / Form.afterEnd / Form.beforeInput / Form.afterInput / Form.afterForm / Form.afterOptionForm
イベントリスナ、コード例
/Sample/Event/SampleControllerEventListner.php --- class SampleControllerEventListener extends BcControllerEventListener { // 登録先イベントの定義 public $events = array( 'Users.beforeRender', 'Users.afterEdit', 'initialize' ); // ユーザーコントローラーにおいてレンダリング直前に呼び出される public function usersBeforeRender(CakeEvent $event) { // ビューにサンプルという文字列を引き渡す $Controller = $event->subject(); $Controller->set('sample', 'sample'); } // ユーザーコントローラーにおいてユーザー情報更新直後に呼び出される public function usersAfterEdit(CakeEvent $event) { // ユーザー情報変更後のデータを参照 var_dump($event->data); } // ユーザーコントローラーにおいてアクションが実行される直前に呼び出される public function initialize(CakeEvent $event) { // サンプルヘルパーをコントローラーに追加 $Controller = $event->subject(); $Controller->helpers[] = 'Sample'; } }
前の記事: 無印MacBookの後悔を公開
次の記事: [baserCMS]blackHoleに吸い込まれてページが見つかりません
2017/01/26 | 開発記録
前の記事: 無印MacBookの後悔を公開
コメント/トラックバック
トラックバック用URL:
この投稿のコメント・トラックバックRSS