top

MT3.32にはダイナミックで重大なバグあり & 修正方法

MT3.32が出ていたので、ダウンロードしてテスト環境で動作確認してみました。3.31ではダイナミックで<$MTArchiveCount$>が正しく出力されないバグがあったので、それが直っていればいいなと思って。その結果、この問題は解決していることが分かり、それではとさっそくWingMemoの方もアップグレードしたのですが、その後になってダイナミック・パブリッシングにて重大なバグがあったことが判明。

月別アーカイブで次の月へのリンクが全部最新月へのリンクになってしまうのです!

2006年7月の次の月が2006年8月なのはいいとして、2006年6月の次の月も2006年8月。2006年5月も4月も前の年の何月であろうとも次の月は全部2006年8月になってしまいます。ある意味、これは3.2時代のバグよりも酷い…(泣)。
何より困ったのが、フォトログにてPHP PreviousNextInCategoryというプラグインを使って同一カテゴリーでの前後リンクを表示していたのが、これも日付アーカイブと同じ現象になってしまい、次のエントリーへのリンクが全部そのカテゴリの最新エントリーになってしまいます。これでは前後リンクの意味をなさない~~。

<$MTArchiveCount$>が直ってもこれでは使い物にならないので、しかたがなく、いったん3.31に戻しました。それにしてもバージョンアップのたびにいつもダイナミックのどこかがおかしくなるのは、何とかしてもらえないでしょうか…。新機能が上手く動かないならまだしも、これまで正常に機能していたものがバージョンアップしたがために使えなくなるのは本当に困りますので(しかも毎回、基本中の基本のタグで…)。よろしくお願いします、sixapart様…。


<追記&修正方法>
バグの正体を突き止められたと思われるので、修正してみました。どうやら犯人は「phpフォルダ>libフォルダ」の中の mtdb_base.php のようです。

ダイナミックのバグならphpフォルダ以下にあることは間違いないので、今回のバージョンアップで更新されたファイルを1つ1つ3.31のファイルと置き換えながら動かしてみたところ、mtdb_base.php でピタリ。3.31と3.32で違うところを調べてみたところ、3.32で記述が抜け落ちている部分と追加された部分がみつかりました。追加部分は恐らく今回の修正箇所。となると抜け落ちている部分は…? 怪しい…。

で、抜けていた部分を追加してみたら月アーカイブの前後リンクが正しく動作するようになりました。個別頁内の同一カテゴリへの前後リンクも正しく動作するようになりました。よかった~。正式に直るまではこれでしのぐことにします。以下、修正箇所です。mtdb_base.phpの536行と537行の間に以下の赤字の部分を追加します。

 if (count($filters)) {
$post_select_limit = $limit;
$post_select_offset = $offset;
$limit = 0; $offset = 0;
}

$sql = "

        ↓

 if (count($filters)) {
$post_select_limit = $limit;
$post_select_offset = $offset;
$limit = 0; $offset = 0;
}

if ($args['sort_order']) {
if ($args['sort_order'] == 'ascend') {
$order = 'asc';
} elseif ($args['sort_order'] == 'descend') {
$order = 'desc';
}
}

$sort_field or $sort_field = 'entry_created_on';

$sql = "

ということで、無事MT3.32へアップグレードすることが出来ました。やっぱり<$MTArchiveCount$>は正しく出てくれた方がいいので…(もし、そこ間違ってるよーとかいうところがあれば教えてやって下さい)。

<追記2 2006.9.1>
この記事を書いたときは慌てていたのでそこまで気が回らなかったのですが、このバグは月別アーカイブ(日付アーカイブ)だけでなく、エントリーアーカイブにまで及んでいます(フォトログのカテゴリ内前後リンクがおかしくなったのもそのためです)。つまり<MTEntryNext>と<MTArchiveNext>が壊滅状態ということです。ここまでいくと運営への影響も大きいと思われるので、ダイナミック使用で3.32へアップグレードされた方・3.32から始めてダイナミック化しようとされている方はこの修正を行っておくことをおすすめします。

この修正が必要なバージョン:3.32 3.33 3.34 3.35