Movable Type 3.3 の再構築で「<MTTagName>タグが閉じられていません」になる問題の対処(改)
Movable Type 3.31 にアップグレードして、再構築した時に下記のエラーが発生するケースがあります。
1.原因
エラーが発生する原因は、インストールしている MTTagInvoke プラグインの影響で、プラグインが定義しているMTタグ「MTTagName」が、3.3 で機能追加されたエントリー・タグ機能で使われる MTタグ「MTTagName」とバッティングしており、予期しない動作になってしまうためです。
2006.09.13 追記:3.3 に対応した MTTagInvoke プラグイン1.0 が公開されています。
エラー内容より、原因をもう少し分析すると、機能追加された MTTagName は変数タグ(つまり <$MTTagName$>)ですが、MTTagInvoke が提供している MTTagName はコンテナタグ(<MTTagName>~</MTTagName>)です。おそらく、最初に出現した(機能追加された方の) MTTagName を MTTagInvoke プラグインでハンドリングしてしまい、その結果「終了タグ </MTTagName> が見つからない」となってしまうようです。
最初にこの問題を知ったのは下記のテンプレートご利用サイト様です。ありがとうございました。
Project MultiBurst:検索画面で「閉じられていません」というエラー回避(MT3.3)
2.対処方法1(推奨)
MTTagInvoke.pl を任意のエディタで開き、25行目辺りにある下記の赤色部分 *1
MT::Template::Context->add_tag(TagInvokeVersion => sub { $VERSION } );
MT::Template::Context->add_container_tag(TagInvoke => \&MTTagInvoke );
MT::Template::Context->add_container_tag(TagContent => \&MTTagContent );
MT::Template::Context->add_container_tag(TagName => \&MTTagName );
MT::Template::Context->add_container_tag(TagAttribute => \&MTTagAttribute );
を、他のMTタグと重複しない名称、ここでは「TagInvokeName」として
MT::Template::Context->add_tag(TagInvokeVersion => sub { $VERSION } );
MT::Template::Context->add_container_tag(TagInvoke => \&MTTagInvoke );
MT::Template::Context->add_container_tag(TagContent => \&MTTagContent );
MT::Template::Context->add_container_tag(TagInvokeName => \&MTTagName );
MT::Template::Context->add_container_tag(TagAttribute => \&MTTagAttribute );
のように修正します。
修正した部分はコンテナタグの <MTTagName> に該当しますので、このタグをテンプレート上で利用している場合は、<MTTagInvokeName>~</MTTagInvokeName> に変更します。Movable Type がデフォルト機能として提供している変数タグ <$MTTagName$> を変更する、という意味でありませんのでご注意ください。
3.対処方法2
検索すると、いくつかのサイト様で下記に示す方法が公開されているのですが、プログラム的に修正内容に不足があるため、この場でお知らせに代えさせて頂きます(このエントリーを書き始めてからそのことに気がつきました)。
下記の赤色2ヶ所、
MT::Template::Context->add_container_tag(TagName => \&MTTagName );
を
MT::Template::Context->add_container_tag(TagInvokeName => \&MTTagInvokeName );
に修正した場合、後方の \&MTTagName(または \&MTTagInvokeName)が Perl の「関数リファレンス」に該当します(つまり、タグとタグに対応するプログラムを対応させています)ので、この部分を修正した場合は、60行目辺りにある、
sub MTTagName {
my ($ctx, undef, $cond) = @_;
my $ti = tag_invoke($ctx) or return;
defined($ti->{name} = $ctx->stash('builder')->build($ctx, $ctx->stash('tokens'), $cond))
or return;
return '';
}
の赤色部分も修正する必要があります。上記の修正例であれば
sub MTTagInvokeName {
my ($ctx, undef, $cond) = @_;
my $ti = tag_invoke($ctx) or return;
defined($ti->{name} = $ctx->stash('builder')->build($ctx, $ctx->stash('tokens'), $cond))
or return;
return '';
}
とします。
実際には60行目辺りを修正しなくても、名称を変更した MTTagInvokeName をテンプレート上で利用していなければ問題は発生しません。したがってそのままでも大丈夫です。
ただし、MTTagInvokeName を利用して再構築を実施した場合は、
というエラーが発生しますので注意が必要です。
ということで、2項の「対処方法1」を推奨します。
*1:色覚障害等で色が識別できない場合は、サイト右上の「Styles」メニューにある Gray Scale をクリックしてください。IEではグレースケール表示され、青色部分が下線表示、赤色部分が二重下線で表示されます。Firefox/Opera ではカラー表示のままですが下線表示に切り替わります。なお設定の都合上、リンクとテキスト表示が判断できなくなりますので予めご容赦ください。
- MovableTypeプラグインの独自CGIをNginxに対応させる方法
- Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処
- 旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法
- MT6.2のファイルアップロードで「Undefined subroutine &POSIX::strftime」になる問題の対処
- Movable Typeのファイルアップロードで「アップロードしたファイルは大きすぎます。」というエラーになる場合の対処
- Movable Typeのパスワード変更で「URLが不正です。」というエラーなる件についての対処
- Movable Typeで「Cannot find column 'blogs' for class 'MT::Blog'」となる場合の対処
- Movable TypeでMTPageNextタグが効かなくなる不具合について
- Movable Typeの復元で「Request-URI Too Large」になるときの対処
- サーバ故障と「Connection error: Too many connections」エラーおよびMySQLテーブル破損について
- Movable Typeでエラー発生箇所を特定する方法
- IE9でMovable Typeを利用する方法
- MTIfタグにtagモディファイアを利用する場合の注意事項
- Movable Type 5のブログの設定で「Can't call method &quot;label&quot; on unblessed reference」が発生する問題について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について(つづき)
≫ MT3.3でMTTagNameタグが閉じられていませんというエラー from Movable Type テンプレート 無料配布 - 商用BLOG専門店
MT3.3でMTTagInvokeプラグインを使用すると出るエラーの対処法を公開しています。 [続きを読む]
≫ 同じタグ作るなよっ。 from Hitori-goto
MTをアップグレードしたのでMTネタ。 当然このネタが多くなりますね。 MTTagNameというタグが競合してるんです。 MTに標準装備なんだから、同じタ... [続きを読む]
≫ MT.3.3の再構築時に「Atom」に解析エラーが発生しましたというアラートが表示される場合の解決策 from next global jungle
当ブログはMovable Typeのバージョン3.2で3.3にはまだバージョンア... [続きを読む]
≫ MT.3.3の再構築時に「Atom」に解析エラーが発生しましたというエラーの解決策 from next global jungle
当ブログはMovable Typeのバージョン3.2で3.3にはまだバージョンア... [続きを読む]
≫ MTTagInvoke1.0のバージョンアップ方法について from Movable Type テンプレート 無料配布 - 商用BLOG専門店
MTTagInvoke0.9がMTTagInvoke1.0へバージョンアップし、色々と変更がありました。エラーとかも。 [続きを読む]
≫ MovableType3.3 の再構築「タグが閉じられていません」というエラー from タスイチ
MovableTypeを3.3にアップデート下結果、index.xmlの再構築時... [続きを読む]
ご連絡いただきましてありがとうございました。
あわてて「62行目」を確認したら自分のは、ちゃんと修正してました。書き忘れてたみたいです。
(おはずかしい!)
今後とも、よろしくお願い致します。
ごめんなさい。TBエラーになってたみたいで更新したらTB重複しました。お手数ですが、削除して下さいませ。
こんばんわ、さっそく実行してみたのですが、やはりエントリーの方でもご指摘があったとおり、再構築にかなりの時間を要しまして断念することになりました。でも良い勉強になりました、ありがとうございました。
>ec-blogさん
こんにちは。
コメント&トラックバックありがとうございました。
早々に修正くださり恐縮です。
TB削除しておきました。どうぞお気遣いなく。
それでは今後ともどうぞよろしくお願い致します。
>葛城宮雅さん
こんにちは。
ご連絡ありがとうございます。
またなにかございましたらご連絡ください。
ではでは!
yujiroさん、いつも有り難うございます。全く初歩的な質問で申し訳ありません。恥を忍んで質問します。
>MTTagInvoke.pl を任意のエディタで開き
↑で転けています。フォルダの中を探したのですけど、MTTagInvoke.plが見つからないのです。どこを探せば良いでしょうか。
ごめんなさい。早とちり。プラグインをインストールしてないから、MTTagInvoke.plが見つからなくても当然なんですね。失礼しました。
>路子さん
こんばんは。
そもそもエラーが発生していなければこのエントリーの作業は不要です。
ご連絡ありがとうございました。
いつもお世話になっております。
ご存知かと思いますが、MTTagInvokeが0.9から1.0にバージョンアップしたようです。
1.0では、プラグイン本体だけではなく、libフォルダの中にMTTagInvoke.pmというライブラリが追加されおり、設置方法やテンプレートタグなどにも変更が必要になりましたのでお知らせ致します。
>ec-blogさん
こんにちは。
情報ありがとうございました!
エントリーに掲載しているタグを修正するのが大変そうな気が。(笑)