TopMovable Typeカスタマイズカテゴリー > 2012年12月
2012年12月10日

Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示する

December 10,2012 12:03 AM
Tag:[, ]
Permalink

Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリーまでのパンくずリストを表示するカスタマイズを紹介します。

最近、nanapiのカテゴリ構成を参考にしていて、そこからのネタです。

1.完成イメージ

nanapiのカテゴリページの記事一覧は下のスクリーンショットのようになっています。

(クリックで拡大)
nanapiのカテゴリページ

上部に現在のカテゴリのパンくずリストがあり、そのカテゴリに属する記事一覧が下にずらっと表示されます。

ポイントは記事一覧に表示されているカテゴリで、その記事が属するメインカテゴリのパンくずリストが表示されるようになっています。

上のスクリーンショットの場合、現在のカテゴリは「料理>料理レシピ>おかずのレシピ>野菜のおかず」ですが、一番上に表示されている記事のカテゴリは「料理>料理レシピ>おかずのレシピ>野菜のおかず>キノコ類>エリンギ」と、現在のカテゴリのサブカテゴリまで表示されています。

このエントリーで紹介するカスタマイズは、記事一覧に表示されているパンくずリストの作り方です。

2.親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリスト

親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示するには、カテゴリアーカイブの記事に赤色部分のようなサブテンプレートを追加します。

なお、このカスタマイズを行う場合、カテゴリアーカイブのMTEntriesタグをMTEntriesWithSubCategoriesタグに変更してください。

<mt:EntriesWithSubCategories>
…中略…
  <mt:EntryPrimaryCategory>
    <mt:ParentCategories glue=" &amp;raquo; ">
      <a href="<$MTCategoryArchiveLink$>"><$mt:CategoryLabel$></a>
    </mt:ParentCategories>
  </mt:EntryPrimaryCategory>
…中略…
</mt:EntriesWithSubCategories>

まず、一番外側のMTEntryPrimaryCategoryタグを使って記事のメインカテゴリのコンテキストに移動します。

次にMTParentCategoriesタグを使って、最上位の親カテゴリからメインカテゴリまでの一覧を出力します。glueモディファイアを利用すれば区切り文字を簡単に設定できます。

あとは、各カテゴリごとにMTCategoryArchiveLinkタグとMTCategoryLabelタグを使ってカテゴリページへのテキストリンクを出力します。

完成例
完成例

3.途中のカテゴリリンクを表示したくない場合

もし途中のカテゴリに直接属する記事がなく、そのカテゴリのリンクを表示したくない場合は、次のようにMTIfタグを追加します。

<mt:EntriesWithSubCategories>
…中略…
  <mt:EntryPrimaryCategory>
    <mt:ParentCategories glue=" &amp;raquo; ">
      <mt:if tag="CategoryCount">
        <a href="<$MTCategoryArchiveLink$>"><$mt:CategoryLabel$></a>
      <mt:else>
        <$mt:CategoryLabel$>
      </mt:if>
    </mt:ParentCategories>
  </mt:EntryPrimaryCategory>
…中略…
</mt:EntriesWithSubCategories>
Comments [0] | Trackbacks [0]
2012年12月 9日

Movable Typeのカテゴリのベースネームについて

December 9,2012 2:22 AM
Tag:[, ]
Permalink

Movable Typeでカテゴリのベースネームに関する失敗事例を紹介します。

この記事は「Movable Type Advent Calendar 2012」の9日目になります。

1.事例

当ブログのカテゴリ構成を見直そうと思い、手始めに「自作プラグイン」というカテゴリにひとくくりにしていた自作プラグイン記事のカテゴリを細かく分割するところから始めました。

で、MT5の管理画面の「ブログ記事」→「カテゴリ」で、「自作プラグイン」の下に新しいサブカテゴリをばんばん追加していきました(下)。

カテゴリ追加

このあと再構築したところ、新しく追加したカテゴリページが他のページと重複していることに気がつきました。

2.原因

原因は次の通りです。

