mt:For(ループ)を使って同一カテゴリーに属したエントリーをブログ記事に表示する

同一カテゴリーに属したエントリーを表示させるのにmt:Entriesに現在のカテゴリーを取得した変数をモディファイアに与えても今表示しているエントリーも表示されてしまったので、ちょっとmt:Forタグを使って今表示している記事を排除してみました。

追記

よくよく考えてみるとmt:Entries自体がループなんですよね。mt:Forなんて使う必要ないですね。

<mt:SetVarBlock name="category_list"><$mt:EntryCategory$></mt:SetVarBlock>
<$mt:SetVar name="counter" value="0"$>
<mt:Entries category="$category_list"$>
<$mt:SetVar name="counter" op="++"$>
<mt:SetVarBlock name="permalink_list[$counter]"><$mt:EntryPermalink$></mt:SetVarBlock>
<mt:SetVarBlock name="title_list[$counter]"><$mt:EntryTitle$></mt:SetVarBlock>
</mt:Entries>
<dt>カテゴリー:<$mt:GetVar name="category_list"$> のその他の記事</dt>
<dd>
<mt:SetVarBlock name="this_permalink"><$mt:EntryPermalink$></mt:SetVarBlock>
<mt:SetVarBlock name="this_title"><$mt:EntryTitle$></mt:SetVarBlock>
<ul>
<mt:For var="i" from="1" to="$counter">
<mt:If name="permalink_list[$i]" ne="$this_permalink">
<li><a href='<$mt:GetVar name="permalink_list[$i]">'>
<mt:If name="title_list[$i]" ne="$this_title">
<$mt:GetVar name="title_list[$i]"$></a></li>
</mt:If>
</mt:If>
</mt:For>
</ul>
</dd>

解説です

  • 1行目のmt:SetVarBlockで現在のカテゴリーをcategory_list変数に入れます。
  • 3行目のmt:SetVarでループ用変数counterを用意して初期値を0とします。
  • 4行目のmt:Entriesのcategoryモディファイアに1行目で用意したcategory_listをセットします。これで現在表示しているカテゴリのエントリーのみに記事をしぼれます。
  • 5行目のmt:SetVarでcounter変数に1を足します(加算)
  • 6行目のmt:SetVarBlockでpermalink_list[$counter]配列にエントリー記事のパーマリンクURLを入れます。
  • 7行目のmt:SetVarBlockでtitle_list[$counter]配列にエントリータイトルを入れます。
  • 8行目の/mt:EntriesでEntriesループを抜けます。
  • 12行目のmt:SetVarBlockで現在表示しているエントリー記事のパーマリンクURLをthis_permalink変数に入れます。
  • 13行目のmt:SetVarBlockで現在表示しているエントリータイトルをthis_title変数に入れます。
  • 15行目のmt:Forで先ほど取得したエントリー記事の数($counter)だけループさせます。
  • 16行目のmt:Ifでi番目のパーマリンク(permalink_listのi番目)と現在表示しているエントリー記事のパーマリンク(this_permalink)を比較して異なれば次の行を実行します。
  • 17行目のmt:GetVarでi番目のパーマリンクを表示します。
  • 18行目のmt:Ifでi番目のエントリータイトル(title_listのi番目)と現在表示しているエントリータイトル(this_title)を比較して異なれば次の行を実行します。
  • 19行目のmt:GetVarでi番目のエントリータイトルを表示します。
  • 22行目でmt:Forのループを抜けます。

何故かエントリータイトルだけをキーにして条件を振り分けようとしたら上手く行かずにもの凄い苦労してしまいました。