コード

プラグインのサポート

2010年1月20日

Nucleusと同様、Jeansでも、必須ではない機能は本体に組み込まず、プラグインとして供給するようにします。プラグインの仕様はまだ考察中なのですが、とりあえずコードを書いてみました(SVNに上げてあります)。

ここの部分、ベータが出るまでに大きく変更される可能性も有ります。プラグイン周りはかなり重要な部分なので、少し時間をかけて吟味する必要があります。jeans.phpやview.phpも、2度ほどスクラッチから書き直したりしているので、プラグインについても(plugin.php)、そうなる可能性が有ります。

今のところ、Hello World!プラグインは次のように書けます。

<?php

class jp_hello extends plugin{
	static public function name(){
		return 'Hello World Plugin';
	}
	static public function author(){
		return 'Your name here';
	}
	static public function url(){
		return 'http://jeanscms.sourceforge.jp/';
	}
	static public function desc(){
		return 'This is Hello World Plugin.';
	}
	static public function version(){
		return '1.0';
	}
	static public function tag_hello(){
		self::p('Hello!');
	}
	static public function tag_world(){
		self::p('Hello World!');
	}
}

すべてスタティックメソッドです。ライブラリクラスと同様、プラグインクラスもこれで行けそうな感じがしており、もしこれで行けるのであれば、ビューの部分のコード(及び、コンパイルされたスキン)がすっきりします。Nucleusのプラグインクラスは、インスタンスを一つしか作成しないので、上記の例のようにスタティックに記述しても、問題なくいくはずです。上記の例では、<%jp.hello%>というスキンタグで『Hello!』を、<%jp.hello.world%>というスキンタグで『Hello World!』を表示します。

このように、Jeansではほとんどオブジェクトを扱いません。そういった意味ではOOPではなく、クラスを名前空間的に使っています。他方、PHP 5.3における名前空間は、おそらくあまり使いません。ただし、Jeans全体のコードを、『\jeans』という空間におくことになると思います(他のツールと同時使用したときの整合性を考えて)。

オブジェクトを使わないということに関しては、いくつか例外があって、一つはPDOクラスのインスタンスです。ただし、これについてはsqlクラスでラップしてしまっているので、プログラマにとってオブジェクトを使っているという意識はあまりないはずです。もう一つの例外が、次に述べるプラグインオプションです。ここで少し、オブジェクトを本格的に使ってみました。

プラグインオプションの読み書きは、次のようにします。
$read=self::option()->key1;
self::option()->key1=$write;

新規オプションの作成と削除は、次のように。
self::option()->create('key2');
self::option()->delete('key1');

すべてのオプション値を操作したいときは、次のように。
foreach(self::option() as $key=>$value) { }

アイテムオプションなどは、次のようにします。
$read=self::option('item',$itemid)->key1;

NucleusプラグインのgetAllMemberOptions()などに相当する機能はまだコードを書いていませんが、例えば
$read=self::option('member','all')->key1;
とすれば、連想配列を返すようにするといったところでしょうか。ただしこの場合は、読み出し専用になるでしょう。

コメント

コメントはありません

コメント送信