【初心者向け】a-blog cmsのエントリーサマリーにIFブロックでスパイスを

a-blog cms Advent Calendar 2015 の16日目の記事です。初心者向けの記事になりますので、アップルップルの方やエバンジェリストの方、ヘビーユーザーの方は、軽く読み飛ばすどころか、絶対に読まないでください。仮に読もうという人がいるならば、最後の2段落だけ読んでいただければ結構です。

a-blog cmsはモジュールというものを貼り付けるだけでいろいろなことができますが、実際の案件になるとカスタマイズしなければならない部分も多くなります。

その中でもいろんなところに使えて、一番重宝なのがエントリーサマリー(Entry_Summary)モジュールです。エントリー本文の最初から何文字という感じで概要を抽出することができるので、記事の概略を見せたりすることができます。デモサイトだとこういう風に使われていますね。


エントリーサマリーモジュールの使用例

デフォルトのテーマの一つsite2015(デモサイト)で使われているエントリーサマリー(/themes/site2015/include/module/entry/summary.html)では、サマリーの出力部分はこのように書かれています。

<p class="summaryDetail">{summary}[trim(500, '...')]</p>

半角500文字で切って、最後に「...」を付けるというような意味になります。

このままでも使えるのですが、ブログの概要だと「こんにちは! ○○ショップ店長の△△です! 寒くなったり暖かくなったりしていますが、皆さん風邪などはひかれていませんでしょうか? さて、今日...」のように、設定する字数次第では、本題に入る前の挨拶で切れてしまうことも多くなります。どの記事を見ても挨拶しか見えない記事一覧はブログを読む気を根こそぎ奪ってしまいます。読んでほしい気持ちも伝わらないんですよね・・・。

割と簡単かつ難しい解決方法としては、descriptionをきちんと書いて、それを出力すればいいわけですが、記事によってはdescriptionを書くほどでないという場合もあります。

そこで、descriptionが入力されている場合にはdescriptionを出し、空の場合は概要の先頭を何文字出力するという分岐が出来ればいいわけです。

ここでIFブロックと呼ばれる機能の登場です。a-blog cmsはテンプレート内にPHPは書けないのですが、まあIFだけ使えればなんとかなるのがいいところです。

で、その概要部分の出力を分岐させる書き方は次の通り。

<!-- BEGIN_IF [{entry_meta_description}/nem] -->
<p class="summaryDetail">{entry_meta_description}[trim(240, '...')]</p>
<!-- ELSE -->
<p class="summaryDetail">{summary}[trim(240, '...')]</p>
<!-- END_IF -->

{entry_meta_description}はどこから出てきたのかという話ですが、site2015というテーマには各記事のdescriptionを入力する欄があらかじめカスタマイズによって、カスタムフィールドとして用意されていまして、その変数名が{entry_meta_description}ということになります。(a-blog cmsの変数名は{}に入っているので、テンプレート内でも判別しやすいですね。)

あ、そもそもカスタムフィールドって何?という方は、公式サイトのドキュメントを見てくださいね。

そして、その後の/nemが「空でなかった場合」を表しています。{entry_meta_description}が空でなかった場合、すなわち何かが入力されていれば、

<p class="summaryDetail">{entry_meta_description}[trim(240, '...')]</p>

を出力しますし、何も入っていない状態であれば、

<p class="summaryDetail">{summary}[trim(240, '...')]</p>

で、本文の概要を勝手に抽出して出力します。半角240文字にしたのは、descriptionってだいたいそんなもんだろうという数字なので、好きなように設定してください。

descriptionでは長すぎるから、もう少し短くしたいという場合には、{entry_meta_description}ではなく、別のカスタムフィールドを作って、それを引っ張ってくればいいわけです。

例えば {shortDecription} なんてカスタムフィールドを作って、/themes/site2015/admin/entry/seo.html 辺りに貼り付けてやれば、それだけでカスタムフィールドはできあがります。カスタムフィールドはカスタムフィールドメーカーというのがあるので、それでさくっと作ってやればオッケーです。

IFブロックを使わずに同じ事ができますし、一つの表現をするのに様々なアプローチを取れるa-blog cmsですが、他のCMSを使ったことがある人やプログラム経験のある人なら、IFブロックを使った方がシンプルでわかりやすいかもしれないなぁと思います。

PHPを書けないという人でも、IFブロックの書き方と /nem を覚えるだけで、できることは飛躍的に増えます。

最後に、柄にもないエントリーを書いたこのブログは、2012年の前半にリリースされ、IFブロックが実装される前のバージョンであるa-blog cms 1.5.0(もうすぐ2.6が出るのですが・・・)であることをお伝えしておきたいと思います。