こんにちは、@ryuringです。
最近、ユーザーズフォーラムでよく話題になっている事を少しまとめてみました。
BaserCMSのカスタマイズの参考になれば幸いです。
(もう少し余力があればちゃんとドキュメント化したかったのですが、取り急ぎ参考程度にどうぞ)
こんにちは、@ryuringです。
最近、ユーザーズフォーラムでよく話題になっている事を少しまとめてみました。
BaserCMSのカスタマイズの参考になれば幸いです。
(もう少し余力があればちゃんとドキュメント化したかったのですが、取り急ぎ参考程度にどうぞ)
BaserCMS は、PHP フレームワークである CakePHP の拡張性をそのまま踏襲しています。
これは、BaserCMS コアパッケージのみをバージョンアップするだけで、新機能やバグフィックスを取り込めるようにする為です。
BaserCMS をダウンロードしてパッケージを展開すると、app / baser / cake の3つフォルダが梱包されています。
独自に制作・開発するプログラム等は 全て appフォルダに格納していきます。
これにより、BaserCMS や CakePHP のコアパッケージがバージョンアップした場合、各フォルダを上書きするだけで簡単にアップデートできる仕組みを実現しています。
さらに、appフォルダの中には、webrootフォルダが梱包されており、このフォルダが重要な役割を持っています。通常、展開したファイルやフォルダ群は、WEBサイトの公開領域のトップフォルダ(ドキュメントルート)に保存しますが、その場合、上記の webroot フォルダが事実上のドキュメントルートの役割をする事になります。
ようするに、静的ファイル等はwebroot内に配置する事で、ブラウザよりアクセスする事ができるようになります。
例えば、app/webroot/test.html として配置した場合、http://xxx.xx/test.html として参照する事ができます。この構成が複雑でわかりにくいという場合は、静的ファイルの置き場所を通常の場所に切り替える方法もあります。
BaserCMS ではテーマという仕組みがあり、app/webroot/themed/ 内にテーマを配置します。
テーマ内には、img フォルダや、css / js フォルダを配置する事ができますが、app/webroot/ 内にも css 等のフォルダがあり、どちらに設置してよいか迷ってしまいます。
実はどちらに配置してもよいというのが正解で運用方法によって選択する必要があります。
それは、BaserHelper を利用する事で、実際の配置場所を意識せずとも透過的に呼び出せる仕組みが準備されているからです。
例えば、CSS を読み込む場合に、$baser->css('import') と記述すると次の順番で、CSSファイルを捜索し先に見つかった CSS が適用されます。
app/webroot/themed/{テーマ名}/css/import.css
app/webroot/css/import.css
baser/vendors/css/import.css
つまり、BaserHelper を利用するのであれば、どちらに配置しても読み出されるという事です。
なお、テーマフォルダに配置するメリット、デメリットは次のとおりです。
CakePHP の流儀にのっとり、独自のプログラムを開発する場合、コントローラーや、モデルは、appフォルダ内に配置していきます。
ビューは、appフォルダ内のviews でも、テーマでもどちらでも構いません。
BaserCMS の管理画面に独自のプログラムを組み込むには、BaserCMSの流儀も若干ありますのでそちらに従います。
CakePHP の開発知識があれば簡単に管理画面を用意する事ができますので便利です。
既存で用意されているコアプログラムのカスタマイズを行いたい場合、cakeフォルダや baserフォルダのファイルをappフォルダにコピーして、そちらをカスタマイズします。
例えば、BaserHelper をカスタマイズする場合、 baser/views/helpers/baser.php を app/views/helpers/baser.php としてコピーする事でそちらが優先して読み込まれます。
※ この場合、読込ファイルの変更を確実に反映させるにはサーバーキャッシュを削除します。
もちろん直接修正をかけてもよいのですが、app にコピーしてそちらを編集する事で、アップデート時にカスタマイズ部分を完全に失ってしまうというリスクを回避する事ができます。
ただ、この場合、アップデートで、カスタマイズ対象のファイルに改善が入っていた場合、その恩恵を受けられなくなります。改善をカスタマイズしたファイルに反映させるには、手作業で反映(マージ)させるしかありません。
アップデートに影響がないようにコアファイルをカスタマイズするには、プラグインとして開発を行う必要があります。
プラグイン開発には今のところ大きく分けて4パターンあります。
例えば、コアパッケージに梱包されているブログプラグインでは、基本的に(1)として作られています。
そして、ウィジェットとして、最新記事の一覧や、カテゴリ一覧を提供しています。(4)
また、$baser->blogPosts()として、BaserHelper を拡張し(3)、Web ページの編集領域にブログのタイトルリストを出力機能を追加しています。
ツイッタープラグインでは、ブログ記事の編集画面にツイッターへの送信フォームを配置しています。(2)
アップローダープラグインでは、ページの編集画面やブログ記事の編集画面にアップロードしたファイルの選択機能を追加しています。(2)
プラグインも基本的には、CakePHP の流儀に従えば簡単に開発できます。
※ こちらもちょびっと BaserCMS の流儀があります。
「コーポレートサイトにちょうどいい」をキャッチフレーズとした BaserCMS ですが、アイデア次第で色んなカスタマイズが行えます。
是非お試しください!