General

skin.selector

2008年12月15日

Nucleusでは、スキンの表示は、globalfunctions.phpにあるselector()という関数で行う。同様の仕組みをJeansでも実装する必要があるが、これをcore.phpに入れるのにはためらいがあった。というのは、Nucleusのselector()は実行しない場合があるからで、例えばaction.phpの呼び出しなどがこれに相当する。Jeansでは、実行しないコードはパースもしないのが基本だ。

色々考えた末、selector()に相当するスキン変数、<%skin.selector%>を作成することにした。スキンのパースは、skin_start.incから始まり、このincファイルでは例えば次のように記述する。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%text(_SKIN_LANG)%>" lang="<%text(_SKIN_LANG)%>">
<head>
<%skin.selector(header)%>
</head>
<body>
<%skin.selector%>
</body>
</html>

こうすることにより、

1)selector()相当の機能を、core.phpから外に出すことが可能
2)スキンの記述を、<html>…</html>などの開始タグ・終了タグときれいに対応付けることが可能

といったメリットがある。今後同様に、Nucleusにあるさまざまな機能をこのような形で実装することにより、ハウスキーピング遺伝子のシンプルさを保つような方法を取っていくと思う。

補足:
1)ファイル名をskin_start.incにするかどうかは未定

2)NucleusのスキンをJeansに取り込む際は、次のようなコードを含むskin_start.incを作成すれば事足りる。
<%skin.selector%>

3)<%parsedinclude%>はviewクラスで処理される特別なスキン変数であり、ファイル内容はスキンパース時にコンパイルされる。一方、<%skin.selector%>は通常のスキン変数であり、ファイル内容はスキン変数の呼び出し時にコンパイルされる。これは、例えば個別アイテムページの表示の際はメインの目次ページのパースは必要ないため。

コメント

Kat (2008年12月15日 14:26:37)

上記機能のスキン変数は、<%skin%>とした。また、デフォルト呼び出しファイルのファイル名は、skin.inc。

これらの仕様は、後に変更される可能性有り。

Kat (2008年12月15日 14:51:44)

現在のデフォルトスキンのskin.incは次の通り

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<%parsedinclude(head.inc)%>
</head>

<body>

<!-- page header -->
<%parsedinclude(header.inc)%>

<!-- page content -->
<div id="mainwrapper">
<div id="wrapper">
<%skin%>
<div class="clearing">&nbsp;</div>
</div>
</div>

<!-- page footer -->
<%parsedinclude(footer.inc)%>

</body>

</html>

コメント送信