コード

thumbnail用のイベントを準備 [コード]

2010年11月22日

画像のThumbnailの扱いについて色々とできるように、Jeans CMS本体を整備し、SVN314としました。

「サムネイルの保存サイズ」 「サムネイルの表示サイズ」 「管理画面でのサムネイルの表示サイズ」の3つが、グローバル設定で指定できます。

usingタグ [コード]

2010年8月15日

Jeans CMSのかなり初期のバージョンでは、すべてのスキンタグについてオーバライドすることが可能でした。例えば、あるプラグインで<%blog%>タグをオーバーライドすることにより、スキンの書き換え無しに、表示内容をプラグインで自由にカスタマイズすることが可能になっていました。

現在の仕様では、例えばjp_Testというプラグインを使用する場合、<%blog%>を<%jp.test.blog%>のように書き換える必要があります(jp_Test::tag_blog()を用意した場合)。以前あった「オーバーライド」の仕様では、jp_Testの側に「<%blog%>タグの機能を変更しますよ」という記述を入れておけば、ユーザーの側では<%blog%>タグを書き換える必要はなかったわけです。

strftime代替機能 [コード]

2010年3月9日

strftimeがサーバの設定によってさまざまな挙動をするので、Jeansでは代替機能を提供すればどうかというアイデアをいただきました

そこで、strftimeの代替関数を書いてみました。ポイントとしては、ロケールを指定するのではなく、言語ファイル(skins/jeans/language/japanese.phpなど)で表示する内容を設定するということです。

デストラクタ [コード]

2010年1月27日

現在、プラグインをサポートするため、plugin.phpを整備中です。ほとんどできました。

プラグインオプションを保存する際、SQLクエリーをそのつど発行するのではなく、Jeansのシャットダウン時にまとめて発行することで速度の向上を図ろうとしています(その前後で『BEGIN』と『COMMIT』を実行)。はじめ、この実装にオブジェクトのデストラクタ(__destruct()メソッド)を利用していたのですが、ここではまりました。

オブジェクトごとに、デストラクタの実行順序を制御したいのですが、どうもこれがうまくいきません。PHPに限った話ではないのですが、やはりデストラクタ部分の実装は難しいです。この部分でコードの実行をクラス内のメソッド呼び出しにとどめておけば、個々のデストラクタはそれぞれ問題なく実行されます。しかし、制御が他のオブジェクトに依存するようなケースでうまく実行させるのは、PHPの内部構造までちゃんと把握していないと無理だと感じました。

そこで、register_shutdown_function()でcore::shutdown()を登録し、ここからそれぞれのクラスのshutdown()メソッドをスタティックに呼び出すことにしました。register_shutdown_function()で登録した関数の実行は、オブジェクトの破棄よりも先に起こるようです(5.2と5.3の両方で確認しました)。

この方法で、うまく制御できているように思います。プラグインでもshutdown()メソッドが使えるので、多分、便利です。

プラグインのサポート [コード]

2010年1月20日

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

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

スキン変数からスキンタグへ [コード]

2010年1月11日

Nucleusでは、<%blog%>などの表記を『スキン変数』と呼んでいて、Jeansでもそのように扱ってきました。これがどのような経緯で変数(variables)と呼ばれるようになったのかよく知りませんが、個人的には、これを変数と呼ぶのにどうも違和感があります。

これはむしろタグなのではないかと思うし、実際、WordPressなどの別のツールで似た機能をするものはタグと呼ばれています。そこで、Jeansでもこれをタグと呼ぶことにしました。つまり、Nucleusにおけるスキン変数は、Jeansではタグもしくはスキンタグということになります。Jeansではテンプレートもスキンも同じなので、Nucleusのテンプレート変数に相当するものも、タグもしくはスキンタグで、多くの場合<%data%>タグがこれに相当します。

この名称変更に伴い、いままでスキンタグ(スキン変数)を実装するためのメソッドを

public static function var_xxx()

としていたところ、

public static function tag_xxx()

に変更しました(リビジョン79)。

検索機能を追加 [コード]

2009年12月23日

検索機能はblogクラスに追加しました。blog::var_blog()メソッドの中で、次のようにしています。
		if (self::$narrowby['search'] && isset($_GET['query_text'])) {
			$search=true;
			self::sql_search_compile_query($_GET['query_text']);
		} else $search=false;
		foreach(self::$narrowby as $key=>$value) self::$narrowby[$key]=false;
		// Prepare query and array-data
		$query='SELECT '.
			(略)
			($search ? 'AND libs_blog_search(i.title,i.body,i.more) ':'').
			'ORDER by time DESC '.
			'LIMIT <%limit%> OFFSET <%offset%>';

libs_blog_search(i.title,i.body,i.more)のところ、SQLiteのユーザー定義関数をblog::sql_libs_blog_search()にわりあてて、次のようにしました。