まず、カテゴリ管理画面で日本語のカテゴリ(またはサブカテゴリ)を作成した場合、カテゴリあるいはサブカテゴリのベースネームには「catx」という名称が自動的に付与されるようになっています。

さらに「x」の部分は、カテゴリまたはサブカテゴリ単位に「1」から開始してインクリメントされていきます(厳密には「cat」から開始)。

この規則にしたがうと、サブカテゴリのベースネームは親カテゴリと同じベースネームになる場合があります。

下のスクリーンショットはベースネームが重複した例で、「お知らせ」のベースネームが「cat1」、そのサブカテゴリとして追加した「いいい」のベースネームも「cat1」になっています。

ベースネームが重複した例

ただし、デフォルトのカテゴリアーカイブのパスは、

category/sub-category/index.html

となっています。下のスクリーンショットはそのアーカイブマッピングです。

MTデフォルトのアーカイブマッピング
MTデフォルトのアーカイブマッピング

この設定であれば、先程の親カテゴリ「お知らせ」のページの出力パスは、

cat1/index.html

サブカテゴリ「いいい」のページの出力パスは、

cat1/cat1/index.html

となるので、ベースネームが重複しても問題ないはずなのですが、当ブログはサブカテゴリが導入される前のバージョンでブログを始めたので、カテゴリ出力パスにMTCategoryBasenameタグしか使っていませんでした(ということをすっかり忘れてたのが根本的な問題)。

当ブログのアーカイブマッピング
当ブログのアーカイブマッピング

このため、先程の親カテゴリ「お知らせ」のページの出力パスは、

cat1/index.html

サブカテゴリ「いいい」のページの出力パスも、

cat1/index.html

となり、同じベースネームのカテゴリページが同じパスで出力されてしまってました。

3.対処

本来はサブカテゴリを意識したアーカイブパスに変更すべきところですが、それを行ってしまうとこれまでに作成したカテゴリのパスに影響してしまうため、新しく作成したカテゴリのベースネームを他のカテゴリのベースネームと重複しないものに変更しました。

で、修正したのが冒頭のスクリーンショットです。

4.記事投稿画面でのカテゴリ追加について

余談ですが、記事投稿画面でのサブカテゴリ追加では、カテゴリ全体でベースネームが重複しないようになっているようです。

下のスクリーンショットは記事投稿画面で「ううう」「えええ」というカテゴリを作成したところです(「あああ」「いいい」は削除しました)。

記事投稿画面でのカテゴリ追加

これをカテゴリ管理画面で見ると、重複しないベースネームが与えられていることが分かります。

重複しないベースネーム

実は当ブログのサブカテゴリ追加は、これまで記事投稿画面でしか行っていなかったため、運よくページの重複を避けられていたようです。

5.カテゴリ追加の動作の違い

記事投稿画面とカテゴリ管理画面のカテゴリ追加動作の違いの理由は次のとおりです。

記事投稿画面でのカテゴリ追加は1カテゴリ単位に行われます。で、追加時にMTのデータベースにアクセスするため、他のカテゴリと重複しないベースネームを割り当てることができます。

一方、カテゴリ管理画面でのカテゴリ作成は操作性重視で、画面上でいろいろ操作した最後に「保存」をクリックしてまとめて保存するという仕様になっているので、記事投稿画面のようにカテゴリを追加するたびに重複しないベースネームを付与するということは行っていません。

6.まとめ

アーカイブパスがサブカテゴリを意識した形式になっていれば今回の問題は発生しませんが、そうでない場合、たとえばサブカテゴリ機能がない旧バージョンからMTをバージョンアップする際や、カテゴリのパスをベースネームだけに変更する場合は、

  • カテゴリ管理画面でカテゴリまたはサブカテゴリを追加する場合、ベースネームが他のカテゴリのベースネームと重複していないかチェックし、重複している場合は変更(重複していなくても適切な名称への変更がいいかも)
  • 記事投稿画面でサブカテゴリを追加

といった対応が必要となります。

ベースネーム「cat」はカットしましょう。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3