記事ページのローカルナビゲーション(親と子カテゴリごとの記事一覧)を作る方法

親カテゴリ、子カテゴリを階層で表示し、記事一覧を作成する。

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>
新着記事