mizm

プレビュー時のバグらしき挙動不具合

0
ある条件の時にファイルを生成しないように詳細ページのアーカイブパス欄に以下のように記述しています。(※実際に改行無しです)
カスタムフィールドはチェックボックスです。
<mt:SetVarBlock name="hogehoge"><mt:customfieldname></mt:SetVarBlock>
<mt:if name="hogehoge" eq="0"><mt:Else><mt:entrybasename>.html</mt:Else></mt:if>
このソースですと新規作成時のプレビューは、カスタムフィールドに値のある時、ない時、どちらもプレビューされますが、
チェックの無い状態で公開した後、チェックを入れ、プレビューするとエラー表示になります(プレビューできません)。
(値を入れなければ、プレビューされます)
一方、
<mt:SetVarBlock name="hogehoge"><mt:customfieldname></mt:SetVarBlock>
<mt:if name="hogehoge" eq="1"><mt:entrybasename>.html<mt:Else></mt:Else></mt:if>
にしますと、新規作成時に同じくおかしくなります。(保存後の記事はプレビューできます)
mt:ifの部分を mt:if tag="hogehoge" にしても挙動は変わりません。
ソースに誤りがあったとしても、
そもそも同一内容の入力値で新規作成時の記事と既存記事で挙動が異なる時点でバグの可能性が高そうな印象です。
基本機能の不具合なので次期バージョンで対応をお願いしたいです。

返信(4)

| 返信する
  • 新規作成時の記事と既存記事で挙動が異なるのは、仕様と捉えたほうがいいと思いますね。
    アーカイブパス欄に、MTタグを使った場合、特に保存前では結果は保証されないはずです。(DBに保存処理が行われる前に、結果の判定を行うわけですから)
    また記事のプレビューを行う場合は、アーカイブパスが常に空にならないようにする必要があります。そのアーカイブパスの書き方は間違っています。アーカイブパスの値が存在しないと、プレビューファイルの作成は出来ません。
    値がない時にプレビューしてエラーになるのは、当たり前ですので、チェックしていない時にもプレビューボタンを押したいのならば、MTElseでダミーのファイル名を指定しておくべきです。
    さらに、もうひとつ。チェックボックス型の変数が「=0」になるケースは存在しないはずです。詳しい話はカスタムフィールドの構造の話になってしまいますが、変数の値は「1」もしくはナシです。
    もしチェックボックスでの判断がしたい場合は、 <mt:if tag="hogehoge" eq="1"><mt:entrybasename>.html</mt:if> の様に書きます。

  • oscar様
    コアな情報ありがとうございます!
    とても為になります。

    > また記事のプレビューを行う場合は、アーカイブパスが常に空にならないようにする必要があります
    なるほど。
    プレビュー時と実際の出力時で内部処理が異なる仕様により、双方に合わせた記述が必要という事ですね。
    動かしている内にそうなのかなと思われたので、mt:If name="preview_template"と記述してみたのものの、機能しませんでした。。(保存前、保存後限らず)

    > MTElseでダミーのファイル名を指定しておくべきです。
    はい。
    ただ、これにダミーとは言え適当な文字列を入れるとElseの場合にもファイル生成されてしまうと思います。
    となるとプレビューまでフォローするとすれば、こちら↓のNoRebuildプラグインを使用して制御するしか無さそうです。
    http://www.h-fj.com/blog/archives/2009/08/01-073819.php
    という見解で認識は正しいでしょうか。

    > チェックボックス型の変数が「=0」になるケースは存在しないはずです。
    チェックしない時は0でチェックした時は1だと勝手に思っていました。
    最近はmtif: tag="hoge"で判定する事が多く、誤認していました。

    少し逸れますが、テンプレート編集画面のアーカイブパス欄への記述はシステム側としてはどこまでフォローしているのでしょうか。
    そもそもオフィシャルな使い方では無さそうな感じですが、実際はかなり有用/有益です。(むしろ制御できないと大変困ります)
    生成結果でしかデバッグができない(うまいが方法あるのでしょうか)のが玉にキズでが、該当部分をmodule化しておけばいくらでも条件は書けそうです。
    mt:If name="preview_template"が効かなかったりで、どこまで制御可能なのか現状のラインが気になるところです。

    • > ダミーとは言え適当な文字列を入れるとElseの場合にもファイル生成されてしまうと思います。
      その通りです。よくやるのは、no_outputとかにして特定の1ファイルに対して、常に上書きする事はやりますね。
      その上で、テンプレート上で同じ分岐を行い、出力される内容についても空になるように記述してます。

      > 少し逸れますが、テンプレート編集画面のアーカイブパス欄への記述はシステム側としてはどこまでフォローしているのでしょうか。
      そうですね。全てのケースで動作するものではないというのは確かなようです。
      特にシステム変数などは管理画面生成時に精製処理が行われるものなので、ダメだと思ったほうが良いでしょうね。
      それから、カテゴリーアーカイブに対して、MTIfを使った場合は、空のカテゴリーアーカイブの出力が行われなくなる等、想定外の問題も発生するようです。(こういうのは、仕様外の使い方をした結果なので、バグとは言わないですね)

  • oscar様
    ありがとうございます!
    出力制御に関する仕様は、今のところあまり優しいとは言えなそうな印象ですので、次期バージョンではせめて範疇を明確にして欲しいところです。
    この度はご丁寧な対応ありがとうございました。

返信する


カテゴリグループ

フォーラムカテゴリー

21 76

最新のトピック: 公開終了日の取り消し (2013年10月18日 gsk)

178 552

最新のトピック: ユーザへアカウント発行通知 (2014年1月27日 cmtskt)

143 426

最新のトピック: アイテム・カスタムフィールドの連動 (2013年12月16日 kazuhiro watanabe)

291 819

最新のトピック: 検索についての質問 (2014年1月23日 noble777)

OpenID対応しています OpenIDについて