今年の目標:ブログ記事x本、現在y本、残りz本 をDynamicMTML を使ってリアルタイムに表現する方法

今年は、1年間で 100 本のブログ記事を書こうという密かな目標があるのですが、現在の状況をいちいち管理画面でカウントするのが面倒なので、DynamicMTML を使ってリアルタイムで状況を表示させてみます。 これには MTSearchEntries タグを利用します。...

今年は、1年間で 100 本のブログ記事を書こうという密かな目標があるのですが、現在の状況をいちいち管理画面でカウントするのが面倒なので、DynamicMTML を使ってリアルタイムで状況を表示させてみます。

これには MTSearchEntries タグを利用します。

完成したテンプレート

今回の内容を実現するテンプレートは次のようになります。

<mt:DynamicMTML>
<$mt:Date format="%Y" setvar="year"$>
<mt:If name="year" eq="2012">
<$mt:SetVar name="goal" value="100"$>
<$mt:SetVar name="count" value="0"$>
<mt:SearchEntries query="2012-01-01 00:00:00" target="authored_on" operator=">" blog_id="1" lastn="9999">
<$mt:SetVar name="count" op="++"$>
</mt:SearchEntries>
<ul>
<li><$mt:Var name="year"$>年の目標 : ブログ記事<$mt:Var name="goal"$>本</li>
<li>2012-01-01 から <$mt:Date format="%Y-%m-%d"$> までに「<$mt:Var name="count"$>」の記事を書きました。</li>
<li>目標達成まで残り「<$mt:Var name="goal" op="-" value="$count"$>」!</li>
</ul>
</mt:If>
</mt:DynamicMTML>

解説

上記の完成したテンプレートにコメントを入れる形で解説します。

なお、指定期間内のブログ記事をリストアップする方法は「はじめての DynamicMTML #13 - 指定期間内の記事をリストアップする」を参照してください。

<!-- 全体をDynamicMTMLで出力 -->
<mt:DynamicMTML>

<!-- テンプレートを再構築した年(今年)を変数yearにセット -->
<$mt:Date format="%Y" setvar="year"$>

<!-- 変数yearが2012年だったらIF文内を実行 -->
<mt:If name="year" eq="2012">

<!-- 目標を変数goalにセット -->
<$mt:SetVar name="goal" value="100"$>

<!-- 変数countを初期化 -->
<$mt:SetVar name="count" value="0"$>

<!-- 2012年1月1日以降のブログ記事をリストアップ -->
<mt:SearchEntries query="2012-01-01 00:00:00" target="authored_on" operator=">" blog_id="1" lastn="9999">

<!-- 何も出力しないで変数countをインクリメント。この変数countが該当するブログ記事数になる -->
<$mt:SetVar name="count" op="++"$>

</mt:SearchEntries>

<ul>
<!-- 変数yearと変数goalの値を出力 -->
<li><$mt:Var name="year"$>年の目標 : ブログ記事<$mt:Var name="goal"$>本</li>

<!-- テンプレートを再構築した日付(今日)と変数countの値を出力 -->
<li>2012-01-01 から <$mt:Date format="%Y-%m-%d"$> までに「<$mt:Var name="count"$>」の記事を書きました。</li>

<!-- 目標値から今年公開した記事数を引いた数を出力 -->
<li>目標達成まで残り「<$mt:Var name="goal" op="-" value="$count"$>」!</li>
</ul>
</mt:If>
</mt:DynamicMTML>

以上です。

Published 2012-05-21
Updated 2019-06-25