2010.01.07

Movable Type : MT5: カテゴリ周りのカスタマイズ

サブカテゴリ (子カテゴリ) がうまく機能するように、Movable Type のカテゴリ周りのカスタマイズを一通りやってみた。だいたいは希望通りにできたが、うまく行かなかった部分も。 全て希望通りに出来ました。

カテゴリ「ギャラリー」は各種サブカテゴリを持ちますし、カテゴリ「天文」には、メインカテゴリが「ギャラリー下のサブカテゴリ」になっている記事がいくつか登録されていますので、その辺を見て頂ければどんな感じで機能するかわかると思います。

こんな感じ。Movable Type 5 での例だけど、多分 Movable Type 4 でも同様。

メインページ、月別アーカイブページ、各記事ページ

  1. 各記事: 「メインカテゴリ:記事タイトル」という形で、メインカテゴリを記事タイトルの前に表示する。カテゴリページへのアクセスを容易にするため。
  2. 各記事: メインカテゴリに親カテゴリがあれば、「親カテゴリ > メインカテゴリ:記事タイトル」という形で、親カテゴリも表示する。

カテゴリ・アーカイブページ

  1. ヘッダー部: カテゴリ名、カテゴリの説明を表示する。
  2. ヘッダー部: カテゴリにサブカテゴリ (子カテゴリ) があれば、サブカテゴリの一覧を表示する。
  3. ヘッダー部: カテゴリに親カテゴリがあれば、「親カテゴリ > カテゴリ」という形で、親カテゴリを表示する。
  4. 各記事: 親カテゴリのカテゴリ・アーカイブページには、サブカテゴリに属する記事も表示する。
  5. 各記事: 記事のメインカテゴリが、カテゴリ・アーカイブページのカテゴリと一致する場合は、記事タイトル前のメインカテゴリ表示を省く。そうではない場合は、メインカテゴリを表示する。
  6. 各記事: 記事のメインカテゴリに親カテゴリがある場合、親カテゴリがカテゴリ・アーカイブページのカテゴリと一致する場合は、記事タイトル前の親カテゴリの表示を省き、そうではない場合は親カテゴリを表示する (うまく出来ず)

(f) は、記事をサブカテゴリと親カテゴリの両方に属させることで対応。あまりスマートではないが。<mt:Entries include_subcategories="1"> を使うこともできたかもしれないが、その場合、サイドバーのカテゴリ一覧の記事数の表示で、親カテゴリの記事数にサブカテゴリの記事も含める、ということができないみたい。<mt:categoryCount include_subcategories="1"> みたいに書ければベストなんだけどね。

(h) は、残念ながらうまく出来なかった。どうやら、カテゴリ・アーカイブページで個々の記事のメインカテゴリの親カテゴリを取得しようとした場合、個々の記事ではなく、カテゴリ・アーカイブページのカテゴリの親カテゴリを取得しようとしてしまうようだ。残念。 「EntryCategoriesタグを改良するプラグイン:EntryCategoriesEx」を利用することでうまく出来ました。壱さんありがとう!

詳細

