Movable Type 3.1以降ではダイナミックパブリッシングという新機能が追加されています。
公式サイトのマニュアルによれば
ダイナミック・パブリッシングの利点
*ダイナミック・ページではテンプレートの変更が直ちに反映されます。
*再構築時間が、ウェブログの収容する投稿数に関係なく、大幅に減ります。
*アーカイブがダイナミックであれば、ウェブログに送られるコメントとトラックバックpingsも、早く処理されるようになります。
*トラックバックpingは、投稿されるとすぐに、ダイナミック・アーカーブ・ページに表示されます。
*スタティック・ファイルを再構築せずにすむことで、かなりのディスク・スペースを節約できます。
*また、ディスク・スペースの制限を心配することなく、様々なインデックス/アーカイブ・テンプレートを作成し、望んだ数だけ違うテンプレート使ってサイトを構築することができます。
このようなメリットのある機能だそうです。
実はよくわかってないのですが、目に見えてわかるのは、サイトを再構築する際に、個別エントリーの再構築がスキップされて、再構築時間が短くて済むことです。
ということで導入してみたのですが、Main IndexやStylesheetなど、保存時に再構築がされるテンプレートを保存しようとすると、「オブジェクトの保存に失敗しました: Update failed on SQL error You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' template_created_on = '00000000000000', template_created_by =」というエラーが出るようになりました。
再構築しないで済む機能で再構築する項目の問題が出るのですから、やはり何がしかの問題があるのには間違いありません。
で、やはりエラーメッセージをキーに調べたところ
ダイナミックパブリッシングを解除?しました。
”再構築オプション”を全てスタティックに変更し元通り。
こちらを見つけました。
で、再構築オプションをダイナミックからスタティックに変更するとテンプレートの変更ができるようになりました。
が、動かないでいるのも業腹なのでもう少し調べてみました。
実行されるsqlとにらめっこした結果、DBIのbind_paramでtemplate_build_dynamicが設定されず不正なsqlになる(ような気がする)ので、DBI.pmを書き換えて回避。Template.pmのカラム定義を変えるのはちょっとおっかない気がしたので。まあ、該当箇所を通るときはtemplate_build_dynamicの値を書き換える必要はない(ハズだ、と思いたい)ので強制的に空に設定。
で、こちらにある修正でちゃんと?動くようになりました。
具体的には修正して保存すると再構築するボタンが表示されるようになります。
注意すべきは「$val = $driver->ts2db($val);」の文字列をキーにして検索すると、それは二ヶ所あるので、二つ目の方、279行目の方を修正することです。
私は一つ目の方を修正して動かないので悩みましたから。
これは明らかにSix Apart(Movable Typeの開発元)のバグでしょう。
いずれは何らかの形で修正されるものでしょうが。