2006年8月23日

カテゴリーリストで MTArchiveListHeader と MTArchiveListFooter が正常に動作しない問題

August 23,2006 12:34 AM
Tag:[, ]
Permalink

昨日の「JavaScript 不要なサイドメニューのツリー化 for Movable Type」で掲載を見送った、カテゴリーリスト(一括表示)の問題について報告します。

現状(3.31-ja)用意されているMTタグより、ツリー化表示を実現するためのカテゴリーリスト(一括表示)については

<ul class="tree">
<MTArchiveList archive_type="Category">
<li class="tree<MTArchiveListFooter>_end</MTArchiveListFooter>"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>

という風に、MTArchiveList、MTArchiveListFooter 等を使用するのが適切と考えます。理由は、MTCategories のタグセットにはリストの最後を示す MTCategoryFooter が用意されていないためです。

上記のタグ構成は月別アーカイブリスト、

<ul class="tree">
<MTArchiveList archive_type="Monthly">
<li class="tree<MTArchiveListFooter>_end</MTArchiveListFooter>"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>

とほぼ同じで、異なるのは赤色の archive_type 属性名のみです。

さて、上記の月別アーカイブリストのMTタグを再構築すると、生成されるHTMLは

<ul class="tree">
<li class="tree"><a href="http://hogehoge/2006/08/">2006年08月</a> [1]</li>
<li class="tree"><a href="http://hogehoge/2006/02/">2006年02月</a> [1]</li>
<li class="tree"><a href="http://hogehoge/2006/01/">2006年01月</a> [1]</li>
<li class="tree_end"><a href="http://hogehoge/2005/12/">2005年12月</a> [1]</li>
</ul>

と、正常に最後の li タグの class 属性のみに "tree_end" が設定されるのですが、カテゴリーリストを再構築すると、

<ul class="tree">
<li class="tree_end"><a href="http://hogehoge/cat1/">test1</a> [1]</li>
<li class="tree_end"><a href="http://hogehoge/cat2/">test2</a> [1]</li>
<li class="tree_end"><a href="http://hogehoge/cat3/">test3</a> [1]</li>
<li class="tree_end"><a href="http://hogehoge/cat4/">test4</a> [1]</li>
</ul>

と、ご覧の通り、全ての li 要素の class 属性名に "tree_end" が設定されたHTMLが生成されます。つまり、MTArchiveListFooter が期待する動作になりません。3.2 でも実施してみましたが同様の結果でした。

該当部分のソースコードを見たところ、カテゴリーリストの場合のみ MTArchiveList の処理から MTCategories の処理に移し変えているのが原因と思われます。MTCategories の処理に MTArchive? というタグを処理するコードが存在しないためです。
したがってタイトルの通り、MTArchiveListHeader も同様に機能しません(制限事項として挙げられていたらすいません)。

ということで、一括表示のカテゴリーリストについては JavaScript を用いたツリー表示が必要となります。

Comments [0] | Trackbacks [1]
2006年8月17日

Movable Type 3.2 と 3.31 におけるサブカテゴリーリストの表示の違いについて

3.31-ja でサブカテゴリーリストの動作を確認している途中、3.2-ja-2 と比較して下記の違いを発見しましたので、ご報告まで。

まず、次のような構造のカテゴリーがあると仮定します。

趣味
 └ パソコン
   ├ mixi
   └ ブログ

このカテゴリーを、公開テンプレートで利用しているサブカテゴリーリストのMTタグ

<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>

を使用して、トップページおよびカテゴリー・アーカイブでの表示を 3.2 と 3.31 で比較してみます。

まず 3.2-ja-2 のサブカテゴリーリストとして表示した結果です。

トップページでの表示トップページ:全カテゴリーが表示される
トップページでの表示「趣味」カテゴリー・アーカイブ:サブカテゴリーの「パソコン」カテゴリー以下を表示
トップページでの表示「パソコン」カテゴリー・アーカイブ:サブカテゴリーの「mixi」「ブログ」カテゴリーを表示
トップページでの表示「ブログ」または「mixi」カテゴリー・アーカイブ:表示なし

次に全く同じタグを使用して、3.31-ja のサブカテゴリーリストとして表示した結果です。

トップページでの表示トップページ:全カテゴリーが表示される
トップページでの表示「趣味」カテゴリー・アーカイブ:サブカテゴリーの「パソコン」カテゴリー以下を表示
トップページでの表示「パソコン」カテゴリー・アーカイブ:サブカテゴリーの「mixi」「ブログ」カテゴリーを表示
トップページでの表示「ブログ」または「mixi」カテゴリー・アーカイブ:全カテゴリーが表示される

青色と赤色で示した文言からお分かりの通り、3.31-ja では最下層のサブカテゴリーで全カテゴリーが表示されます。
とりあえずシックス・アパートのフィードバックには報告させて頂きました。

3.31-ja で 3.2-ja-2 と同様の表示、つまり最下層のカテゴリー・アーカイブでサブカテゴリーリストを非表示にするためには、

lib/MT/Template/ContextHandlers.pm

に対して下記のパッチをあてると良いでしょう。

--- lib/MT/Template/ContextHandlers.pm.bak      Thu Aug 17 01:54:30 2006
+++ lib/MT/Template/ContextHandlers.pm  Thu Aug 17 01:55:33 2006
@@ -3937,7 +3937,7 @@
             }
         }
     }
-    if (!@cats) {
+    if (!@cats && ($ctx->{current_archive_type} ne 'Category')) {
         # Otherwise, use the top level categories
         @cats = MT::Category->top_level_categories($ctx->stash('blog_id'));
     }

他に適切な対処があるようでしたらお許しください。

Comments [2] | 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