スキン

インラインスキン機能を追加

2010年3月31日

Jeansのスキンは、機能別に別々のincファイルに記述することで、スキン全体の見通しを良くしようとしていて、基本的には、Nucleusのスキン・テンプレートと同じ概念を採用しています。Jeansにおけるテンプレートとしてのスキンは、Nucleusのテンプレートよりも汎用性が高い作りになっていますが、反面、1-2行の記述で済むテンプレートでも一つのincファイルを用意しないといけないので、そのあたりが煩雑になります。

そこで、SVN183では、スキンの中に別のスキンを記述できるようにしました。数行で収まるような簡単なテンプレートの場合、このようなインラインスキンを記述した方がスキン全体がすっきりします。とりあえず、/skins/admin/edititem.incの33行目付近で使ってみました。

次のように記述してあります。
	<%skin(trtd)%>
		<%select(template)%>
		<%case(body)%>
			<tr><td><%data(desc)%></td><td><%view.parse(templates/forminput.inc)%></td></tr>
		<%endselect%>
		
	<%endskin%>
	<%admin.item.edititemformextra(trtd)%>

<%skin(trtd)%>で、trtdという名でインラインスキンを作成することを宣言しています。以下、<%endskin%>までがインラインスキンの中身です。これを次のスキンタグ、<%admin.item.edititemformextra(trtd)%>の中で使っています。引数として、テンプレートとして用いるスキン名に、「trtd」を指定しています。

コメント

yama (2010年3月31日 10:25:23)

インラインで使うので名前をつけずにすむともうひとつスマートな気がします。

<%admin.item.edititemformextra(inline:begin)%>
<%select(template)%>
<%case(body)%>
<tr>
<td><%data(desc)%></td>
<td><%view.parse(templates/forminput.inc)%></td>
</tr>
<%endselect%>
<%admin.item.edititemformextra(inline:end)%>

よく理解してないかもですが、こんな感じはどうでしょう?

Katsumi (2010年3月31日 10:39:29)

確かに、名前をつけなくて良いのであればベターかもしれませんね。ただ、おっしゃる文法は、コンパイラの都合上、使えません。<%skin%>のように対応付けられた特殊なタグで始まり、<%endskin%>のような特殊なタグで終わる必要があります。

今の仕様でも、trtdのところinlineに変更すれば同じような感じにはなります。ところで、インラインスキンの名前(trtd)はここで使う一回きりのもので、同じ名前、例えば<%skin(inline)%>をあちらのスキン、こちらのスキンで同時に用いても、名前が衝突したりすることは無いです。

Kat (2010年3月31日 15:56:44)

もう一つは、JavaScriptやRubyの様に、
<%admin.item.edititemformextra(
  <%skin%>
    <%select(template)%>
    <%case(body)%>
      <tr>....</tr>
    <%endselect%>
  <%endskin%>
)%>
といった感じで記述する方法です。残念ながら、今のコンパイルエンジンでは、こういった入れ子構造の記述ができません。もちろん、やろうと思えばできなくはないのですが、それによりコンパイル速度の大幅な低下が起こる可能性が高いです。表示のたびに毎回コンパイルしていますから、表示速度が遅くなります。

コメント送信