Movable Type 4.25 における MTEntries タグの category モディファイアの不具合について

Movable Type 4.25 における MTEntries タグの category モディファイアの不具合について

Posted at April 28,2009 12:17 AM
Tag:[MovableType, TroubleShooting]

キャッチアップが遅れましたが、Movable Type 4.25 で MTEntries タグに category モディファイアを利用している状態で、カテゴリー名に次の文字が含まれる場合、

  • 半角丸カッコ(の閉じカッコ):")"
  • 半角アンパサンド:"&"

再構築時に次のようなエラーが発生します。

再構築エラー

上記の事象については、すでに下記の記事で公開されています。

Movable Type 備忘録 - Movable Type 4.25 リリース

ここでは、半角丸カッコや半角アンパサンドをカテゴリー名に利用している場合の暫定対処案を示します。

2013/02/06追記:この問題はMT5.2.2以降のバージョンで解消されています。

1.半角丸カッコを利用している場合

とりあえず、カテゴリ名に含まれる全角丸カッコに変更します。例えば、「(X)HTML」というカテゴリー名は、「(X)HTML」に変更します。

変更前
カテゴリー名(変更前)

変更後
カテゴリー名(変更後)

次にテンプレートを変更します。category モディファイアにカテゴリー名を直接記述している場合は、単にその部分を書き換えます。

変更前

<mt:Entries category="(X)HTML">
...中略...
</mt:Entries>

変更後

<mt:Entries category="(X)HTML">
...中略...
</mt:Entries>

カテゴリ名を出力する時に、全角の丸カッコを半角の丸カッコに変更して出力したい場合は、次のように MTSetVar タグと MTCategory タグに regex_replace モディファイアを利用すると良いでしょう。

<mt:setvar name="foo" value="/(.*)((.*))(.*)/" />
<mt:categoryLabel regex_replace="$foo","$1($2)$3" />

カテゴリアーカイブウィジェットに適用する場合は、次の青色部分を追加します。

<mt:IfArchiveTypeEnabled archive_type="Category">
<div class="widget-archive widget-archive-category widget">
    <h3 class="widget-header>カテゴリ</h3>
    <div class="widget-content">
    <mt:TopLevelCategories>
        <mt:SubCatIsFirst>
        <ul>
        </mt:SubCatIsFirst>
        <mt:If tag="CategoryCount">
            <li><a href="<$mt:CategoryArchiveLink$>"<mt:If tag="CategoryDescription"> title="<$mt:CategoryDescription remove_html="1" encode_html="1"$>"</mt:If>><mt:setvar name="foo" value="/(.*)((.*))(.*)/" /><mt:categoryLabel regex_replace="$foo","$1($2)$3" /> (<$mt:CategoryCount$>)</a>
        <mt:Else>
            <li><$mt:CategoryLabel$>
        </mt:If>
        <$mt:SubCatsRecurse$>
            </li>
        <mt:SubCatIsLast>
        </ul>
        </mt:SubCatIsLast>
    </mt:TopLevelCategories>
    </div>
</div>
</mt:IfArchiveTypeEnabled>

適用前
カテゴリアーカイブ(適用前)

適用後
カテゴリアーカイブ(適用後)

2.半角アンパサンドを利用している場合

とりあえず、カテゴリ名に含まれる全角アンパサンドに変更します。例えば、「foo & bar」というカテゴリー名は、「foo & bar」に変更します。

変更前
カテゴリー名(変更前)

変更後
カテゴリー名(変更後)

次にテンプレートを変更します。category モディファイアにカテゴリー名を直接記述している場合は、単にその部分を書き換えます。

変更前

<mt:Entries category="foo & bar">
...中略...
</mt:Entries>

変更後

<mt:Entries category="foo & bar">
...中略...
</mt:Entries>

カテゴリ名を出力する時に、全角のアンパサンドを半角のアンパサンドに変更して出力したい場合は、先ほどと同様、MTSetVar タグと MTCategory タグに regex_replace モディファイアを利用します。

<mt:setvar name="foo" value="/(.*)&(.*)/" />
<mt:CategoryLabel regex_replace="$foo","$1&amp;$2" />

カテゴリアーカイブウィジェットに適用する場合は、次の青色部分を追加します。

<mt:IfArchiveTypeEnabled archive_type="Category">
<div class="widget-archive widget-archive-category widget">
    <h3 class="widget-header>カテゴリ</h3>
    <div class="widget-content">
    <mt:TopLevelCategories>
        <mt:SubCatIsFirst>
        <ul>
        </mt:SubCatIsFirst>
        <mt:If tag="CategoryCount">
            <li><a href="<$mt:CategoryArchiveLink$>"<mt:If tag="CategoryDescription"> title="<$mt:CategoryDescription remove_html="1" encode_html="1"$>"</mt:If>><mt:setvar name="foo" value="/(.*)&(.*)/" /><mt:CategoryLabel regex_replace="$foo","$1&amp;$2" /> (<$mt:CategoryCount$>)</a>
        <mt:Else>
            <li><$mt:CategoryLabel$>
        </mt:If>
        <$mt:SubCatsRecurse$>
            </li>
        <mt:SubCatIsLast>
        </ul>
        </mt:SubCatIsLast>
    </mt:TopLevelCategories>
    </div>
</div>
</mt:IfArchiveTypeEnabled>

適用前
カテゴリアーカイブ(適用前)

適用後
カテゴリアーカイブ(適用後)

なお、半角のアンパサンドは、出力時に実体参照しておかないと valid な(X)HTML文書にならないので注意しましょう。

2013.02.06
本文に解消バージョンを追記しました。

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


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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