このブログはMovableTypeで構築されているが、最初の構築時にすべてのテンプレート(システムテンプレートを除く)、スタイルシート等は一旦削除し、一から作り直している。
それによりMTの仕組みを深く理解出来ると思ったし実際いろんな事が分かってきた(とはいっても、たいした事はやってないんだが)。
つい最近まで分かんなかった事で、記事投稿時のプレビュー画面がきちんと表示されないといった不具合があった。
もちろん投稿が終わって再構築をすればページ自体はきちんと表示されるので特に気にはしていなかったんだが、今後の事も考えて調べてみる事にした。

僕が作っているテンプレートは「アーカイブインデックス」、「メインページ」、「ブログ記事」、「ブログ記事リスト」の4つはすべて共通で具体的には

<$mt:Include module="ヘッダー"$>
<$mt:Include module="メインコンテンツ"$>
<$mt:Include module="サイドバー"$>
<$mt:Include module="フッター"$>

と、たったこれだけの記述しかないが、ここで読み込んでいる「メインコンテンツ」モジュールの中で条件を分岐している。
そのモジュールの中身(一部抜粋)は

<mt:if name="entry_archive">
<$mt:Include module="ブログ記事の概要"$>
<$mt:Include module="カテゴリ"$>
<$mt:Include module="トラックバック"$>
<$mt:Include module="コメント"$>
<mt:elseif name="archive_index">
<$mt:Include module="アーカイブ"$>
<mt:else>
<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>
</mt:if>

と、個別のブログ記事のとき(変数entry_archiveが有効になっているとき)にだけ複数のモジュールを読み込む設定にしてある。
アーカイブインデックスの時は「アーカイブ」モジュールを、それ以外の時はブログ記事が連なって表示されるように<mt:Entries>タグで括って記事ごとに「ブログ記事の概要」モジュールを読み込むようにしてある。

どうやらこの条件の書き方がまずいみたいだ。
ブログ記事を投稿する時の確認ボタンを押してプレビューされる画面は普通に考えれば「ブログ記事」アーカイブテンプレートを通してレンダリングされると思うはずだ。
そして実際そうなっている。
しかしそこから読み込む「メインコンテンツ」テンプレートモジュールの条件分岐で思った結果になっていない。
具体的には

<mt:if name="entry_archive">

この条件に引っかかってこないようだ。

さらに

<mt:elseif name="archive_index">

この条件にもひっかからず
最終的に

<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>

この部分が実行されてしまっている。
という訳だ。

まあ、原因が分かってしまえば対応も出来るんだが、とりあえずは下記のようなコードにしてみた。

<mt:if name="main_index">
<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>
<mt:elseif name="archive_listing">
<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>
<mt:elseif name="archive_index">
<$mt:Include module="アーカイブ"$>
<mt:else>
<$mt:Include module="ブログ記事の概要"$>
<$mt:Include module="カテゴリ"$>
<$mt:Include module="トラックバック"$>
<$mt:Include module="コメント"$>
</mt:if>

これで、前述の不具合は解消され「プレビュー画面」もちゃんと表示されるようにはなったが、やはりどうにも

<mt:if name="main_index">
<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>
<mt:elseif name="archive_listing">
<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>

この部分が気に入らない。
通常プログラマであればここは

if ($main_index || $archive_listing) {}

と、こう書きたいはずだと思うんだがMTでこんな書き方は出来ないんだろうか?
結局よくわからないまま一日ほったらかしていたんだがもっと短く書ける方法が分かった。
コードは

<mt:if name="entry_template">
<$mt:Include module="ブログ記事の概要"$>
<$mt:Include module="カテゴリ"$>
<$mt:Include module="トラックバック"$>
<$mt:Include module="コメント"$>
<mt:elseif name="archive_index">
<$mt:Include module="アーカイブ"$>
<mt:else>
<mt:Entries><$mt:Include module="ブログ記事の概要"$></mt:Entries>
</mt:if>

これでいい。
結局最初の

<mt:if name="entry_archive">

<mt:if name="entry_template">

にしただけでよかったという事だ。
もちろんこれが成立するという事は「ウェブページ」アーカイブテンプレートの時は
page_archiveとpage_template
との違いが出てくるんだろうな。

カテゴリ:

トラックバック(0)

トラックバックURL: http://blog.beanz-net.jp/beanz_mtos/mt-tb.cgi/67

コメントする