グローバルテンプレートとブログのテンプレートを同時に読み込めない不具合
先日紹介したグローバルテンプレートについて不具合を見つけましたのでその原因と対処法を紹介します。
この不具合はSix Apartへ既にフィードバック済みです。
不具合
この不具合は、一つのテンプレートから同名の、グローバルテンプレートとブログのテンプレートを読み込んだ場合、後に読み込んだ方の内容が先に読み込んだ方の内容と同一になるというものです。
私が不具合の発生を確認したのはMovable Type Pro 4.261です。
これ以前のバージョンでも発生するかは未確認です。
原因
不具合の発生原因は一つのテンプレートから同名の、グローバルテンプレートとブログのテンプレートを読み込む事です。
下記のような記述がそれです。
<$MTInclude module="モジュール名" global="1"$>
<$MTInclude module="モジュール名" global="0"$>
グローバルテンプレートとブログのテンプレートの読み込み順を逆にしても不具合は発生します。
<$MTInclude module="モジュール名" global="0"$>
<$MTInclude module="モジュール名" global="1"$>
上の例ではテンプレートの呼び出しが連続していますが、間に他の記述があっても不具合は発生します。
<$MTInclude module="モジュール名" global="1"$>
<ul>
<MTEntries>
<li><MTEntryTitle></li>
</MTEntries>
</ul>
<$MTInclude module="モジュール名" global="0"$>
module
モディファイア以外、例えばidentifier
モディファイアを使った場合でも不具合は発生します。
<$MTInclude identifier="識別子" global="1"$>
<$MTInclude identifier="識別子" global="0"$>
症状
不具合の症状は、後に読み込んだテンプレートの内容が、先に読み込んだテンプレートの内容と同一になるというものです。
例えば、ブログのテンプレートを先に読み込んだ場合、後から読み込んだグローバルテンプレートの内容はブログのテンプレートの内容となります。
言い方を変えると、先に記述されたMTInclude
タグの内容が二度読み込まれるという事です。
あくまで先に記述された方が読み込まれるだけなので、原因の方で説明しました通り、読み込む順に関わらずテンプレートの内容は同一になります。
対処法
まず、絶対的に有効なのはグローバルテンプレートとブログのテンプレートを同時に読み込まない事です。
もしも可能であるなら、それ以上の最善策はありません。
それが不可能でも、方法はあります。
それは使用するモディファイアを一致させないという事です。
<$MTInclude identifier="識別子" global="1"$>
<$MTInclude module="モジュール名" global="0"$>
上の例では、グローバルテンプレートの読み込みはidentifier
モディファイアで、ブログのテンプレートはmodule
モディファイアで行っています。
この場合、不具合は発生しません。
今現在、私はこれ以外の対処法を知りません。
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
コメントはまだありません。