備忘録:あらかじめカテゴリカウント

特定のカテゴリーのエントリー数を表示・利用したい、ということはMTをカスタマイズしていて多々あります。
普通に呼び出すには


<MTCategories><MTIfCategory name="カテゴリ名">
<$MTCategoryCount$>
</MTIfCategory></MTCategories>
上記のように全カテゴリー一覧から一箇所を引っこ抜いてくるという、メンドくさいことをしなければいけない。

MT4の<MTSetVarBlock>が柔軟なおかげでこんなことが出来るようになった。


<MTCategories>
<MTSetVarBlock name="category">
categoryCount_<$MTCategoryLabel cutnext="_">
</MTSetVarBlock>
<MTSetVarBlock name="$category">
<$MTCategoryCount$>
</MTSetVarBlock>
</MTCategories>
やってることの基本は前者と変わらないが、こいつの使い方はサイト全体で一律して使う(例えばヘッダーテンプレートなど)テンプレートに指定することで、全カテゴリーのエントリー数をあらかじめ確保しておくという内部モジュールとして使う。

解説

最初の<MTSetVarBlock name="category">は、「category」という変数に、「エントリーの数を格納する変数名」を取得しています。ボクはカテゴリーを必ず「000_新着情報」といった形で作るので、最初の数字を「CutStringプラグイン」で抜い「categoryCount」という一文とくっつけてます。
これにより、「categoryCount_000〜categoryCount_999」といった変数名が生成されます。
次の<MTSetVarBlock name="$category">、nameに「$category」とあります。
こいつは$categoryという変数ではなく、「categoryに格納されている文字列を変数名とする」という記述です。C言語で言うとこのポインターポインター、みたいな。
こう記述することで最初の<MTSetVarBlock>で生成した変数名「categoryCount_000」にエントリー数が格納されるワケです。
それを<MTCategories>で回すことであらビックリ!全カテゴリーのエントリー数が上手に取れましたー!
使う時は<MTGetVar>でも<MTIf name="categoryCount_000">みたく読んでもおk。



今回は全カテゴリのエントリー数を取得しておくという方法でしたが、他にもまだまだ応用できますね。