2012年2月29日

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

February 29,2012 12:55 AM
Tag:[, , ]
Permalink

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プラグインは動作しませんが、とりあえずエラーは解消します。

Comments [2] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3