BaserCMSのCakePHP拡張について
BaserCMS は、基本的に従来のCakePHPの開発手法と同様の手法にて開発が可能ですが、独自に拡張を行っている部分もあります。 ここでは、その拡張された内容についてご説明します。
CSV データベース
BaserCMS は、CSVファイルに対してデータを取得、保存する為の CsvDbo を梱包しています。
CsvDbo は、CakePHP が発行する SQL を解析して、CSVファイルに対するオペレーションを行う仕組みとしている為、開発者は、CSVファイルを意識せず、モデルクラスの開発等を行えます。
ただし、CsvDbo の現時点での実装はけして強力なものではなく、GROUP BY 句やサブクエリ等は実行できず、排他制御についても、ファイルロックベースの処理となっているので同時接続に弱く、大規模な WEB システム開発には向いていません。
大規模なWEB システム開発を行う場合は、MySQL や PostgreSQL 等データベースサーバーの利用をおすすめします。
プラグインフック
CakePHP が提供するプラグインの実装はあくまでも、追加機能としてのプラグインという位置づけになっていますが、BaserCMS は、プラグインに対し、フック機能をつける 事で、本体の出力内容を変更できるようになっています。
フック機能というのは、CakePHP が提供する コンポーネント の beforeFilter や、ヘルパーの afterLayout 等のフックメソッドをプラグイン側からフックする為の実装です。 これにより本体のビューが出力する内容を書き換えたりという事ができるようになります。
フックメソッドをフックするには、コンポーネントまたはヘルパーで実装します。
フック用のコンポーネントを設置する場合には、下記のパスにクラスファイルを設置します。
● {プラグイン名}HookComponent
/app/plugins/{プラグイン名}/controllers/components/{プラグイン名}_hook.php
フック用のヘルパーを設置する場合には、下記のパスにクラスファイルを設置します。
● {プラグイン名}HookHelper
/app/plugins/{プラグイン名}/views/helpers/{プラグイン名}_hook.phpビューファイルのサブフォルダ化
一つのコントローラーで利用するビューファイルが増えてくると管理も大変になってきます。
BaserCMSでは、管理画面等のプレフィックスルーティングを行った場合に、自動でサブフォルダを参照する仕組みとなっています。
(例)UsersController の admin_index メソッド用のビューファイル
CakePHP・・・{viewsディレクトリ}/users/admin_index.ctp
BaserCMS・・・{viewsディレクトリ}/users/admin/index.ctp
BaserHelper拡張
CakePHPにおいて、新しいヘルパをビューで利用する場合、コントローラーにヘルパを追加する必要があるのですが、コントローラーをカスタマイズせずに、ヘルパの機能を追加したい場合があります。
例えば、ページ編集画面で利用できるヘルパーをプラグインとして増やしたい場合は、新しいヘルパーをプラグインの中に梱包し、PagesControllerにそのヘルパーを定義する必要があります。この時baserディレクトリ内のPagesControllerを編集してしまえば、BaserCMSのアップデートの際、上書きされてしまいます。かと言って、PagesControllerをカスタマイズする為に、app/controllersに配置する前提であると、利用者は不便になってしまいます。
そこで、BaserCMSでは、既に存在する「BaserHelper」を拡張する仕組みを持っています。
プラグインのヘルパーフォルダ内に次の命名規則でヘルパーファイルを設置すると、BaserHelperのインスタンスを通して呼び出す事ができます。
● {プラグイン名}BaserHelper
/app/plugins/{プラグイン名}/views/helpers/{プラグイン名}_baser.php
この場合、上記ヘルパに test というメソッドを実装すれば、ページ編集画面内で次のように呼び出す事ができます。
<?php $baser->test() ?>
これは、ページ管理では、BaserHelperが読み込まれる前提となっており、それを利用している事になります。
(ちなみに、これは、BehaviorがModelを拡張する仕組みと同じです)

















