【a-blog cms】SetTemplate SetRenderedを使った新しいサイト制作

SetRendered

通常だと同じモジュールを何度も実行しないと実現できないような表示を実現する際に効果を発揮します。例えば、下の図のように、ユニットを画面の右側、もしくは左側、もしくは全体に表示したい場合、SetRenderedは非常に有効な手段です。


<!-- エントリーボディモジュールのentry:loopの一部のソースコード -->
<!-- BEGIN_SetRendered id="entry{entry:loop.eid}" -->
<!--#include file="/include/unit.html" -->
<!-- END_SetRendered -->
<!-- BEGIN_SetRendered id="entry_side{entry:loop.eid}" -->
<!--#include file="/include/main/bid%{BID}/entry_side.html" -->
<!-- END_SetRendered -->
<!-- BEGIN_IF [{entry_position}/eq/center] -->
<div class="acms-push-2 acms-col-8">
	<!-- GET_Rendered id="entry{entry:loop.eid}" -->
</div>
<!-- ELSE_IF [{entry_position}/eq/left] -->
<div class="acms-col-6">
	<!-- GET_Rendered id="entry{entry:loop.eid}" -->
</div>
<div class="acms-col-6">
	<!-- GET_Rendered id="entry_side{entry:loop.eid}" -->
</div>
<!-- ELSE_IF [{entry_position}/eq/right] -->
<div class="entryWrap">
	<div class="acms-col-6">
		<!-- GET_Rendered id="entry_side{entry:loop.eid}" -->
	</div>
	<div class="acms-col-6">
		<!-- GET_Rendered id="entry{entry:loop.eid}" -->
	</div>
</div>
<!-- ELSE -->
	<!-- GET_Rendered id="entry{entry:loop.eid}" -->
<!-- END_IF -->

IFブロック解決後のテンプレートは以下のようになります。

<div class="acms-col-6">
	<!-- ここに SetRenderedで格納された変数が代入されます -->
	<!-- GET_Rendered id="entry{entry:loop.eid}" -->
</div>
<div class="acms-col-6">
	<!-- ここに SetRenderedで格納された変数が代入されます -->
	<!-- GET_Rendered id="entry_side{entry:loop.eid}" -->
</div>

このようにIFブロック解決後にはテンプレート上に少しのGET_Renderedしか残されません。<!-- #include file="/include/unit.html" -->の中身はすでに解決済みで変数化されているため、<!-- #include file="/include/unit.html" -->をIFブロックの中に3回書くよりも早く動作します。

SetTemplate

例えばページャーがあるサマリーとそうでないサマリーなど、ほとんど見た目の変わらないテンプレートを表示する際にincludeするファイル数を減らすことができます。下の例は、エントリーサマリーをページャーなしで表示する例です。

<!-- BEGIN_SetTemplate id="entrySummary" -->
<!-- BEGIN_MODULE Entry_Summary id="{{mid}}" -->
<!--
...略
-->
<!-- BEGIN_IF [{{show_pager}}/eq/true] -->
<!-- ページャーを出すためのテンプレート -->
<!-- END_IF -->
</div>
<!-- END_MODULE Entry_Summary -->
<!-- END_SetTemplate -->
<!-- GET_Template id="entrySummary" mid="defaultEntrySummary" show_pager="false" -->

Get_Templateを使うための工夫

自分は、Set_Templateでテンプレートが定義されているだけのテンプレートをブログごとに用意し、以下のようにincludeして使っています。

<!--#include file="/include/template/common.html" -->
<!--#include file="/include/template/%{BCD}.html" -->

Set_Templateに欲しい機能

デフォルト値の宣言機能が欲しいなと思っています。例えば、Get_Template側で、変数を設定していなかったとしても、Set_Templateの方にデフォルト値が設定されていれば、代わりにそちらの値を利用できたら便利だなと思います。下がその例になります。

<!-- BEGIN_SetTemplate id="entrySummary" mid="defaultSummary" -->
<!-- BEGIN_MODULE Entry_Summary mid="{{mid}}" -->
<!-- ここにソースコード -->
<!-- END_MODULE Entry_Summary -->
<!-- END_SetTemplate -->

<!-- midを指定していなくても、defaultSummaryが代わりに{{mid}}に設定される -->
<!-- GET_Template id="entrySummary" -->

堀 悟大

アップルップル フロントエンドエンジニア。2014年高知大学理学部卒業。学生時代にHTML5のCanvas要素を使ってゲームを作っていたことでWeb全般に興味をもつ。アップルップル入社後はa-blog cmsを便利に使うための機能の実装や、HTML5の技術を使ったデジタルサイネージの実装を行う。趣味は英語。読むことも話すことも好き。

Home
Next entry →