jadeでa-blog cmsのテンプレートを書くときの小さなコツ
- 2013年12月08日
この記事は「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を使うといいと思うんだ。