Movable Typeで親カテゴリに子カテゴリのエントリー数の合計を表示する

Movable Typeでカテゴリ「A」の中にカテゴリ「B」があり、カテゴリ「B」に「1」というエントリーがある場合、カテゴリ「A」にもエントリー「1」は含まれていて、親カテゴリであるカテゴリ「A」のアーカイブページには、カテゴリ「B」などの子カテゴリに含まれるエントリーがずらりと並んでいてほしいのですが、Movable Typeはデフォルトではそういう扱いはしてくれません。
カテゴリ「A」のアーカイブリストにエントリー「1」を含めるための作業のまとめです。
アーカイブリストを出力するようにファイルを書き換えた後、カテゴリの表示に関わるテンプレートやウィジェットを修正しました。
アーカイブリスト出力
Movable Type 5.2.2から、記事のないカテゴリのアーカイブリストが出力されなくなりました。
Category.pmを書き換えるとアーカイブリストを出力することができますが、他の部分で不具合が出てくる可能性もあるそうです。
/mt/lib/MT/ArchiveType/Category.pmの166行目を以下のように書き換えます。
書き換え前
MT::ArchiveType::archive_entries_count( $obj, \%params );
書き換え後
return 1;
テンプレートの修正
「デザイン」→「テンプレート」の「カテゴリ別ブログ記事リスト」を修正します。
以下のようにMTEntriesタグをMTEntriesWithSubCategoriesタグに書き換えます。
書き換え前
<mt:Entries limit="$limit"> <$mt:Include module="ブログ記事の概要"$> </mt:Entries>
書き換え後
<mt:EntriesWithSubCategories limit="$limit"> <$mt:Include module="ブログ記事の概要"$> </mt:EntriesWithSubCategories>
ウィジェットの修正
「デザイン」→「ウィジェット」の「カテゴリアーカイブ」を修正します。
修正前
<mt:IfArchiveTypeEnabled archive_type="Category"> <div class="widget_category widget"> <h4>category</h4> <mt:TopLevelCategories> <mt:SubCatIsFirst> <ul> </mt:SubCatIsFirst> <mt:If tag="CategoryCount"> <li><a href="<$mt:CategoryArchiveLink$>"<mt:If tag="CategoryDescription"> title="<$mt:CategoryDescription remove_html="1" encode_html="1"$>"</mt:If>><$mt:CategoryLabel$> (<$mt:CategoryCount$>)</a> <mt:Else> <li><$mt:CategoryLabel$> </mt:If> <$mt:SubCatsRecurse$> </li> <mt:SubCatIsLast> </ul> </mt:SubCatIsLast> </mt:TopLevelCategories> <!-- .widget_category/.widget --></div> </mt:IfArchiveTypeEnabled>
修正後
<mt:IfArchiveTypeEnabled archive_type="Category"> <div class="widget_category widget"> <h4>category</h4> <mt:TopLevelCategories> <mt:SubCatIsFirst> <ul> </mt:SubCatIsFirst> <mt:EntriesWithSubCategories> <mt:EntriesFooter> <mt:GetVar name="__counter__" setvar="entry_count" /> </mt:EntriesFooter> </mt:EntriesWithSubCategories> <mt:If name="entry_count"> <li><a href="<$mt:CategoryArchiveLink$>"<mt:If tag="CategoryDescription"> title="<$mt:CategoryDescription remove_html="1" encode_html="1"$>"</mt:If>><$mt:CategoryLabel$> (<mt:If tag="CategoryCount"><$mt:CategoryCount$><mt:Else><mt:GetVar name="entry_count" /></mt:If>)</a> <mt:Else> <li><$mt:CategoryLabel$> </mt:If> <$mt:SubCatsRecurse$> </li> <mt:SubCatIsLast> </ul> </mt:SubCatIsLast> </mt:TopLevelCategories> <!-- .widget_category/.widget --></div> </mt:IfArchiveTypeEnabled>
エントリーのないカテゴリも、エントリーが1件あるような表示になってしまいますが、解決方法が分からなかったため、そのままにしています…。
参考サイト
下のボタンを押すと拍手送信&メッセージフォームが開きます。→WEB拍手お返事
Comment