Movable TypeでMTPageNextタグが効かなくなる不具合について

Movable TypeでMTPageNextタグが効かなくなる不具合について

Posted at April 15,2013 12:33 AM
Tag:[MovableType, TroubleShooting]

Movable TypeでMTPageNextタグが効かなくなる問題と対処方法について紹介します。

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タグがすでに盛り込まれていれば、当時はテンプレートタグの名称がバッティングしていた訳ではないようです。

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


コメントする
greeting

*必須

*必須(非表示)


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

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

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

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