withComputer

jadeでa-blog cmsのテンプレートを書くときの小さなコツ

この記事は「a-blog cms Advent Calendar 2013」の8日目でもあります。

a-blog cmsのテンプレート記述は、モジュール名などを記したコメントタグを使いますよね。たとえば下記は、Entry_Summaryというモジュールを使って記事一覧を出力する場合のHTMLの記述例です。


<!-- BEGIN_MODULE Entry_Summary -->
<ul>
<!-- BEGIN entry:loop -->
<li><a href="{url}">{title}</a></li>
<!-- END entry:loop -->
</ul>
<!-- END_MODULE Entry_Summary -->

ここで注目してもらいたいのが1行目です。


<!-- BEGIN_MODULE Entry_Summary -->

正しくはこのように「Entry_Summary」のあとに「半角スペース」を入れて「コメントの閉じタグ」を入れます。が、この「半角スペース」を記入せずに


<!-- BEGIN_MODULE Entry_Summary-->

と書いてしまうと、以降の変数がそのまま表示されるなど、記述が正しく解釈されません。だから気をつけましょうね!

・・・という話なんですが、パワーユーザーは「いや普通は半角スペース入れるだろJK」とか「モジュールの記述はスニペットからコピペでおk」とおっしゃるかもしれません。僕もそう思っていた時期がありましたし、長い間この事実に気づくこともありませんでした。そう、jadeに出会うまではね。

jadeはHTMLのテンプレートエンジンです。最近はjadeでa-blog cmsのテンプレートも書いているのですが、jadeでコメントを書く際は以下のように記述します。


// BEGIN_MODULE Entry_Summary

単純ですね。これがコンパイルされると、以下のように出力されるわけです。


<!-- BEGIN_MODULE Entry_Summary-->

はい。見事にコメント文字列とコメント閉じタグの間に半角スペースがありません。jadeでわざわざ半角スペースを入れても無視されます。なぜそんな仕様なんだ!

これではテンプレートが書けないので困ったなぁと試行錯誤をした結果、僕なりの解決方法をいくつか見つけました。以下のようにidをつける(つまりモジュールIDを指定する)と、コメントの終了タグの前に半角スペースがなくても正しく解釈されます。


<!-- BEGIN_MODULE Entry_Summary id="hoge"-->

これを出力するためのjadeの記述は


// BEGIN_MODULE Entry_Summary id="hoge"

ですね。また、idではなく他の文字列でも動作には影響ないっぽいです。


<!-- BEGIN_MODULE Entry_Summary hogehoge-->

でもこれはキレイじゃないという場合は、空のidを入れても良いかもしれません。つまりjadeだとこう書くって話ですね。


// BEGIN_MODULE Entry_Summary id=""

コメントの閉じタグの直前でなく「Entry_Summary」の直後に半角スペースがないことが、テンプレートの解釈に問題を起こすということなのかなと思っています(もし間違ってたら教えてください)。特にa-blog cms liteを使うと(普段は指定することの多い)モジュールIDを指定しないので、うっかりハマってしまうことも起こるかと。

ということで、非常に読者対象の狭い記事ですが、誰かの助けになるやもしれないので情報を流しておきます。a-blog cmsユーザーはもちろん、みんなもっとjadeを使うといいと思うんだ。