Movable TypeでMTPageNextタグが効かなくなる不具合について
Movable TypeでMTPageNextタグが効かなくなる問題と対処方法について紹介します。
1.問題点
Movable Typeのテンプレートタグには、ウェブページの情報を出力するタグがいくつかあります。
MTPageNextタグを使えば、現在処理しているウェブページより更新日時が新しいウェブページの情報を出力することができます。
また、MTPagePreviousタグを使えば、現在処理しているウェブページより更新日時が古いウェブページの情報を出力することができます。
が、特定の環境においてMTPageNextタグが期待しない動作になる可能性があります。
例えば、次のタイトルのウェブページを作成します。
- test1
- test2
- test3
作成(更新)日時はtest3、test2、test1の順に新しいものとします。
このウェブページがある状態で、次の内容のインデックステンプレートを作って再構築してみます。
<mt:Pages>
<ul>
<mt:PagePrevious>
<li>前:<$mt:PageTitle$></li>
</mt:PagePrevious>
<li><mt:PageTitle></li>
<mt:PageNext>
<li>次:<$mt:PageTitle$></li>
</mt:PageNext>
</ul>
</mt:Pages>
本来であれば実行結果は次のようになります。
ですが、不具合が発生するとMTPageNextタグで括った「次:」の部分の内容が、現在実行中のウェブページの内容になってしまいます。
2.原因
PageButeプラグインを利用していると、この不具合が発生します。
理由は、PageButeプラグインでページナビゲーション表示用のテンプレートタグとして同名のMTPageNextタグを使っているためで、プラグインで提供しているタグの処理が実行されてしまうためです。
3.対処
PageButeプラグインが不要であればプラグインをアンインストールするか無効にします。
PageButeプラグインと併用する場合、2通りの対策が考えられます。
1つは、MTPageNextタグの代わりにMTEntryNextタグを利用します(赤色部分)。
<mt:Pages>
<ul>
<mt:PagePrevious>
<li>前:<$mt:PageTitle$></li>
</mt:PagePrevious>
<li><mt:PageTitle></li>
<mt:EntryNext>
<li>次:<$mt:PageTitle$></li>
</mt:EntryNext>
</ul>
</mt:Pages>
もう1つはPageButeプラグインのPageBute.plを任意のエディタで開き、テンプレートタグ名を変更します。
変更前
…前略…
function => {
PaginationLink => \&_pagination_link,
PaginationFirst => \&_pagination_link,
PaginationLast => \&_pagination_link,
PaginationPrev => \&_pagination_link,
PaginationNext => \&_pagination_link,
PageNext => \&_page_,
PageBefore => \&_page_,
…後略…
変更後
…前略…
function => {
PaginationLink => \&_pagination_link,
PaginationFirst => \&_pagination_link,
PaginationLast => \&_pagination_link,
PaginationPrev => \&_pagination_link,
PaginationNext => \&_pagination_link,
PageAfter => \&_page_,
PageBefore => \&_page_,
…後略…
ちなみに、プラグインで拡張テンプレートタグを作成する場合、デフォルトのテンプレートタグとバッティングしない名称をつけるのが一般的です。
PageButeプラグインが公開されたのは2007年2月、Movable TypeにMTPageNextタグが追加されたのはMT4がリリースされた2007年7月で、2007年7月以前にプラグインにMTPageNextタグがすでに盛り込まれていれば、当時はテンプレートタグの名称がバッティングしていた訳ではないようです。
- 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の復元で「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」が発生する件について(つづき)
- XREA/CORESERVERでMovable TypeのCaptchaが表示されない不具合について