2007/05/25

[技術系]   MT : カテゴリ一覧で現在カテゴリの表示を変えるMTIfCategoryちょいパッチ

at 15:44JST
 
blogが普及してから、ナビゲーションバーやカテゴリ一覧で
「現在見ているページが該当するカテゴリのリンクを無効にしない」
テヌキが一般的になってしまったわけだが。

#カテゴリ内がさらに階層化されている場合を除くと(←重要)
#選択する意味のないリンクが生きているのはUI上ヤバイ
#…まあそれはともかく見た目だけは変えたい

MovableTypeのカテゴリ一覧生成タグには標準で現在カテゴリの出力を変える機能がついていない。そこでMTIfCategoryプラグインを使うわけだが、

カテゴリ IF 命令プラグイン - MTIfCategory :: Drk7jp
http://www.drk7.jp/MT/archives/000829.html

<MTTopLevelCategories> 
<MTSubCatIsFirst>
<ul
class="module-list"
id="Navigation"
>
</MTSubCatIsFirst>
<MTFilterCategories exclude="999parts">
<li
class="module-list-item"
>
<MTIfCat_eq_Arc>→arc<br /></MTIfCat_eq_Arc>
<MTIfCat_eq_Ent>→ent<br /></MTIfCat_eq_Ent>

とかやると、

エントリーページ→○表示変わる
カテゴリアーカイブ→×表示変わらない

だ。 ???

MovableType備忘録: MTIfCategoryプラグイン
http://bizcaz.com/archives/2007/04/30-035752.php

を読んでて気づいた。

<ul 
class="module-list"
id="Navigation"
>
<MTCategories>
<MTFilterCategories exclude="999parts">
<li
class="module-list-item"
>
<MTIfCat_eq_Arc>→arc<br /></MTIfCat_eq_Arc>
<MTIfCat_eq_Ent>→ent<br /></MTIfCat_eq_Ent>


だとどちらのタイプのアーカイブでも動く。古いからMTTopLevelCategoriesに対応していないようだ。MTの返すstashが違うんだろうな…。

よく考えると、そもそもサブカテゴリーを使うことがないので後者に書き換えて使うことにする。

しかし、なんとなく腹の虫がおさまらない。
MTIfCat_eq_Arc
MTIfCat_eq_Ent
と2つ書くのがなんかイヤだ。たぶん、コンテキストによって片方しか取得できないことを想定して分けているのだろうけれど…。

パッチを書いた。
*** plugins/IfCategory.pl.org	Fri May 25 13:53:20 2007 
--- plugins/IfCategory.pl Fri May 25 15:27:34 2007
***************
*** 1,4 ****
--- 1,5 ----
# IfCategory.pl -- category type conditional plugin by drk
+ # 2007/05/25 modified by hirosiki

package MT::plugins::IfCategory;
use MT::Template::Context;
***************
*** 8,13 ****
--- 9,29 ----
MT::Template::Context->add_conditional_tag(IfCat_eq_Ent => \&ifcat_eq_ent);
MT::Template::Context->add_conditional_tag(IfNotCat_eq_Ent => sub{!ifcat_eq_ent(@_)});

+ MT::Template::Context->add_conditional_tag(IfCurrentCategory => \&ifcurrentcategory);
+ MT::Template::Context->add_conditional_tag(IfNotCurrentCategory => sub{!ifcurrentcategory(@_)});
+
+ sub ifcurrentcategory {
+ my $cat = $_[0]->stash('category')
+ or return $_[0]->error(MT->translate(
+ "You used an [_1] tag outside of the proper context.",
+ '<$MTCategoryLabel$>' ));
+ my $catlabel_this = _hdlr_category_label(@_);
+ my $catlabel_arc = _hdlr_archive_category(@_);
+ my $catlabel_ent = _hdlr_entry_category(@_);
+
+ ( $catlabel_arc eq $catlabel_this ) || ( $catlabel_ent eq $catlabel_this );
+ }
+

sub ifcat_eq_arc {
my $cat = $_[0]->stash('category')


IfCategory.pl.patch

こうすると、
<MTCategories> 
<MTIfCurrentCategory>→<br /></MTIfCurrentCategory>
で動作する。

万一の際にエラーが起きないようにチェックする処理を入れるべきなのだが、なんかこれで動くので放置…。



関連しそうな過去記事:
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。