Counter プラグイン
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
属性の組み合わせによる実現があります。
- Movable Typeでコンテンツタイプのフィールド名を出力する「ContentFieldNameプラグイン」
- Movable Typeで指定したテンプレートのアーカイブパスを取得できる「EntryLinkByTemplateNameプラグイン」
- Movable Type 5でお気に入りリストが作れる「Linklistプラグイン」バージョンアップ
- Objectプラグイン v0.10(ダイナミックパブリッシング対応)
- Objectプラグイン v0.03
- Object プラグイン v0.02
- CommentCustomFieldプラグイン v0.10
- EntryCategoryID プラグイン v0.10
- CommentCustomField プラグイン v0.04(ラジオボタン・チェックボックス・プルダウンメニュー対応)
- CommentCustomFieldプラグイン v0.02(画像のアップロード対応)
- RecommendedEntry プラグイン
- Split プラグイン
- ArchiveDateFooter プラグイン(MT4.2 対応)
- FolderLink プラグイン
- BlogArchiveRelativeURLプラグイン
≫ LoopLimiter Plugin from greenplastic.net
Movable Type のあらゆるコンテナタグの中で、たとえば『4回目毎に出現するアイテムに異なったスタイルを適用したい』とかいうような局所的なリクエ... [続きを読む]
≫ スマートで高機能!Counterプラグイン from あんちもん2.Lab
先日公開された、Counterプラグイン。拙作 AutoIncrementalVar プラグインとどう違うのか検証。 [続きを読む]
≫ カウンタによって表示を変える from MovableType備忘録
先日、小粋空間さんのところでCounter プラグインというのが紹介されてました。 このプラグイン、元はエムロジック放課後プロジェクト::MovableT... [続きを読む]
≫ Counter Pluginでエントリーのリストをカウント from WebRoom
MovableTypeの管理画面にあるテンプレート一覧のようにリストを交互に色... [続きを読む]
≫ Counter プラグインで更新順フィード解決 from a.sueの日記 ブログ版
小粋空間でCounterプラグインが紹介されているのを見て、これで更新順の最初か... [続きを読む]
≫ MTCounterというもの。 from Blog
仕事の関係でMTを色々触っているけど、今回なんかカウントできるものないかなーって... [続きを読む]
≫ [MT4]MTCounterプラグインを標準機能で実現 from Cherry Pie Web
MT4.1以降では、MTCounterプラグインの機能が、標準機能で代替出来ます。 [続きを読む]
<$MTCounterSetValue value="10"$>
のvalue値に数字以外のものを指定したいのですが、それはできないのでしょうか。
5件ずつカウントダウンさせながら表示させているのですが、5以下は<MTCounterIfEqual value="1"><MTCounterSetValue value="1"></MTCounterIfEqual>
とひとつずつ指定してやることで実現できました。
5以上になったらカウンタの最大値からカウントダウンさせたいので
<MTCounterIfMore value="5"><MTCounterSetValue value="<$MTEntryCommentCount$>"></MTCounterIfMore>
としたいのです。
valueに変数はムリなのでしょうか。何かいお知恵があったら教えてください。
>chacoさん
こんばんは。
ご質問の件は TagInvoke プラグインを利用すれば可能かもしれません。
あとすいませんが、希望される動作が上記の文言からでは理解できませんでした。MTCounter 全体のタグを貼り付けてもらった方がいいかもしれません。
それではよろしくお願い致します。
お返事が遅れました。
詳細はお知らせできないのですが、質問の件は、CounterプラグインとCommentOrderNumberByDescend プラグインを組み合わせて実現することができました。ありがとうございました。
>chacoさん
こんばんは。
ご連絡ありがとうございました。
うまく表示できたようでよかったです。
ではでは!