MTEntriesで最初のN件とそれ以降のM件との処理の分岐の方法を試してみました。
タイトルと冒頭の記述のとおりですが、よく記事の最初だけ「全文表示」でそれ以降は「概要」を表示するといったカスタマイズがあります。
これを実装するに、offsetモディファイアを利用して除外する件数を指定して処理する方法があります。以下にサンプルを示します。
例えば、ブログ全体で記事が5件あり、最初の2件は記事本文(entrybody)を表示し、それ以降の3件については、記事概要(entryexcerpt)を表示する、といった処理をおこないたいとしましょう。(#たまたま自分のテスト環境が記事5件分しかなかったりするのでそうなっただけですが)それを、最初のほうで2件分のエントリを取り出し記事本文を表示。2回目のEntriesのループでは、先頭2つをoffsetにより除外、そのうち3件分を出力するコードが以下となります。
カウントの部分は趣味でいれてるので無視してくださってかまいません。マークアップはいい加減なものなのでそのまますぐ使えるというものでもないです。
<mt:entries lastn="2"> <div style="background:none #eee; border:1px padding:3em;"> <h2><mt:var name="__counter__" /></h2> <h3><$mt:entrytitle$></h3> <$mt:entrybody$> </div> </mt:entries> <mt:entries lasn="3" offset="2"> <mt:setvar name="count" value="3" op="++"> <div> <h2><mt:var name="count"></h2> <h3><$mt:entrytitle$></h3> <$mt:entryexcerpt$> </div> </mt:entries>
MT4以降でしたかちょっとヴァージョンが定かでないんですが、ループ処理に__counter__とかいった変数がセットされています。
この変数をMTIfを使い、最初2件までentrybodyでそれ以降はentryexcerptにしてみます。
<mt:entries lastn="5"> <mt:if name="__counter__" le="2"> <div style="background:none #eee; border:1px padding:3em;"> <h2><mt:var name="__counter__" /></h2> <h3><$mt:entrytitle$></h3> <div><$mt:entrybody$></div> </div> <mt:Else> <div> <h2><mt:var name="__counter__" /></h2> <h3><$mt:entrytitle$></h3> <p><$mt:entryexcerpt$></p> </div> </mt:if> </mt:entries>
le="2"で、__counter__が2以下ならば、entrybody、そうでなければ、excerptといった感じです。サンプルではわざわざ__counter__の値も表示させてるますから、エントリ数とカウントの数値を確かめてみることができるかと。
MTIf/MTElseのタグがある分、先に示したコードのほうがすっきりしているように感じますが、1つのループ処理で完結してるところが違う点というか、そんなところです。以上です。
どうでもいい話とか
たまにMTIfとはなんぞ?みたいな検索でこられるかたもいらっしゃるようなので、おさらいといいましょうか、勉強を兼ねて試してみました。
最近はローカルで簡単なサンプルのテンプレートを作るときはダイナミックパブリッシングで作成して確認することが多くなってるなあとかなんとか。ファイルがやたら生成されてきては削除してくのもなんだし。。
09:28 +9:00 追記 : サンプルでcounter変数をいれたものが抜けていましたので追加しました。