モジュールのエスケープ機能 & モジュールに外部コンテキスト挿入機能を追加

モジュールの外部コンテキスト挿入機能

モジュールの呼び出しに新しい機能が追加されました。今までは、モジュールで表示する情報を制御するには、モジュールIDを作り管理画面で絞り込む情報を入力していたのですが、テンプレート側でも指定可能になりました。

<!-- BEGIN_MODULE Entry_List ctx="bid/1/cid/2" -->
...省略
<!-- END_MODULE Entry_List ->

上記のように とすることで、モジュールのURLコンテキストを指定できます。 指定の仕方はURLコンテキストと同じで、 bid/1/cid/2/eid/3 のように指定できます。

有効なコンテキスト

モジュールID設定との優先度

もちろん id="" をつけてモジュールID化したものに設定することも可能です。ただモジュールIDでもURLコンテキストの設定が可能なのでバッティングしてしまいます。なので設定の優先度が存在しますのでご注意ください。

基本的にはモジュールIDの設定が優先されると考えていただければ大丈夫です。

コンテキストの優先度
  1. URLコンテキストのチェックが入っており、該当のコンテキストが存在するページである場合のURLコンテキスト
  2. モジュールIDの引数に設定した固定値
  3. テンプレートで設定したctx

以上より、モジュールIDが設定されている場合は、チェックが入っていない & 固定値がないコンテキストと、チェックが入っていても、そのページのURLコンテキストがない場合に、テンプレートのコンテキストが使用されます。

モジュールのエスケープ機能

以前までは、モジュール内のブロック(など)や 変数({url}など)はバックスラッシュをつけることにより、エスケープが可能でした。

<!-- BEGIN\ entry:loop -->
\{url\}
<!-- END\ entry:loop -->

これに加え、Ver.2.8 より モジュール自体のエスケープも可能になりました。モジュールが入れ子の場合は通常内側から実行されますのが、モジュールのエスケープを使うことにより、外側のモジュールから実行させることができるようになります。

このモジュールのエスケープと先ほどのテンプレートからのコンテキスト指定を組み合わせることで、今まで出来なかったことができるようになります。例えば、Blog_ChildList と Entry_List を組み合わせて、 ブログ毎にエントリー一覧を出力するようなことが出来ます。サイトマップなども作れると思います。

<!-- BEGIN_MODULE Blog_ChildList -->
<ul class="acms-list-group">
	<!-- BEGIN blog:loop -->
	<li>
		<a href="{url}" class="acms-list-group-item">ブログ: {name}</a>
		<!-- BEGIN_MODULE\ Entry_List ctx="bid/{id}" -->
		<div class="acms-margin-bottom-medium">
			<ul class="acms-list-group">
				<!-- BEGIN\ entry:loop -->
				<li><a href="\{url\}" class="acms-list-group-item">\{title\}</a></li>
				<!-- END\ entry:loop -->
			</ul>
		</div>
		<!-- END_MODULE\ Entry_List -->
	</li>
	<!-- END blog:loop -->
</ul>
<!-- END_MODULE Blog_ChildList -->