「現在見ているページが該当するカテゴリのリンクを無効にしない」
テヌキが一般的になってしまったわけだが。
#カテゴリ内がさらに階層化されている場合を除くと(←重要)
#選択する意味のないリンクが生きているのは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>
万一の際にエラーが起きないようにチェックする処理を入れるべきなのだが、なんかこれで動くので放置…。
