MovableType 5.2.6でカテゴリーにエントリーが登録されていないとカテゴリーアーカイブが生成されない

このエントリーをはてなブックマークに追加

以前まではカテゴリーにエントリー(ブログ記事)が登録されていなくても、カテゴリーアーカイブは生成されていましたが、どうやら、MT 5.2.2あたりから仕様が変更されて、エントリーが登録されていないカテゴリーアーカイブは生成されないようになってしまったようです。
詳細はこちら→ブログ記事がないカテゴリアーカイブが出力されない(MT5.2.2)

困った。Gourmet Vox 東京というブログで、この仕様変更でちょっと困ったことになってしまいました。下記の画像はブログのメインメニューとMTのカテゴリーの管理画面です。
Gourmet Vox 東京

20130712172812_blogpix.png

20130712173702_blogpix.png

トップレベルのカテゴリーは「メニュー」「予算」「住所」「店舗名」と4つあり、MTのカテゴリーの管理画面の画像のようにそれぞれのカテゴリーの下にサブカテゴリーがあります。

エントリーにはサブカテゴリーで該当するものが設定されます。エントリーにトップレベルカテゴリーは設定しません。

今まではエントリーが登録されていないカテゴリーもアーカイブファイルが生成されていたので、4つのトップレベルカテゴリーのアーカイブファイルにはそれぞれのサブカテゴリーの一覧を表示させ、そこからサブカテゴリーのアーカイブファイルにリンクさせていました。それが出来なくなってしまいました。

カテゴリーページを生成させるため、とりあえずそれぞれのトップレベルカテゴリーにもエントリーを1件登録しました。これで再構築すると下記の画像のようにエントリーが登録されているカテゴリー一覧にトップレベルカテゴリーも表示されてしまいます。

20130712180834_blogpix.png

対応策のひとつの方法として、jQuery(javascript)の.removeを使って、必要ないカテゴリーを削除するという方法が有ると思います。

  1. まず、サイドバーに書き出されるカテゴリー一覧で削除したいカテゴリーだけにclassが設定されるように下記のように<mt:HasNoParentCategory>を追加、テンプレートを修正します。
    <ul>
    <mt:EntryCategories>
    <li class="entry-category<mt:HasNoParentCategory> toplevelcat</mt:HasNoParentCategory>">
    <a href="<$mt:CategoryArchiveLink$>" rel="tag"><$mt:CategoryLabel$></a>
    </li>
    </mt:EntryCategories>
    </ul>
  2. 下記のようなHTMLソースが生成されます。
    <ul>
    <li class="entry-category "><a href="http://gourmetvox.com/tokyo/archives/cat/22.html" rel="tag">800円〜899円</a></li>
    <li class="entry-category "><a href="http://gourmetvox.com/tokyo/archives/cat/19.html" rel="tag">そば</a></li>
    <li class="entry-category toplevelcat"><a href="http://gourmetvox.com/tokyo/archives/cat/3.html" rel="tag">メニュー</a></li>
    <li class="entry-category toplevelcat"><a href="http://gourmetvox.com/tokyo/archives/cat/5.html" rel="tag">予算</a></li>
    <li class="entry-category toplevelcat"><a href="http://gourmetvox.com/tokyo/archives/cat/9.html" rel="tag">住所</a></li>
    <li class="entry-category "><a href="http://gourmetvox.com/tokyo/archives/cat/17.html" rel="tag">千代田区丸の内1丁目</a></li>
    <li class="entry-category toplevelcat"><a href="http://gourmetvox.com/tokyo/archives/cat/7.html" rel="tag">店舗名</a></li>
    <li class="entry-category "><a href="http://gourmetvox.com/tokyo/archives/cat/23.html" rel="tag">酢重正之 楽</a></li>
    </ul>

    classに「toplevelcat」が追加されました。
  3. jQueryを読み込む様に修正して、インデックステンプレートで下記のようなjQueryファイルを作成します。
    $(function(){
    $(".toplevelcat").remove();
    })
  4. これで、トップレベルカテゴリーは見えなくなります。
    20130712182054_blogpix.png

もうひとつのやり方は、トップレベルカテゴリーにエントリーを登録するのは同じですが、カテゴリーに親カテゴリーが有るのか無いのかを判別して親カテゴリーがない場合(トップレベルカテゴリーの場合)カテゴリー一覧に書き出さないようにする方法です。

  1. 元々のテンプレートは下記のようになってます。
    <mt:EntryCategories>
    <li class="entry-category">
    <a href="<$mt:CategoryArchiveLink$>" rel="tag"><$mt:CategoryLabel$></a>
    </li>
    </mt:EntryCategories>
  2. <li>タグを<mt:HasParentCategory>で括ってあげます。
    <mt:EntryCategories>
    <mt:HasParentCategory>
    <li class="entry-category">
    <a href="<$mt:CategoryArchiveLink$>" rel="tag"><$mt:CategoryLabel$></a>
    </li>
    </mt:HasParentCategory>
    </mt:EntryCategories>
  3. 下記のようなソースが書き出されます。
    <ul>
    <li class="entry-category"><a href="http://gourmetvox.com/tokyo/archives/cat/22.html" rel="tag">800円〜899円</a></li>
    <li class="entry-category"><a href="http://gourmetvox.com/tokyo/archives/cat/19.html" rel="tag">そば</a></li>
    <li class="entry-category"><a href="http://gourmetvox.com/tokyo/archives/cat/17.html" rel="tag">千代田区丸の内1丁目</a></li>
    <li class="entry-category"><a href="http://gourmetvox.com/tokyo/archives/cat/23.html" rel="tag">酢重正之 楽</a></li>
    </ul>

    とりあえず、こちらで対応しました。

どちらにしても、トップレベルカテゴリーにエントリーを登録しないと出来ない方法ですが、とりあえず仕方ないかなと。

このエントリーをはてなブックマークに追加

ブログを始めてからカウンター日が経ちました。

公開記事数は記事数件で、日/記事数日に1エントリーのペースで記事を書いていることになります。