Counter プラグイン

Counter プラグイン

Posted at November 16,2006 1:35 AM
Tag:[Counter, MovableType, Plugin]

Movable Type のエントリーリストやコメントリスト、あるいはアーカイブリスト等で、例えば「リストの 3 番目からスタイルを変更したい」とか「偶数・奇数で色を変更したい」ということがあると思いますが、Movable Type で用意されているタグには残念ながらそのような機能はありません。*1

この「カウントする」という機能が必要な質問をひとつ頂いており、思案していたところ、有難いことにエムロジック株式会社様より下記のプラグインが公開されました。

エムロジック放課後プロジェクトMovableType用Counter Plugin

これを使えば、リストでカウンタを必要とするカスタマイズ類はほぼ全て満足できるのではないかと思います。

2009.05.28 追記
Movable Type 4.1 以降であれば、標準テンプレートタグで実現できます(関連記事「Movable Type 4.1 / MTOS における変数での算術演算子の利用方法」)。

配布サイトのドキュメントで利用方法が説明されていますが、ここでもタグの基本的な設定方法とサンプルをいくつか紹介しておきます。ドキュメントに掲載されている、エントリータイトルだけを表示するというシンプルなリストを例にアレンジしていきます。
プラグインの導入方法は配布サイトをご覧ください。

基本は、カウントしたいリスト全体を MTCounter タグで括ります。

リスト1.1 MTCounter タグ

<MTCounter>
  <MTEntries> 
    <$MTEntryTitle$><br />
  </MTEntries> 
</MTCounter>

このプラグインは自律的にカウントアップする訳ではないので、リスト1.2 のように、カウンタ値を +1 更新したい場所に MTCounterPlus タグを挿入します。なおこのリストではまだ何も表示されません。

リスト1.2 MTCounterPlus タグ

<MTCounter>
  <MTEntries> 
    <$MTCounterPlus$>
    <$MTEntryTitle$><br />
  </MTEntries> 
</MTCounter>

カウンタ値を -1 更新したい場合は MTCounterMinus タグを挿入します。この場合は初期値を MTCounterSetValue タグで設定すると良いでしょう。
リスト1.3 はカウンタの初期値10でエントリータイトルを表示する毎にカウンタを -1 します(これもまだ何も表示されません)。

リスト1.3 MTCounterMinus / MTCounterSetValue タグ

<MTCounter>
  <$MTCounterSetValue value="10"$>
  <MTEntries> 
    <$MTCounterMinus$>
    <$MTEntryTitle$><br />
  </MTEntries> 
</MTCounter>

カウンタ値を表示する場合は MTCounterValue タグを用います。MTCounterSetValue タグを使わない場合のカウンタ初期値は 0 です。
リスト1.4 はエントリータイトルの後にカウンタ値を表示します。

リスト1.4 MTCounterValue タグ

<MTCounter>
  <MTEntries> 
    <$MTCounterPlus$>
    <$MTEntryTitle$>[<$MTCounterValue$>]<br />
  </MTEntries> 
</MTCounter>

リスト1.4 を実行(再構築)すると、MTCounterValue の部分に "1,2,3,4,5 ..." と表示されます。MTCounterValue の後方に MTCounterPlus が置かれていれば、"0,1,2,3,4 ..." と表示されます。

現在のカウンタ値と比較する場合は、MTCounterIfEqual タグで判定します。このタグに記述した value 属性の値とカウンタ値を比較します。
リスト1.5 は5番目のリスト表示の後に hr 要素を挿入します。

リスト1.5 MTCounterIfEqual タグ

<MTCounter>
  <MTEntries> 
    <$MTCounterPlus$>
    <$MTEntryTitle$><br />
    <MTCounterIfEqual value="5"><hr /></MTCounterIfEqual>
  </MTEntries> 
</MTCounter>

さらにカウンタ値との大小を比較する場合は MTCounterIfLess タグおよび MTCounterIfMore タグを用います。
リスト1.6 は、1-4番目のリスト、5番目のリスト、5番目以降のリストに、それぞれ異なる class 属性を与えています(分かりやすくするために span 要素全体を括っていますが class 属性あるいは class 属性値部分のみを括るという方法もあります)。

