MovableType
記事ページのローカルナビゲーション(親と子カテゴリごとの記事一覧)を作る方法
親カテゴリ、子カテゴリを階層で表示し、記事一覧を作成する。
Movable Type ユーザーコミュニティに質問がありましたので、サンプルテンプレートを作成しました。(解決済みな気もしますが)
MTSubCategoriesタグと、mt:HasNoParentCategoryタグを使いつつ、MTSubCatsRecurseタグで階層表示を行います。
記事ページのローカルナビゲーション(親と子カテゴリごとの記事一覧表示)
仕様
このような構造のローカルナビゲーションを表示します。
■親カテゴリ1(←リンクなし カレント表示)
└子カテゴリ1-1(←テキスト表示 アーカイブへのリンクなし)
└★記事A1(←カレント表示)
└記事A2(←記事へリンク)
└子カテゴリ1-2
└記事B1
└記事B2
└子カテゴリ1-3
└記事C1
└記事C2
■親カテゴリ2(←属する一番最初の記事にリンク)
■親カテゴリ3(←属する一番最初の記事にリンク)
親カテゴリ配下に記事あり
・親カテゴリを表示(リンクなし カレント表示)
・子カテゴリを表示(リンクなし)
・記事を表示(リンクあり カレント表示)
記事テンプレート
・記事に指定されている子カテゴリの親カテゴリの場合
階層表示する。
・記事に指定されている子カテゴリの親カテゴリでないの場合
親カテゴリ配下から最新1件の記事を表示(リンクあり)
カテゴリ別テンプレート
・表示されているカテゴリページのカテゴリの場合
階層表示する。
・表示されているカテゴリページのカテゴリでないの場合
親カテゴリ配下から最新1件の記事を表示(リンクあり)
サンプルテンプレート
記事テンプレートのときのみ、記事IDと、記事に指定されている子カテゴリのID、その親カテゴリIDを宣言します。
<mt:if name="archive_class" eq="entry-archive">
<mt:EntryID setvar="CurrentEntryID">
<mt:EntryPrimaryCategory>
<mt:ParentCategory>
<mt:CategoryID setvar="CurrentParentCategoryID">
</mt:ParentCategory>
<mt:CategoryID setvar="CurrentCategoryID">
</mt:EntryPrimaryCategory>
</mt:if>
カテゴリ別テンプレートのときのみ、ページに表示されている子カテゴリのID、その親カテゴリIDを宣言します。
カテゴリ別テンプレートが不要ならこちらは不要です。
<mt:if name="archive_class" eq="category-archive">
<mt:CategoryID setvar="CurrentCategoryID">
<mt:ParentCategory>
<mt:CategoryID setvar="CurrentParentCategoryID">
</mt:ParentCategory>
</mt:if>
親カテゴリIDと現在のページの親カテゴリのIDが一致しない場合は、カテゴリごとの最新1件を表示し、一致する場合は、カテゴリ名のみ表示します。
MTEntriesタグ に「include_subcategories」を指定すると、子カテゴリ配下の記事が全て取得ができます。
<dl>
<mt:SubCategories top="1">
<mt:HasNoParentCategory>
<mt:ignore>親カテゴリ</mt:ignore>
<mt:if tag="CategoryID" eq="$CurrentParentCategoryID"><dt class="active"><mt:else><dt></mt:if>
<mt:if tag="CategoryID" ne="$CurrentParentCategoryID">
<mt:Entries lastn="1" include_subcategories="1"><a href="<mt:EntryPermaLink>"><mt:CategoryLabel></a></mt:Entries>
<mt:Else>
<mt:CategoryLabel>
</mt:if>
</dt>
<mt:Else>
<mt:ignore>子カテゴリ</mt:ignore>
<mt:ParentCategory><mt:CategoryID setvar="ParentCategoryID"></mt:ParentCategory>
<mt:if name="ParentCategoryID" eq="$CurrentParentCategoryID">
<mt:If tag="CategoryCount">
<dd>
<mt:CategoryLabel>
<mt:Entries lastn="0">
<mt:EntriesHeader><ul></mt:EntriesHeader>
<li><a href="<mt:EntryPermaLink>"<mt:if tag="EntryID" eq="$CurrentEntryID"> class="active"</mt:if>><mt:EntryTitle></a></li>
<mt:EntriesFooter></ul></mt:EntriesFooter>
</mt:Entries>
</dd>
</mt:if>
</mt:if>
</mt:HasNoParentCategory>
<mt:SubCatsRecurse>
</mt:SubCategories>
</dl>