Movable Type 4.25 における MTEntries タグの category モディファイアの不具合について
キャッチアップが遅れましたが、Movable Type 4.25 で MTEntries タグに category モディファイアを利用している状態で、カテゴリー名に次の文字が含まれる場合、
- 半角丸カッコ(の閉じカッコ):")"
- 半角アンパサンド:"&"
再構築時に次のようなエラーが発生します。
上記の事象については、すでに下記の記事で公開されています。
ここでは、半角丸カッコや半角アンパサンドをカテゴリー名に利用している場合の暫定対処案を示します。
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&$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&$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
本文に解消バージョンを追記しました。
- 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」が発生する件について(つづき)