Movable Type 5.13で「Template load error」になる問題について

Movable Type 5.13で「Template load error」になる問題について

Posted at February 29,2012 12:55 AM
Tag:[5.13, MovableType, TroubleShooting]

Movable Type 5.13で「Template load error」になる問題について、MTQフォーラムのトピックで話題になっていたので、こちらでも情報展開します。

1.問題点

Movable Type 5.13にアップグレードしたあと、ブログ記事投稿画面や他の管理画面にアクセスすると「Template load error」になる可能性があります。

Template load error

アップグレードだけでなく、MT5.13を新規インストールしたあとにプラグインをインストールした場合も同様です。

2.原因

5.13でセキュリティが強化によりテンプレート読み込み処理が変更されたため、管理画面にテンプレートを埋め込む処理を行っているプラグインを利用している場合にこの問題が発生するようです。

具体的には、テンプレートファイルを読み込むプラグインについて、読み込むテンプレートファイルのパスを明示的に指定していないと、冒頭の「Template load error」が発生します。

エラーになったプラグインのソースコードをトレースしたところ、次のような処理を行っているプラグインがこのエラーに遭遇するようです(これがすべてかどうかは不明)。

use File::Spec;
…中略…
my $plugin = $cb->plugin;
my $hoge = $tmpl->getElementById('hoge');
my $tmpl = File::Spec->catdir($plugin->path, 'tmpl', 'foo.tmpl');
my $include = $tmpl->createElement('include', { name => $tmpl });
$tmpl->insertAfter($include, $hoge);

上記の処理は、管理画面テンプレートの任意の位置(例ではid="hoge"のついたテンプレートタグの直後)にMTIncludeタグを追加し、追加したMTIncludeタグを使って、プラグインで定義しているテンプレートをインクルードするものです。

ソースコード上は見えませんが赤色のようなMTIncludeタグが追加されます。

<mtapp:setting id="hoge">
…中略…
</mtapp:setting>
<$mt:Include name="プラグインのパス/tmpl/foo.tmpl"$>

3.対処方法

一番手っ取り早い方法は、該当のプラグインを無効化すれば解消します。

問題となるプラグインが分からない場合は一旦すべてのプラグインを無効化して、1つずつ有効にしていくとよいでしょう。

以下のプラグインを利用すれば、切り分けが楽に行えるかもしれません。

MultiPluginSwitcherプラグイン
MultiPluginSwitcherプラグイン

プラグインを修正する場合は、plugin_template_pathを明示的に指定すればいいようです。先程の例では赤色部分を追加します。

use File::Spec;
…中略…
my $plugin = $cb->plugin;
$app->{plugin_template_path} = File::Spec->catdir($plugin->path,'tmpl');
my $hoge = $tmpl->getElementById('hoge');
my $tmpl = File::Spec->catdir($plugin->path, 'tmpl', 'foo.tmpl');
my $include = $tmpl->createElement('include', { name => $tmpl });
$tmpl->insertAfter($include, $hoge);

投稿したばかりですいませんが訂正です。MTQフォーラムに適切な情報が掲載されていました。上記の例であれば下記の赤色部分を追加します。

use File::Spec;
…中略…
my $plugin = $cb->plugin;
my $hoge = $tmpl->getElementById('hoge');
my $tmpl = File::Spec->catdir($plugin->path, 'tmpl', 'foo.tmpl');
my $include = $tmpl->createElement('include', { name => $tmpl, component => 'プラグイン名' });
$tmpl->insertAfter($include, $hoge);

ブログ記事投稿画面で冒頭のエラーが発生するEmoticonButtonプラグインの場合は、Plugin.pmを任意のエディタで開き赤色部分を追加します。

sub inject_button_param {
    my ( $cb, $app, $param, $tmpl ) = @_;
 
    my $footer = $tmpl->getElementById('footer_include');
    if ( $footer ) {
        my $plugin = $cb->plugin;
        require File::Spec;
        my $tmpl_path = File::Spec->catdir($plugin->path, 'tmpl', 'emoticon.tmpl');
        my $include = $tmpl->createElement('include', { name => $tmpl_path, component => 'EmoticonButton' });
        $tmpl->insertBefore($include, $footer);
    }
    1;
}

そもそもMT5ではEmoticonButtonプラグインは動作しませんが、とりあえずエラーは解消します。

関連記事
トラックバックURL


コメント

私はMT4.292のサイトを二つ管理していて、どちらも違うテンプレートを利用しております

両方共、再構築時にテンプレのエラーが出てました
一つのテンプレは、テンプレ制作の会社が修正ファイルを出し、もう一つのテンプレは初期化し復旧となりました
もしエラーが出るようでしたらテンプレの初期化や制作会社に問い合わせてみるのもよいと思います

MT4.292はMTOS4.38にしか出来ないし、そろそろMT5です

[1] Posted by ひでぼん : February 29, 2012 8:54 AM

>ひでぼんさん
こんにちは。
情報ありがとうございました。
このエントリーで掲載している問題はテンプレートの修正では解決しないので、もしMT5.13にアップグレードされる場合はご注意ください。

[2] Posted by yujiro logo : February 29, 2012 12:43 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)