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」と認識してくれなかったようで、うまく行きませんでした。
- ブログトップページへ
- 次の記事: 「南海トラフ地震の想定」
- 前の記事: 「2013年はアメリカ・カナダで小麦・コーン関係食料品価格平均4%上昇の見込みーアメリカ中西部大旱魃の影響で」
- 過去記事一覧アーカイブへ
最新記事
- MTで検索タイムアウトが発生した場合
- MT7で新しいサイトを作るとき (自分用覚書)
- MT テーマのエクスポート時にファイルも選択する際、ファイル内に文字化けファイルがあるとエラー(自分用覚書)
- もしかして半身浴のお陰?花粉症の症状が出ません
- Hiromi: The Trio Project featuring Anthony Jackson
- Juneuary Weather 一気に寒く
- ローズガーデン at Burnaby Mountan
- やっとPRカード申請書を郵送
- きんぴらいなり寿司
- PRカードの更新・・!
- 今日の風景
- 5年前のちょうどこの時間帯に
- もうすぐ新年!
- ビクトリア北でM4.8の地震
- 中抜き化が進みつつある