Movable Type 備忘録
EntryCategory プラグイン
- Prev Page: タグクラウドのフォントサイズの計算式
- Next Page: CommentSubscribe プラグイン
こんばんわ^^
小粋空間さんとこで、デフォルトの MTEntryCategory ファンクションタグをブロックタグとして利用できるプラグインが公開されてました。
どういうことかというと、元々の MTEntryCategory タグはエントリに関連付けられた、プライマリカテゴリ名称を取得するためだけのタグでした。
それをブロックタグとして利用することで、カテゴリ名称だけでなく、URL や カテゴリ ID などカテゴリに関連するタグも使えるようになるわけですね ( ̄∇ ̄)b
たとえば、プラグインを使用せずプライマリカテゴリの URL、カテゴリ名称を取得しようとしたら以下のようになります。
<MTEntryCategories><mt:setvarblock name="cat_link"><$MTCategoryArchiveLink$></mt:setvarblock><mt:setvarblock name="cat_name"><$MTCategoryLabel$></mt:setvarblock></MTEntryCategories><a href="<mt:getvar name="cat_link" index="0">"><mt:getvar name="cat_name" index="0"></a>
まず、赤字の部分でエントリに関連付けられたすべてのカテゴリ名称とその URL をピックアップします。
そして青字、緑字のように上記でピックアップしたリスト(配列)のインデックス 0 番目のデータを取得することで実現可能です。
それが以下のようなタグで済みます。
<MTEntries><MTEntryCategory><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a></MTEntryCategory></MTEntries>
カンタンですね ( ̄∇ ̄)b
ただし、気をつけることはデフォルトの MTEntryCategory と同一タグ名称なので、既に使用中の場合はテンプレートを書き換える必要があります。
わたしのサイト(配布してるテンプレート含む)では、エントリにカテゴリが関連付けされてるか否かを判断するために MTEntryCategory タグを利用しているため、残念ですがプラグインのインストールは見合わせました。
ですので、ちゃんとご自分のテンプレートを確認してから利用した方がよいですよ。
このプラグインはデフォルトタグとして取り込んで欲しいですね ( ̄∇ ̄)
Trackback Pings(0)
No trackbacks found.




こんばんは。
ご紹介ありがとうございました。
ちなみに、プラグインのファイル名と、それにあわせて「EntryCategory」という文字を3ヶ所(下記)、「EntryPrimaryCategory」などに書き変えれば、多分併用できます。
:
(略)
:
package MT::Plugin::EntryCategory;
:
(略)
:
my $plugin = MT::Plugin::EntryCategory->new ({
:
(略)
:
$r->{EntryCategory} = \&_hdlr_entry_category;
:
(略)
:
>>1 yujiro さん
こんばんわ^^
先日の MT4LP5 はご苦労様でした
わたしは参加できなかったけど大盛況に終わったようで何よりです
> ちなみに、プラグインのファイル名と、それにあわせて「EntryCategory」という文字を3ヶ所(下記)、「EntryPrimaryCategory」などに書き変えれば、多分併用できます。
ありがとうございますぅ
yujiro さんがおっしゃる方法で実は使ってたりしてます
たぶん yujiro さんがあえてタグ名を別名にしなかったのも MTEntryCategory タグの機能を差し替えたかったのだと、勝手に解釈したのでタグ名称変更については触れませんでした。
でも嬉しいです
ありがとうございました
こんにちは。お邪魔します。
記事前半で触れられている、
プラグインを使わないプライマリカテゴリーの取得方法について
-------------------------------------------
<MTEntryCategories>
<MTSetVarBlock name="push(cat_ID)"><$MTCategoryID$></MTSetVarBlock>
<MTSetVarBlock name="push(cat_link)"><$MTCategoryArchiveLink$></MTSetVarBlock>
</MTEntryCategories>
<$MTGetVar name="cat_ID" index="0"$><br />
<$MTGetVar name="cat_link" index="0"$>
-------------------------------------------
私の環境で、上記のように書いて試してみたところ、
配列0番目がプライマリになりませんでした。
何とも言えないのですが、名前の文字コード順になっていると思われます。
自家用であれば小粋さんのプラグインが簡潔で良いと思いますが、
私は下記のように書いて対応しています。
MTEntryCategoryの名前で判定しているので、なんとも冗長です(^^;
-------------------------------------------
<MTSetVarBlock name="cat_primary"><$MTEntryCategory$></MTSetVarBlock>
<MTEntryCategories>
<MTSetVarBlock name="cat_name"><$MTCategorylabel$></MTSetVarBlock>
<MTIf name="cat_name" eq="$cat_primary">
<MTSetVarBlock name="cat_ID"><$MTCategoryID$></MTSetVarBlock>
<MTSetVarBlock name="cat_link"><$MTCategoryArchiveLink$></MTSetVarBlock>
</MTIf>
</MTEntryCategories>
<$MTGetVar name="cat_ID"$><br />
<$MTGetVar name="cat_link"$>
-------------------------------------------
MovableTypeは「ありそうでない」変数が多いですよね(・_・`)
>>3 webbingstudio さん
こんばんわ^^
上記 webbingstudio さんが示したコードだと配列の 0 番目にプライマリカテゴリがないのは当然だと思います
たとえば、プライマリカテゴリ AAA、セカンダリカテゴリが BBB というエントリがあったとします。
MTEntries の 1 回目のループでは push すると [0] に AAA が入ります。
でも、 2 回目のループで [0] には BBB が、[1] には AAA が入ることになります。
マニュアルを見ていただくと分かると思いますが、push は必ず配列の一番上 [0] に追加するとありますね
なので、わたしが示した記事中のコードと webbingstudio さんが示したコードとでは結果が異なるわけです。
以上です。
>>4 bzbell さん
こんばんは。丁寧なお返事ありがとうございます。
∑(゜Д゜;
もしや、PHPのarray_pushとごっちゃにしてた!?
http://php.plus-server.net/function.array-push.html
うわーうわー、そもそも処理が間違っていますね!
もう一度検証しなおしてみます。
失礼しました!