MTタグの条件分岐で「この記事は○分で読めます」をやってみる。
こんにちは、どもども。
ちょっと必要なことがあって、MTタグの条件分岐をあらためて調べてたついでに、サンプルで「この記事は○分で読めます」をやってみることにしました。
※2014.11.2 追記あり
上記の記事では「1分以内」と「1分以上」しか区分がなかったので、それをもう少し細かくしたいな、と。
日本人の平均的な文字を読む速度が1分で400〜600文字とのことだったので、今回は500文字で区切ることにしました。
この記事の左上部分に「文字数」と「読む目安」が記載されていると思います。
これをMTタグだけで作っていきましょうー。
MTタグの役割とかは先程の参考ブログを読んでいただくとして、完成形はコチラになります。
<mt:SetVars>
body_count=<$MTEntryBody remove_html="1" count_characters="1"$>
more_count=<$MTEntryMore remove_html="1" count_characters="1"$>
</mt:SetVars>
<mt:SetVar name="total_count" value="$body_count">
<mt:SetVar name="total_count" value="$more_count" op="+">
文字数:<mt:Var name="total_count"><br />
<mt:if name="total_count" le="500">
読む目安:1分以内
<mt:Else>
<mt:if name="total_count" le="1000">
読む目安:2分以内
<mt:Else>
<mt:if name="total_count" le="1500">
読む目安:3分以内
<mt:Else>
<mt:if name="total_count" le="2000">
読む目安:4分以内
<mt:Else>
<mt:if name="total_count" le="2500">
読む目安:5分以内
<mt:Else>
読む目安:5分以上
</mt:if>
</mt:if>
</mt:if>
</mt:if>
</mt:if>
文字数が500以下なら1分以内で、そうじゃない場合は、1,000文字以下で2分で、それにも該当しない場合は・・・と続き、最後に2,500文字以下か2,501文字以上か、で終了しています。
もう少しスマートに、<mt:Elseif ge="2001" le="2500"> とかできると良い感じですけど、他に方法あるんでしょうかね。
良い方法を御存知の方がいたら教えてください(苦笑)
※追記
この記事の公開後、bit partのまーしーさんからFacebookでコメントを頂きました。
そのコメントを参考にやってみたところ、期待通りの動作をしましたのでこちらに追記しておきます。
【方法1】
<mt:If name="total_count" gt="2500">
読む目安:5分以上
<mt:ElseIf gt="2000">
読む目安:5分
<mt:ElseIf gt="1500">
読む目安:4分
<mt:ElseIf gt="1000">
読む目安:3分
<mt:ElseIf gt="500">
読む目安:2分
<mt:Else>
読む目安:1分
</mt:if>
【方法2】
<mt:If name="total_count" le="500">
読む目安:1分
<mt:ElseIf le="1000">
読む目安:2分
<mt:ElseIf le="1500">
読む目安:3分
<mt:ElseIf le="2000">
読む目安:5分
<mt:ElseIf le="2500">
読む目安:5分
<mt:Else>
読む目安:5分以上
</mt:if>
【方法3】
読む目安:<mt:if name="total_count" gt="2500">
5分以上
<mt:Else>
<mt:Var name="total_count" op="/" value="500" regex_replace="/(\d*)\.(\d*)/","$1" setvar="_toal_count">
<mt:Var name="_toal_count" op="++">分
</mt:if>
方法3は、文字数をカウントしてそれを500で割り、出た数字を四捨五入して「分」を出しています。
参考:MTタグで「四捨五入」の計算をする
この記事公開前に Elseif は試していたのですが、その時は何か間違っていたようでした(汗)
上記のように書くと期待通りに動きます。
いずれも出力結果は同じですので、お好みのものを利用してOKと思います!
まーしーさん、ありがとうございました!