Page Top

Movable Type(MT)のスタティックパブリッシングとダイナミックパブリッシングにおけるコードの読み込まれ方の違い~その3ー自分用覚書

August 24, 2012

例えば、インデックスページのテンプレートに、とある文字列の後に連番の数字を連ねたシークレットタグを付与したウェブページのみを自動で表示したい場合で、そのシークレットタグが付与されたウェブページが1つも無い時は何も表示せず、シークレットタグが付与されたウェブページが1つでもある時だけ内容を表示するようにしたい場合、以下のようなコードを書いて判別の材料としていたのですが、これが(今のMT5.2Beta4での環境)スタティックパブリッシングの時はうまくいくのですが、ダイナミックパブリッシングの時は、変数に加えられる数値が「空」の時の扱い方が違うようで(?)「Fatal error: 0 + は不正です。」というエラーが出てうまくいかなかったので、一応昨日MTさんに不具合のリポートを出したのですが、今日1日熟考して解決策が見つけられたので、自分用覚書です。

<>は全角にしています。また、$quicklinks_num_valueは別のウィジェットテンプレートでセットしている値が来るようにしているものなので、下記コードをチェックしたい場合は、$quicklinks_num_valueに、適当に「5」とか「6」などの数字を入力してチェックしてみてください。

■当初、「Fatal error: 0 + は不正です。」というエラーが発生していたコード。(スタティックパブではOKです。)

<MTSetVar name="quicklinksnumcount" value="0">
<mt:for var="x" from="1" to="$quicklinks_num_value">
<MTSetVarBlock name="quicklinksnum">@quicklinks<MTGetVar name="x"></MTSetVarBlock>
<MTSetVarBlock name="quicklinkscount"><MTPages tag="$quicklinksnum" lastn="1"><MTEntriesHeader><$mt:EntriesCount$></MTEntriesHeader></MTPages></MTSetVarBlock>
<MTSetVar name="quicklinksnumcount" value="$quicklinkscount" op="+">
</mt:for>

上記のコードの時は、変数「quicklinkscount」の値が空の場合でも、「quicklinksnumcount」に「$quicklinkscount」の値をop="+"で全て集めるようにしていましたが、どうやら、その空の値というのは本当に「空」で、「0」という数値として認識されない(?)為か、なので、「Fatal error: 0 + は不正です。」というエラーが起こっていたようで、例えば、「$quicklinkscount」の所に直接「0」と入れてみると、理論的には「Fatal error: 0 + は不正です。」というエラーが起こるはずであるのに、何もエラーが起こりませんでした。なので、「quicklinkscount」で得ている値というのは、該当のウェブページが何も無い場合は、ただの「空」として理解される(?)ように思いました。なので、以下のようにして、「quicklinkscount」に何か数値がある時のみ、<MTSetVar name="quicklinksnumcount" value="$quicklinkscount" op="+">で、数値を加算していくようにしました。これで、スタティックもダイナミックもどちらでも大丈夫になりました。

■以下、解決したコード。

<MTSetVar name="quicklinksnumcount" value="0">
<mt:for var="x" from="1" to="$quicklinks_num_value">
<MTSetVarBlock name="quicklinksnum">@quicklinks<MTGetVar name="x"></MTSetVarBlock>
<MTSetVarBlock name="quicklinkscount"><MTPages tag="$quicklinksnum" lastn="1"><MTEntriesHeader><$mt:EntriesCount$></MTEntriesHeader></MTPages></MTSetVarBlock>
<MTIf name="quicklinkscount">
<MTSetVar name="quicklinksnumcount" value="$quicklinkscount" op="+">
</MTIf>

</mt:for>

ちなみに、上記の解決したコードで、<MTIf name="quicklinkscount">の時だけ「quicklinksnumcount」に値が集められるようになっていますが、該当のウェブページが何も無い場合、<MTFor>~</MTFor>の外側で「quicklinksnumcount」の値は「0」となり、ちゃんと判別に利用できるようになります。

また、上記解決に至る前に、<$mt:EntriesCount$>に「none="0"」を加えて、<$mt:EntriesCount none="0"$>という風にしてみましたが、「quicklinkscount」のvalueとして「0」と認識してくれなかったようで、うまく行きませんでした。

最新記事