Movable Type 3.3 の再構築で「<MTTagName>タグが閉じられていません」になる問題の対処(改)

Movable Type 3.3 の再構築で「<MTTagName>タグが閉じられていません」になる問題の対処(改)

Posted at July 26,2006 1:05 AM
Tag:[MovableType, TroubleShooting]

Movable Type 3.31 にアップグレードして、再構築した時に下記のエラーが発生するケースがあります。

テンプレート「メインページ」に解析エラーが発生しました:
 <MTTagName>タグが閉じられていません。

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 を利用して再構築を実施した場合は、

Undefined subroutine &MT::plugins::MTTagInvoke::MTTagInvokeName called at lib/MT/Builder.pm line 165.

というエラーが発生しますので注意が必要です。

ということで、2項の「対処方法1」を推奨します。


*1:色覚障害等で色が識別できない場合は、サイト右上の「Styles」メニューにある Gray Scale をクリックしてください。IEではグレースケール表示され、青色部分が下線表示、赤色部分が二重下線で表示されます。Firefox/Opera ではカラー表示のままですが下線表示に切り替わります。なお設定の都合上、リンクとテキスト表示が判断できなくなりますので予めご容赦ください。

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


トラックバック

MT3.3でMTTagNameタグが閉じられていませんというエラー from Movable Type テンプレート 無料配布 - 商用BLOG専門店
MT3.3でMTTagInvokeプラグインを使用すると出るエラーの対処法を公開しています。 [続きを読む]

Tracked on July 27, 2006 1:12 AM

同じタグ作るなよっ。 from Hitori-goto
MTをアップグレードしたのでMTネタ。 当然このネタが多くなりますね。 MTTagNameというタグが競合してるんです。 MTに標準装備なんだから、同じタ... [続きを読む]

Tracked on August 6, 2006 8:26 AM

MT.3.3の再構築時に「Atom」に解析エラーが発生しましたというアラートが表示される場合の解決策 from next global jungle
当ブログはMovable Typeのバージョン3.2で3.3にはまだバージョンア... [続きを読む]

Tracked on August 11, 2006 2:57 PM

MT.3.3の再構築時に「Atom」に解析エラーが発生しましたというエラーの解決策 from next global jungle
当ブログはMovable Typeのバージョン3.2で3.3にはまだバージョンア... [続きを読む]

Tracked on August 11, 2006 2:58 PM

MTTagInvoke1.0のバージョンアップ方法について from Movable Type テンプレート 無料配布 - 商用BLOG専門店
MTTagInvoke0.9がMTTagInvoke1.0へバージョンアップし、色々と変更がありました。エラーとかも。 [続きを読む]

Tracked on September 13, 2006 1:10 AM

MovableType3.3 の再構築「タグが閉じられていません」というエラー from タスイチ
MovableTypeを3.3にアップデート下結果、index.xmlの再構築時... [続きを読む]

Tracked on January 9, 2007 12:07 AM
コメント

ご連絡いただきましてありがとうございました。
あわてて「62行目」を確認したら自分のは、ちゃんと修正してました。書き忘れてたみたいです。
(おはずかしい!)

今後とも、よろしくお願い致します。

[1] Posted by ec-blog : July 27, 2006 1:11 AM

ごめんなさい。TBエラーになってたみたいで更新したらTB重複しました。お手数ですが、削除して下さいませ。

[2] Posted by ec-blog : July 27, 2006 1:15 AM

こんばんわ、さっそく実行してみたのですが、やはりエントリーの方でもご指摘があったとおり、再構築にかなりの時間を要しまして断念することになりました。でも良い勉強になりました、ありがとうございました。

[3] Posted by 葛城宮雅 : July 27, 2006 1:17 AM

>ec-blogさん
こんにちは。
コメント&トラックバックありがとうございました。
早々に修正くださり恐縮です。
TB削除しておきました。どうぞお気遣いなく。
それでは今後ともどうぞよろしくお願い致します。

>葛城宮雅さん
こんにちは。
ご連絡ありがとうございます。
またなにかございましたらご連絡ください。
ではでは!

[4] Posted by yujiro : July 27, 2006 10:42 AM

 yujiroさん、いつも有り難うございます。全く初歩的な質問で申し訳ありません。恥を忍んで質問します。

>MTTagInvoke.pl を任意のエディタで開き

 ↑で転けています。フォルダの中を探したのですけど、MTTagInvoke.plが見つからないのです。どこを探せば良いでしょうか。

[5] Posted by 路子 : July 29, 2006 7:57 AM

 ごめんなさい。早とちり。プラグインをインストールしてないから、MTTagInvoke.plが見つからなくても当然なんですね。失礼しました。

[6] Posted by 路子 : July 29, 2006 8:01 AM

>路子さん
こんばんは。
そもそもエラーが発生していなければこのエントリーの作業は不要です。
ご連絡ありがとうございました。

[7] Posted by yujiro : July 29, 2006 8:45 PM

いつもお世話になっております。
ご存知かと思いますが、MTTagInvokeが0.9から1.0にバージョンアップしたようです。

1.0では、プラグイン本体だけではなく、libフォルダの中にMTTagInvoke.pmというライブラリが追加されおり、設置方法やテンプレートタグなどにも変更が必要になりましたのでお知らせ致します。

[8] Posted by ec-blog : September 13, 2006 1:17 AM

>ec-blogさん
こんにちは。
情報ありがとうございました!
エントリーに掲載しているタグを修正するのが大変そうな気が。(笑)

[9] Posted by yujiro : September 13, 2006 9:52 AM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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