かなり昔にMovableType4で構築したクライアントから、突然「エラーが出るんだけど・・・」という電話。
普段から、サイト関係の相談で電話をするクライアントなので、まぁ気軽な感じで「見ときますよー」と電話をおきました。
エラーの内容を確認すると、
『Can’t call method “execute” on an undefined value』
あれ、以前にも見たことがあるようなエラーだなーと思いながら、これはテンプレートの関係かぁ?とか考えながら、まずは問題の切り分けのため再構築を。
(ちなみに、MovableType 4.24-jaでデータベースはSqliteにて構築してあります。)
まず、「インデックスのみ」はOK。
「ブログ記事アーカイブのみ」もOK。
「月別アーカイブのみ」もOK。
「ウェブページのみ」もOK。
「カテゴリアーカイブのみ」で、はい!上述のエラーが・・・
とりあえず、カテゴリアーカイブでのエラーということは分かり、カテゴリアーカイブのテンプレートを確認!
これは・・・
かなり昔に作ったテンプレートは、今の自分からしたらかなり酷いコーディング(泣)
まぁ、それだけ成長したのかと思いながら、手を入れられるところを修正。
しかし、これといって問題になりそうな部分は見当たらない・・・
そこで、Google先生に
『Can’t call method “execute” on an undefined value』で検索。
いくつか、同様のエラーで記事を書いている方が・・・
▼MT4のエラーメッセージ:「Can’t call method “execute” on an undefined value ・・・」の対策の一案
http://www.taskmother.jp/mtplugin/mt4cant_call_method_execute_on.html
まさにこれや!
原因はどうやら1000記事を超えるとエラーが出るらしい・・・です。
結構長くMT使って構築してるけど、そんなの知らないっす・・・(さすがは弱小Webクリエイター)
確かに、ひとつのカテゴリが1000記事を超えていることを確認。
それで、この方法で修正。
「<mt:Entries lastn=”999″>」に修正して、いざ再構築!
あれ!?
同じエラーが出ますが・・・
それじゃ、あれだ!
カテゴリ別で出力するように、MTIf elseで、ここだけlastn=”999″に!
ダメだ・・・同じエラー・・・orz
どうやら、今回はカテゴリアーカイブのテンプレートを修正しても解消されないらしい・・・
ということで、再度ググったところ、
▼カテゴリーアーカイブの構築でエラー
http://chez-sugi.net/movabletype/20090314.html
こ・れ・だ!
ということで、早速上記の方法を。
簡単にいうと、MTを構成しているファイルのカテゴリを構成している
「Category.pm」に強制的に制限をかけるらしい・・・デス。
?????
この辺になるとワカンナイんですけど・・・と思いつつ、記載されている通り作業を・・・
MovableTypeが格納されているディレクトリ内、
llib/MT/ArchiveType/Category.pm の archive_group_entries という関数に
$limit = 600 unless $limit; # を1行挿入。
sub archive_group_entries { my $obj = shift; my ( $ctx, %param ) = @_; my $limit = $param{limit}; if ( $limit && ($limit eq 'auto') ) { my $blog = $ctx->stash('blog'); $limit = $blog->entries_on_index if $blog; } $limit = 600 unless $limit; #← これを挿入
上記を追加して、ビビりながらサーバーにアップ!
カテゴリアーカイブを再構築。
おぉーそのまま再構築が通ったどー
そして、該当のカテゴリをみるとページ分割しているエントリーの全体数が600記事に!
とりあえず、このエラーを回避できました!
今回は、600にしましたけど、999とかまで大丈夫なのかなーと。
しかしこれ、普通に使っている人、絶対対応できないって!
まぁ、普通に最新にアップデートして、MySQL使ったほうがいいんでしょうけど・・・
クライアントにそういう提案するしかないか・・・
っていうか、MTよりWordPressにしていった方がよいのかな・・・
コメント