グローバルテンプレートを確実に読み込むMTIncludeタグのglobalモディファイア
MTInclude
タグにglobal
モディファイアという、グローバルテンプレートを読み込む上で便利なものが存在する事を知りました。
と、その前に、グローバルテンプレートを読み込む上で知っておかなくてはならない事を一つ。
それはMTInclude
タグでテンプレートを読み込む際の優先順位です。
テンプレートを読み込む優先順位
グローバルテンプレートを使っていなかった私は、テンプレートを読み込む優先順があると知りませんでした。
MovalbeType.jpの情報によれば、グローバルテンプレートよりブログのテンプレートを優先して読み込むようです。
グローバルテンプレートを、ブログのテンプレート内で利用するには、通常のテンプレートのインクルードと同じく、MTInclude という MT タグを利用します。
MTInclude タグを利用してテンプレートをインクルードする際に、Movable Type は以下の順番で、インクルードするテンプレートを決定します。
- タグで指定した名前のテンプレートが、そのブログのテンプレート・セット内に存在する場合は、そのテンプレートをインクルード
- そのブログのテンプレート・セット内に存在しない場合は、グローバルテンプレートから該当する名前のテンプレートをインクルード
- 両方に無い場合は、テンプレートが見つかりません というエラーを表示
これを見る限り、読み込みたいグローバルテンプレートと同名のテンプレートがブログに存在する場合、グローバルテンプレートを読み込む事はできません。
それを回避するのが、MTInclude
タグのglobal
モディファイアです。
global
モディファイア
global
モディファイアはMTInclude
タグで使う事ができます。
global="0|1"
グローバルテンプレートに属するテンプレートモジュールと同じ名前のテンプレートモジュールがブログのテンプレートにもある場合、Movable Type はブログのテンプレートの方を優先して読み込みます。このモディファイアを付与し値に 1 を設定すると、グローバルテンプレートにあるテンプレートモジュールを優先して読み込みます。初期値はグローバルテンプレートを優先しない 0 です。
使い方は簡単で、下の例ではナビゲーションというグローバルテンプレートを読み込みます。
<$MTInclude module="ナビゲーション" global="1"$>
この場合、global
を使っているのでブログにナビゲーションという名前のテンプレートが存在しても、グローバルテンプレートのナビゲーションを優先して読み込みます。
注意
global
モディファイアに1を設定する時には若干の注意が必要です。
global
モディファイアを使ったMTInclude
タグはグローバルテンプレートを優先
しますが、もしもグローバルテンプレートが見つからなかった時はどうなるのでしょうか。
私は「ブログのテンプレートを探す」のだと思いましたが、実際にはエラーが表示されます。
global
モディファイアを使う時は下のように、ブログのテンプレートを探すステップがなくなるのです。
- グローバルテンプレートを探す
- グローバルテンプレートが見つかった場合、それを読み込む
- グローバルテンプレートが見つからなかった場合、エラーを表示する
つまりglobal
モディファイアはテンプレートの優先順位を逆転させるものではないのです。
グローバルテンプレートを優先するからといって、ブログのテンプレートが後回しになるわけではないのです。
なので、まず先にグローバルテンプレートを探し、見つからなければブログのテンプレートを読み込む、という逆の動作を狙う事はできないのです。
うーん、どうもこの動作に納得がいかない。
一方が優先されるなら、もう一方は劣後されるのが妥当な気がする。
単にMovableType.jpの言い回しが
補足
ウィジェットの場合
記事中ではテンプレートモジュールについてのみ取り上げましたが、MTInclude
タグではウィジェットを読み込む事もできます。
そのウィジェットにもグローバルウィジェットと呼ぶべきものが存在します。
そしてお察しの通り、global
モディファイアはウィジェットに対しても有効です。
<$MTInclude widget="ウィジェット名" global="1"$>
identifier
モディファイアの場合
identifier
モディファイアを使った場合でもグローバルテンプレートを読み込む事は可能です。
<$MTInclude identifier="識別子" global="1"$>
しかし、グローバルテンプレートとブログのテンプレートの名前もidentifier
も一致している事はとても珍しい気がします。
だとすれば、名前かidentifier
を異なるようにテンプレートセットを作成し、一方を読み込むには名前で、もう一方を読み込むにはidentifier
で、という使い分けを行えばglobal
モディファイアは必要ないですね。
MTIncludeBlock
の場合
MTInclude
タグには似た機能を持つMTIncludeBlock
が存在します。
テンプレートタグリファレンスには載っていませんが、こちらでもglobal
モディファイアが使える事を確認しました。
そしてお察しの通り、ウィジェットに対しても有効です。
<MTIncludeBlock module="テンプレート名" global="1">
moduleモディファイアを
widgetモディファイアにしても大丈夫です
</MTIncludeBlock>
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
コメントはまだありません。