skin.selector
2008年12月15日
Nucleusでは、スキンの表示は、globalfunctions.phpにあるselector()という関数で行う。同様の仕組みをJeansでも実装する必要があるが、これをcore.phpに入れるのにはためらいがあった。というのは、Nucleusのselector()は実行しない場合があるからで、例えばaction.phpの呼び出しなどがこれに相当する。Jeansでは、実行しないコードはパースもしないのが基本だ。
色々考えた末、selector()に相当するスキン変数、<%skin.selector%>を作成することにした。スキンのパースは、skin_start.incから始まり、このincファイルでは例えば次のように記述する。
こうすることにより、
1)selector()相当の機能を、core.phpから外に出すことが可能
2)スキンの記述を、<html>…</html>などの開始タグ・終了タグときれいに対応付けることが可能
といったメリットがある。今後同様に、Nucleusにあるさまざまな機能をこのような形で実装することにより、ハウスキーピング遺伝子のシンプルさを保つような方法を取っていくと思う。
補足:
1)ファイル名をskin_start.incにするかどうかは未定
2)NucleusのスキンをJeansに取り込む際は、次のようなコードを含むskin_start.incを作成すれば事足りる。
3)<%parsedinclude%>はviewクラスで処理される特別なスキン変数であり、ファイル内容はスキンパース時にコンパイルされる。一方、<%skin.selector%>は通常のスキン変数であり、ファイル内容はスキン変数の呼び出し時にコンパイルされる。これは、例えば個別アイテムページの表示の際はメインの目次ページのパースは必要ないため。
色々考えた末、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"> </div>
</div>
</div>
<!-- page footer -->
<%parsedinclude(footer.inc)%>
</body>
</html>
<!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"> </div>
</div>
</div>
<!-- page footer -->
<%parsedinclude(footer.inc)%>
</body>
</html>