Movable Type 備忘録

 EntryCategory プラグイン

こんばんわ^^

小粋空間さんとこで、デフォルトの MTEntryCategory ファンクションタグをブロックタグとして利用できるプラグインが公開されてました。

どういうことかというと、元々の MTEntryCategory タグはエントリに関連付けられた、プライマリカテゴリ名称を取得するためだけのタグでした。
それをブロックタグとして利用することで、カテゴリ名称だけでなく、URL や カテゴリ ID などカテゴリに関連するタグも使えるようになるわけですね ( ̄∇ ̄)b

たとえば、プラグインを使用せずプライマリカテゴリの URL、カテゴリ名称を取得しようとしたら以下のようになります。

  1. <MTEntryCategories>
  2.     <mt:setvarblock name="cat_link"><$MTCategoryArchiveLink$></mt:setvarblock>
  3.     <mt:setvarblock name="cat_name"><$MTCategoryLabel$></mt:setvarblock>
  4. </MTEntryCategories>
  5. <a href="<mt:getvar name="cat_link" index="0">"><mt:getvar name="cat_name" index="0"></a>

まず、赤字の部分でエントリに関連付けられたすべてのカテゴリ名称とその URL をピックアップします。
そして青字、緑字のように上記でピックアップしたリスト(配列)のインデックス 0 番目のデータを取得することで実現可能です。

それが以下のようなタグで済みます。

  1. <MTEntries>
  2.     <MTEntryCategory>
  3.         <a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>
  4.     </MTEntryCategory>
  5. </MTEntries>

カンタンですね ( ̄∇ ̄)b
ただし、気をつけることはデフォルトの MTEntryCategory と同一タグ名称なので、既に使用中の場合はテンプレートを書き換える必要があります。

わたしのサイト(配布してるテンプレート含む)では、エントリにカテゴリが関連付けされてるか否かを判断するために MTEntryCategory タグを利用しているため、残念ですがプラグインのインストールは見合わせました。
ですので、ちゃんとご自分のテンプレートを確認してから利用した方がよいですよ。

このプラグインはデフォルトタグとして取り込んで欲しいですね ( ̄∇ ̄)

 Trackback Pings(0)

No trackbacks found.

 Comments(5)

#1: Posted by yujiro @ April 16, 2008 [REPLY]
user-pic

こんばんは。
ご紹介ありがとうございました。

ちなみに、プラグインのファイル名と、それにあわせて「EntryCategory」という文字を3ヶ所(下記)、「EntryPrimaryCategory」などに書き変えれば、多分併用できます。


(略)

package MT::Plugin::EntryCategory;

(略)

my $plugin = MT::Plugin::EntryCategory->new ({

(略)

$r->{EntryCategory} = \&_hdlr_entry_category;

(略)


#2: Posted by Author Profile Page bzbell @ April 16, 2008 [REPLY]
user-pic

>>1 yujiro さん

こんばんわ^^

先日の MT4LP5 はご苦労様でしたワクワク
わたしは参加できなかったけど大盛況に終わったようで何よりですテレテレ

> ちなみに、プラグインのファイル名と、それにあわせて「EntryCategory」という文字を3ヶ所(下記)、「EntryPrimaryCategory」などに書き変えれば、多分併用できます。

ありがとうございますぅにこっ!
yujiro さんがおっしゃる方法で実は使ってたりしてますあせあせ

たぶん yujiro さんがあえてタグ名を別名にしなかったのも MTEntryCategory タグの機能を差し替えたかったのだと、勝手に解釈したのでタグ名称変更については触れませんでした。

でも嬉しいですうぅ~ん
ありがとうございましたもじもじ

#3: Posted by Author Profile Page webbingstudio @ September 30, 2008 [REPLY]
user-pic

こんにちは。お邪魔します。

記事前半で触れられている、
プラグインを使わないプライマリカテゴリーの取得方法について
-------------------------------------------
<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は「ありそうでない」変数が多いですよね(・_・`)

#4: Posted by Author Profile Page bzbellからwebbingstudioへの返信 @ September 30, 2008 [REPLY]
user-pic

>>3 webbingstudio さん

こんばんわ^^

<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"$>

上記 webbingstudio さんが示したコードだと配列の 0 番目にプライマリカテゴリがないのは当然だと思いますあせあせ

たとえば、プライマリカテゴリ AAA、セカンダリカテゴリが BBB というエントリがあったとします。
MTEntries の 1 回目のループでは push すると [0] に AAA が入ります。
でも、 2 回目のループで [0] には BBB が、[1] には AAA が入ることになります。
マニュアルを見ていただくと分かると思いますが、push は必ず配列の一番上 [0] に追加するとありますねうぅ~ん
なので、わたしが示した記事中のコードと webbingstudio さんが示したコードとでは結果が異なるわけです。

以上です。

#5: Posted by Author Profile Page webbingstudioからbzbellへの返信 @ October 3, 2008 [REPLY]
user-pic

>>4 bzbell さん
こんばんは。丁寧なお返事ありがとうございます。

∑(゜Д゜;

もしや、PHPのarray_pushとごっちゃにしてた!?
http://php.plus-server.net/function.array-push.html

うわーうわー、そもそも処理が間違っていますね!
もう一度検証しなおしてみます。
失礼しました!

 Post a Comment

 

コメント用フィード