拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
include_blogsつきのMTEntriesタグのブロックでMTIncludeタグを使う際の注意点
先日、「MTIncludeタグでテンプレートモジュールを読み込もうとすると、そのテンプレートモジュールがブログにあるにも関わらず、『テンプレートが見つかりませんでした』とエラーが表示される」という質問を受けました。
Movable Typeにログインさせていただいて状況を確認したところ、MTEntriesタグのinclude_blogsモディファイアが原因であることが分かりました。
1.問題の原因
質問された方のテンプレートを拝見すると、以下のような部分がありました。
<mt:Entries include_blogs="2"> ... <mt:Include module="foo"> ... </mt:Entries>
MTIncludeタグでテンプレートモジュールを読み込む場合、通常はそのテンプレートが属するブログから、テンプレートモジュールを読み込みます。
しかし、MTEntriesタグにinclude_blogsモディファイアを指定し、他のブログから記事を読み込んでいる状況では、記事があるブログからテンプレートモジュールを読み込もうとします。
上のテンプレートの例だと、「include_blogs="2"」のモディファイアを指定しているため、IDが2番のブログから記事を読み込みます。
この状況でMTIncludeタグを実行すると、「foo」テンプレートモジュールも、IDが2番のブログから読み込みます。
そのため、IDが2番のブログに「foo」テンプレートモジュールがないと、「テンプレートモジュールが見つかりませんでした」のエラーが発生します。
2.回避方法
この問題を回避するには、以下のようにします。
- MTEntriesタグのブロックに入る前に、テンプレートが属するブログのIDを変数にセットします。
- MTIncludeタグに「blog_id="$変数"」のモディファイアを追加し、テンプレートが属するブログからテンプレートモジュールを読み込みます。
例えば、1.で挙げたテンプレートの場合、以下のように書き換えます。
<$mt:BlogID setvar="this_blog_id"$> <mt:Entries include_blogs="2"> ... <mt:Include module="foo" blog_id="$this_blog_id"> ... </mt:Entries>
1行目のMTBlogIDタグで、変数this_blog_idに、テンプレートが属するブログのIDを代入します。
そして、4行目のMTIncludeタグに「blog_id="$this_blog_id"」のモディファイアを追加し、テンプレートが属するブログから、「foo」テンプレートモジュールを読み込みます。