『MT 3.2-ja-2:「エントリー・ファイル名」が勝手に変わる』の続き


MT 3.2-ja-2:「エントリー・ファイル名」が勝手に変わる』の続きになりますが、バージョン 3.2 で色々試したので書いてみます。

以前の記事の最後にも書きましたが、この問題は旧バージョンでも起こっていたようなんですが、バージョン 3.17 で解決済みとの事でした。

Six Apart - Movable Type サポート: Movable Type 3.17の修正点

じゃ、何でいまさら復活したのかって事なんですが、「Movable Type 3.2 の新機能:エントリー・アーカイブのファイル名のカスタマイズ」ってのが原因っぽいです。

Movable Typeユーザー・マニュアル: Movable Type 3.2 の新機能

問題の部分は、編集フォームの下部にある「エントリー・ファイル名」ってところです。
ソースは

<input type="text" size="18" disabled="disabled" name="basename" id="basename" value="" onchange="setElementValue('basename', dirify(this.value))" tabindex="11" />

となっており、disabled が有効になっているので初期状態では無効になっています。
この状態だと、編集できないだけでなくフォームを送信したときの情報にも含まれないので、「確認」ページに値が引き継がれないためにパーマリンクが書き換わるみたいです。


単純な解決方法としては、/tmpl/cms/edit_entry.tmpl の455行目(だいたい)

<input type="text" size="18" disabled="disabled" name="basename" id="basename" value="<TMPL_VAR NAME=BASENAME>" onchange="setElementValue('basename', dirify(this.value))" tabindex="11" />

から disabled="disabled" を取って、

<input type="text" size="18" name="basename" id="basename" value="<TMPL_VAR NAME=BASENAME>" onchange="setElementValue('basename', dirify(this.value))" tabindex="11" />

としてあげればいいんですが、これにも問題があります。

この方法だと、「確認ページで保存するとエントリー・ファイル名が勝手に変わる」という問題は回避できますが、常に「エントリー・ファイル名」(basename)が有効になってしまうので、新規エントリー時に既存のエントリーファイル名とバッティングする可能性が出てきます。


ということで、いろいろ試した結果、

<input type="hidden" name="basename" value="<TMPL_VAR NAME=BASENAME>" />

<input type="text" size="18" disabled="disabled" name="basename" id="basename" value="<TMPL_VAR NAME=BASENAME>" onchange="setElementValue('basename', dirify(this.value))" tabindex="11" />

後に記述することで行けそうです。

こんな感じ?

<input type="text" size="18" disabled="disabled" name="basename" id="basename" value="<TMPL_VAR NAME=BASENAME>" onchange="setElementValue('basename', dirify(this.value))" tabindex="11" /> ・・・(省略)・・・
<input type="hidden" name="basename" value="<TMPL_VAR NAME=BASENAME>" />

Firefox でしか試してないですが、今のところ問題ないっぽいです。
(しばらく様子見・・・)