Nullyのぶろぐ

仙台で働くエンジニアの日記

TomatoCMSのプラグインの作り方

だいぶご無沙汰な更新になってしまい申し訳ありません...。

だいぶ放置気味になったので、今回はTomatoCMSというCMSプラグインの作り方を!

※ 本記事はプログラマ向けの記事となっております。

TomatoCMSとは

TomatoCMSはZendFrameworkをベースに作られているCMSです。

プラグイン機構はもちろん、翻訳機構まで付いていて、海外では注目を浴びているらしいCMSです。

また、「Your web site is Widget」という概念があり、コンテンツ1つ1つをウィジェットで構成できるように設計されています。

詳細については公式サイトを御覧ください。

プラグインの型枠を作る

その前にちょっと

TomatoCMSのプラグイン基本的にZend_Controller_Plugin_Abstractを継承しているクラスの集まりです。

なので、Zend_Controller_Plugin_Abstractの中で定義されているフックポイントでの起動ができます。

具体的には

  • routeStartup
  • routeShutdown
  • dispatchLoopStartup
  • preDispatch
  • postDispatch
  • dispatchLoopShutdown

の6つのフックポイントとなります。

プラグインを格納するディレクトリは「APPLICATION_PATH/plugins/」ディレクトリになります。

このディレクトリにプラグインを追加していくことでプラグインとして利用することができます。

プラグインは以下のファイルが最低でも必要になります。

これら2つの役割はそれぞれ次のとおりになります。

about.xml

プラグインの詳細情報をXML形式で記述するファイルです。

このファイルが無ければプラグインとして登録することができません。

Plugin.php

プラグインとして動作するPHPファイルです。

Tomato_Controller_Pluginクラスを継承している必要があります。

また、プラグイン用設定ファイルとしてconfig.xmlもありますが、必須という訳ではありません。

纏めると以下のようになります。

helloully/(テストで作るプラグインのディレクトリ)

├ about.xml

├ config.xml(あってもなくてもよし)

└ Plugin.php

これでプラグインとして利用する準備が出来上がりました。

次に簡単なコードを書いていきます。

about.xmlを書く

about.xmlプラグインの説明やプラグインクラス名を記述するファイルとなります。

プラグインとしてTomatoCMSに認識させるためには以下の項目が最低でも必要になります。

  • DOCTYPE:XMLの書式定義
  • name:プラグインクラス名
  • description:プラグインの説明
  • author:製作者名
  • email:製作者のメールアドレス
  • version:バージョン情報
  • license:ライセンスについて

また、これら以外にもmoduleやthumbnailなどがありますが、今のところまだ調べておりません。(面倒だt(ry)

このabout.xmlXML形式で記述しなければならないので、以下のように記述して保存してあげます。

<!DOCTYPE plugin SYSTEM "http://schemas.tomatocms.com/dtd/plugin_about.dtd">

<plugin>

<name>HelloNully</name>

<description>Nullyの素敵な言葉をどうぞ</description>

<author>Nully</author>

<email>a@b.com</email>

<version>1.0.0</version>

<license>ひゃくおくまんえん!</license>

</plugin>

ここで指定したnameの部分は作るプラグインのクラス名の一部になります。

今回の場合はPlugins_HelloNully_Pluginとなるので、HelloNullyとしています。

クラスを書く

プラグインの主体となるクラスを書くわけですが、クラス名には一定のルールがあります。

それは、Plugins_プラグイン名(nameの間に書いた名前)_Pluginというクラス名を付けなければならないのと、Tomato_Controller_Pluginを継承する必要がある事の2点です。

これに気をつければ後はZendFramework標準のControllerPluginと同様に処理することができます。

例えば、postDispatchのタイミングでNullyからの素敵な言葉を得るには以下のようなコードになります。

class Plugins_HelloNully_Plugin extends Tomato_Controller_Plugin

{

// 素敵な言葉一蘭

protected $_messages = array(

"おはよう!",

"こんにちは!",

"こんばんは!",

"おやすみなさい!",

"なぁすけべしようや",

);

public function postDispatch(Zend_Controller_Request_Abstract $request) {

$num = rand(0, count($this->_messages) -1);

echo $this->_messages[$num];

}

}

これで、postDIspatchが実行されたタイミングでNullyからの素敵なメッセージを表示することが可能となりました。

後は、管理画面からこのプラグインを有効化してあげることで、アクセスのあるたびにpostDispatchが実行され、Nullyからの素敵なメッセージが表示されます。

補足

先ほど出てきたconfig.xmlってなんぞ!

これはプラグインからのみ利用することができる設定ファイルです。

これも形式はXML形式で記述する必要があります。

以下に標準で同梱されていたプラグインから設定ファイルを抜き出してみました。

<!DOCTYPE params SYSTEM "http://schemas.tomatocms.com/dtd/plugin_config.dtd">

<params>

<param name="ips">

<description><![CDATA[The list of denied IP addresses. Seperated by a comma (,)]]></description>

<value>123.54.76.98,123.45.67.89,111.22.33.44</value>

</param>

</params>

基本的にはparamsノード以下にname属性付きのparamノードがいます。

そのノードの下には必ずvalueノードがいる必要があります。

このvalueノードにプラグインで利用する設定を記述していくことで、プラグインからは以下のように記述することで設定データとして取得することができます。

$this->getParam("ips");

ipsはparamノードのname属性に指定した名前を指定します。

終わりに

TomatoCMSは拡張性の高いZendFrameworkを基底にしているので、ZendFrameworkユーザーの方はもちろん、PHPを普段から利用しているかたにはとても便利なCMSになるのではないかと勝手ながら思い込んでいます。

PS.

ちゃんと動作検証していないので動くかわかりませんが、きっと動くはず...!