Movable Type 5 + 小粋空間テンプレートの場合の例です。ちなみに、自分が使っている小粋空間テンプレートは、Movable Type 4 用のものを Movable Type 5 で継続利用しています(^^;

各記事の記事タイトルの前のメインカテゴリ名表示

まずは、「EntryCategoriesタグを改良するプラグイン:EntryCategoriesEx」をインストールしておいて下さい。

「ブログ記事の概要」「ブログ記事の詳細」テンプレートモジュールについて、<h2> の直後、記事タイトル表示の前に下記を追加。下記を適当な名前の新規テンプレートモジュールとして記述し、<mt:include module="テンプレートモジュール名" /> として追加すると見易い。

<mt:if name="category_archive">
   <mt:if tag="EntryCategory">
      <mt:EntryPrimaryCategory>
         <mt:SetVarBlock name="entry_categoryname"><$MTEntryCategory$></mt:SetVarBlock>
         <mt:if name="categoryname" ne="$entry_categoryname">
            <mt:hasParentCategory><mt:parentCategory>
               <mt:SetVarBlock name="entry_parentcategoryname"><mt:categoryLabel /></mt:SetVarBlock>
               <mt:if name="categoryname" ne="$entry_parentcategoryname">
                  <a href="<mt:categoryArchiveLink />" class="category"><mt:categoryLabel /></a> > 
               </mt:if>
            </mt:parentCategory></mt:hasParentCategory>
            <a href="<$MTEntryLink archive_type="Category"$>" class="category"><$MTEntryCategory$></a> :
         </mt:if>
      </mt:EntryPrimaryCategory>
   </mt:if>
<mt:else>
   <mt:if tag="EntryCategory">
      <mt:hasParentCategory><mt:parentCategory>
         <a href="<mt:categoryArchiveLink />" class="category"><mt:categoryLabel /></a>
      </mt:parentCategory> > </mt:hasParentCategory>
      <a href="<$MTEntryLink archive_type="Category"$>" class="category"><$MTEntryCategory$></a> :
   </mt:if>
</mt:if>

else より前がカテゴリ・アーカイブページ内の記事表示用、else 以後がその他のページにおける記事表示用。

<mt:EntryPrimaryCategory>が、「EntryCategoriesタグを改良するプラグイン:EntryCategoriesEx」の機能。

カテゴリ・アーカイブページのヘッダー部へのカテゴリ名、カテゴリの説明の表示

「ブログ記事リスト」テンプレートの、<mt:if name="category_archive"> 以下に下記を記述:

   <div>
   <mt:hasParentCategory><mt:parentCategory>
      <a href="<mt:categoryArchiveLink />" class="category"><mt:categoryLabel /></a>
   </mt:parentCategory> > </mt:hasParentCategory>
   <mt:archiveTitle /></div>
   <mt:SetvarBlock name="categoryname"><$MTArchiveCategory$></mt:SetvarBlock>
   <mt:subCategories>
      <mt:subCatIsFirst><div class="archive-title-sub">Sub Categories: </mt:subCatIsFirst>
      <nobr><a href="<$mt:categoryArchiveLink$>"><mt:categoryLabel /></a></nobr>
      <mt:subCatsRecurse />
      <mt:subCatIsLast></div><mt:else> / </mt:else></mt:subCatIsLast>
   </mt:subCategories>
   <div class="entry">
     <$MTCategoryDescription$>
   </div>

さて今回、どうしても自力では解決出来なかった部分があって、「MTQ | Movable Type 5 ユーザーコミュニティ」で質問させてもらったんですが、速攻で適切な返信をもらって一発で解決できてしまいました。さすがは公式コミュニティサイトだけに、ハイレベルな方がいらっしゃるようです。おかげで希望通りの仕様が実現できて嬉しいです。

1/10追記: カテゴリ-年別アーカイブ

カテゴリ-年別アーカイブも設けてみた。カテゴリ-年別アーカイブ本体を作るには、「ブログ記事リスト」テンプレート編集画面において、「新しいアーカイブマッピングを作成」「種類=カテゴリ-年別」として、「追加」をクリックする。パスは、「通常のカテゴリアーカイブのパス/yyyy/index.xxx」でOKだろう。

カテゴリアーカイブページにカテゴリ-年別アーカイブページの一覧を表示させるには、「ブログ記事リスト」テンプレートのアーカイブタイトル表示部直下に下記を追加する。

   <div>
   <mt:ArchiveList archive_type="Category-Yearly" sort_order="ascend">
      <a href="<$mt:categoryArchiveLink$><$MTArchiveDate format="%Y/"$>"><$MTArchiveDate format="%Y"$></a>
   </mt:ArchiveList>
   </div>
Categories: Movable Type

Category: Movable Type

Trackbacks

Trackback URL: