一般的なこと

リビジョン61

2009年12月27日

デモサイトを、SVNリビジョン61にアップグレードしました。

Jeans CMSのスキンは、Nucleusのそれよりも多機能で、スキンへの記述だけで色々なことができます。それを少し紹介します。

今まで、このデモサイトをアップグレードするたびにconfigurationその他の設定値を書き換えたりしないといけなかったのですが、それを自動的に行うための、SQLダンプを表示するためのスキンを書いてみました(そのために、リビジョン61にしました)。

まず、以下の内容でインストールディレクトリにbackup.phpを用意しました。
<?php
define('_CONF_SELF',basename(__FILE__));
require(dirname(__FILE__).'/config.php');
view::parse_skin('/admin/backup.inc');


次に、以下の内容でskins/admin/backup.incを用意しました。
<%select(template)%>
<%case(init)%>
	<%if.member.isadmin%>
		<%header(Content-type: text/plain; charset=UTF-8)%>

		<%data.set(jeans_group,table)%>
		<%view.query(backup.inc,SELECT id,name,desc,gid,sgid,xml as x FROM jeans_group)%>

		<%data.set(jeans_item,table)%>
		<%view.query(backup.inc,SELECT id,author,time,title,body,more,gid,sgid,xml as x FROM jeans_item)%>

		<%data.set(jeans_comment,table)%>
		<%view.query(backup.inc,SELECT id, author,itemid,body,xml as x FROM jeans_comment)%>

		<%data.set(jeans_config,table)%>
		<%view.query(backup.inc,SELECT type,name,contextid,value FROM jeans_config WHERE value LIKE 'http://%')%>

		<%data.set(jeans_binary,table)%>
		<%view.query(backup.inc,SELECT id,type,name,contextid,bindata,binsize,time,mime, xml as x FROM jeans_binary)%>

	<%endif%>
<%case(head)%>

	/*****************
	  SQLite dump
	  <%data(table)%>

	*****************/

<%case(body)%>
	<%select(table)%>
	<%case(jeans_group)%>
		INSERT OR REPLACE INTO jeans_group (id,name,desc,gid,sgid,xml)
		VALUES (<%sql.quote(id)%>,<%sql.quote(name)%>,<%sql.quote(desc)%>,<%sql.quote(gid)%>,<%sql.quote(sgid)%>,<%sql.quote(x)%>);

	<%case(jeans_item)%>
		INSERT OR REPLACE INTO jeans_item (id,author,time,title,body,more,gid,sgid,xml)
		VALUES (<%sql.quote(id)%>,<%sql.quote(author)%>,<%sql.quote(time)%>,
		<%sql.quote(title)%>,<%sql.quote(body)%>,<%sql.quote(more)%>,
		<%sql.quote(gid)%>,<%sql.quote(sgid)%>,<%sql.quote(x)%>);

	<%case(jeans_comment)%>
		INSERT OR REPLACE INTO jeans_comment(id,author,itemid,body,xml)
		VALUES (<%sql.quote(id)%>,<%sql.quote(author)%>,<%sql.quote(itemid)%>,<%sql.quote(body)%>,<%sql.quote(x)%>);

	<%case(jeans_config)%>
		INSERT OR REPLACE INTO jeans_config(type,name,contextid,value)
		VALUES (<%sql.quote(type)%>,<%sql.quote(name)%>,<%sql.quote(contextid)%>,<%sql.quote(value)%>);

	<%case(jeans_binary)%>
		INSERT OR REPLACE INTO jeans_binary(id,type,name,contextid,bindata,binsize,time,mime,xml)
		VALUES (<%sql.quote(id)%>,<%sql.quote(type)%>,<%sql.quote(name)%>,<%sql.quote(contextid)%>,
			base64decode('<%data.base64(bindata)%>'),
			<%sql.quote(binsize)%>,<%sql.quote(time)%>,<%sql.quote(mime)%>,<%sql.quote(x)%>);

	<%endselect%>
<%case(foot)%>

	/*** end <%data(table)%> ***/

<%endselect%>
(2010/03/01 SVN-147用に改定)

Jeans CMSで使えるスキン変数の一覧や詳細などはまた折を見て紹介しますが、ここでは条件分岐やスキン・テンプレートの概念など、文法の全体像に関することを少し紹介します。

条件分岐は、<%if%>~<%endif%>以外に、<%select%>~<%case%>~<%endselect%>が使えます。これはPHPのswitchに似ていますが、breakを記述する必要が無い所が異なります(VBの、SELECT CASE のイメージです)。テンプレートに使うスキンでは、<%select(template)%>のようにして用います。

もうひとつ、Nucleusと異なる大きな点は、データという概念があることです。例えば、<%data(body)%>と記述すれば、データ中のbody要素の内容が表示されます。bodyなどのキー名は、SQLクエリーのSELECT節に由来します。つまり、SQLクエリーの出力結果が、データということになります。

上のスキンの例では、かなりマニアックなスキン変数を色々と使い、SQLダンプの出力を行わせました。<%view.query%>は、例えばアイテムのsticky表示などに便利かもしれません。

<%view.query%>に限らず、<%blog%>などの一般的なスキン変数でデータの内容を表示させると、<%case(head)%>、<%case(body)%>の繰り返し(アイテムの個数分)、<%case(foot)%>の順に表示されます。これらの部分の記述が、Nucleusにおけるテンプレートに相当します。このように、Jeansでは、スキンとテンプレートの間に明確な差はありません。<%select(template)%>を記述したスキンが、Nucleusのテンプレートと同じ働きをします。

もうひとつ、Jeans CMSのスキンの特徴として、<?php~?>を用いて、PHPコードをスキンに埋め込むことができます。この記述をほとんど使わなくて済むようにJeans CMSを構築していくつもりですが、どうしてもPHPでないといけないようなときに、便利だと思います。

コメント

コメントはありません

コメント送信