MTの予約変数
Posted by poundhound on
すぐ忘れるので覚え書き
- メインテンプレート main_index
- ブログ記事とウェブページ feedback_template
- ブログ記事リスト archive_listing
- アーカイブインデックス archive_index
- 検索結果 search_results
- コメントプレビュー comment_preview_template
- コメント完了 comment_response_template
すぐ忘れるので覚え書き
MTネタ連発ですが、今回はMTでのパンくずリストを考えてみました。
カテゴリーアーカイブで表示するパンくずリストで、親カテゴリを含めてリストアップしてエントリーの無いカテゴリーに関してはカテゴリーアーカイブへのリンクは入れず、今表示しているカテゴリーのリンクも入れないと言うもの。
MTのソースコード
<div class="topicPath">
<mt:SetVarBlock name="this_category"><$mt:CategoryLabel$></mt:SetVarBlock>
<ul>
<li><a href="<$mt:BlogURL$>">Home</a></li>
<mt:ParentCategories>
<mt:SetVarBlock name="category_list"><$mt:CategoryLabel$></mt:SetVarBlock>
<mt:If name="category_list" ne="$this_category">
<mt:IfNonZero tag="CategoryCount">
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:Else>
<li><$mt:CategoryLabel$></li>
</mt:IfNonZero>
<mt:Else>
<li class="noImage"><em><$mt:CategoryLabel$></em></li>
</mt:If>
</mt:ParentCategories>
</ul>
</div>
なんだかトチ狂ったエントリーばっかり。自分の勉強不足を痛感(苦)。
よくよく考えてみるとmt:Entries自体がエントリーに関する様々な情報を持ってループしてる訳ですよね。mt:Entriesを良く理解していませんでした。単純に次のコードで今表示しているエントリーを排除出来ることに気づきました。
<mt:SetVarBlock name="category_list"><$mt:EntryCategory$></mt:SetVarBlock>
<mt:SetVarBlock name="this_entry"><$mt:EntryTitle$></mt:SetVarBlock>
<dt>カテゴリー:<$mt:GetVar name="category_list"$> のその他の記事</dt>
<dd>
<ul>
<mt:Entries category="$category_list">
<mt:SetVarBlock name="entries"><$mt:EntryTitle$></mt:SetVarBlock>
<mt:If name="entries" ne="$this_entry">
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
</mt:If>
</mt:Entries>
</ul>
</dd>
mt:Entriesのループに入る前に今のエントリータイトル(別にエントリーIDとか何でも良い)を比較用の変数にセット。mt:Entriesループの一番最初でentries変数にループしているエントリータイトルを入れて現在表示しているエントリータイトルthis_entryと比較して異なれば表示。この比較をエントリー数だけループ。
ばかだなぁ俺...
一応エントリー
<mt:SetVarBlock name="category_list"><$mt:EntryCategory$></mt:SetVarBlock>
<mt:SetVarBlock name="this_entry"><li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:SetVarBlock>
<mt:Entries category="$category_list">
<mt:SetVarBlock name="push(entry_list)"><li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:SetVarBlock>
</mt:Entries>
<$mt:Var name="count(entry_list)" setvar="counter"$>
<ul>
<mt:For var="i" from="0" to="$counter">
<mt:If name="entry_list[$i]" ne="$this_entry">
<$mt:GetVar name="entry_list[$i]"$>
</mt:If>
</mt:For>
</ul>
同一カテゴリーに属したエントリーを表示させるのに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>