リスト1.6 MTCounterIfLess / MTCounterIfMore タグ

<MTCounter>
  <MTEntries>
    <$MTCounterPlus$>
    <MTCounterIfLess value="5"><span class="a"></MTCounterIfLess>
    <MTCounterIfEqual value="5"><span class="b"></MTCounterIfEqual>
    <MTCounterIfMore value="5"><span class="c"></MTCounterIfMore>
    <$MTEntryTitle$></span><br />
  </MTEntries>
</MTCounter>

カウンタ値の偶数・奇数によって表示を変える方法、および カウンタを n で割った余りが value 属性値と等しい時に表示する場合は、MTCounterIfOdd / MTCounterIfEven / MTCounterIfMod タグを利用します。サンプルは Counter プラグイン ドキュメントを参照してください。


*1:これに近い機能として、MTEntries タグの lastn 属性と offset 属性の組み合わせによる実現があります。

関連記事
zenback
人気エントリー
トラックバックURL


トラックバック

LoopLimiter Plugin from greenplastic.net
 Movable Type のあらゆるコンテナタグの中で、たとえば『4回目毎に出現するアイテムに異なったスタイルを適用したい』とかいうような局所的なリクエ... [続きを読む]

Tracked on November 16, 2006 10:27 AM

スマートで高機能!Counterプラグイン from あんちもん2.Lab
先日公開された、Counterプラグイン。拙作 AutoIncrementalVar プラグインとどう違うのか検証。 [続きを読む]

Tracked on November 17, 2006 1:12 AM

カウンタによって表示を変える from MovableType備忘録
先日、小粋空間さんのところでCounter プラグインというのが紹介されてました。 このプラグイン、元はエムロジック放課後プロジェクト::MovableT... [続きを読む]

Tracked on November 18, 2006 2:08 AM

Counter Pluginでエントリーのリストをカウント from WebRoom
MovableTypeの管理画面にあるテンプレート一覧のようにリストを交互に色... [続きを読む]

Tracked on November 25, 2006 2:42 AM

Counter プラグインで更新順フィード解決 from a.sueの日記 ブログ版
小粋空間でCounterプラグインが紹介されているのを見て、これで更新順の最初か... [続きを読む]

Tracked on December 2, 2006 12:47 PM

MTCounterというもの。 from Blog
仕事の関係でMTを色々触っているけど、今回なんかカウントできるものないかなーって... [続きを読む]

Tracked on January 30, 2008 9:29 PM

[MT4]MTCounterプラグインを標準機能で実現 from Cherry Pie Web
MT4.1以降では、MTCounterプラグインの機能が、標準機能で代替出来ます。 [続きを読む]

Tracked on May 27, 2009 12:43 AM
コメント

<$MTCounterSetValue value="10"$>
のvalue値に数字以外のものを指定したいのですが、それはできないのでしょうか。
5件ずつカウントダウンさせながら表示させているのですが、5以下は<MTCounterIfEqual value="1"><MTCounterSetValue value="1"></MTCounterIfEqual>
とひとつずつ指定してやることで実現できました。
5以上になったらカウンタの最大値からカウントダウンさせたいので
<MTCounterIfMore value="5"><MTCounterSetValue value="<$MTEntryCommentCount$>"></MTCounterIfMore>
としたいのです。

valueに変数はムリなのでしょうか。何かいお知恵があったら教えてください。

[1] Posted by chaco : December 15, 2006 11:07 PM

>chacoさん
こんばんは。
ご質問の件は TagInvoke プラグインを利用すれば可能かもしれません。
あとすいませんが、希望される動作が上記の文言からでは理解できませんでした。MTCounter 全体のタグを貼り付けてもらった方がいいかもしれません。
それではよろしくお願い致します。

[2] Posted by yujiro : December 17, 2006 9:51 PM

お返事が遅れました。
詳細はお知らせできないのですが、質問の件は、CounterプラグインとCommentOrderNumberByDescend プラグインを組み合わせて実現することができました。ありがとうございました。

[3] Posted by chaco : January 9, 2007 3:04 PM

>chacoさん
こんばんは。
ご連絡ありがとうございました。
うまく表示できたようでよかったです。
ではでは!

[4] Posted by yujiro : January 9, 2007 11:34 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)