また現実逃避。さいきん濃ゆいネタばかりですが。
Movable Typeのテンプレートを使ってValidなStrict XHTML(たとえばXHTML 1.0 Strict)を出力したい、というのは誰しも考えることだと思う。今日やったのは、そのための関門のひとつ、Comment書き込み画面でクッキー入出力(名前やURLの記憶)を保持したまま、かつValidにするという方法。ぶっちゃけていえば、今日までValidではなかったわけだが、許せ。
まず、念のため、Individual Entry ArchiveのJavaScriptをすべて外部scriptにする。元のテンプレートではJavaScript部分はコメント(<!-- ~ -->)にして書いているのだが、XHTMLでは本当のコメントとして解釈されてしまう。Individual Entry Archive後半の、
<script type="text/javascript" language="javascript">
<!--
document.comments_form.email.value = getCookie("mtcmtmail");
document.comments_form.author.value = getCookie("mtcmtauth");
document.comments_form.url.value = getCookie("mtcmthome");
if (getCookie("mtcmtauth")) {
document.comments_form.bakecookie[0].checked = true;
} else {
document.comments_form.bakecookie[1].checked = true;
}
//-->
</script>
であれば、コメントではさまれた8行だけを別ファイル(たとえば、comment.js)として保存し、<$MTBlogURL$>にあたるディレクトリにアップロードする。テンプレートの上記の部分(<script>~</script>)は、
<script type="text/javascript" src="<$MTBlogURL$>comment.js"></script>
のように書き換える。これはもっと楽な方法もあると思う。詳しい話は、森田さんの記事 - iNTERNET magazine 2003年11月号109ページ(プロが教えるMovable Typeの構造デザインから記事を入手可能)、またはRe: Movable Typeスレッド その2なんかを参照のこと。
で、肝は、comment.jsの8行が、form要素のname="comments_form"を利用していること。XHTML 1.0 Strictなんかではform要素にname属性は使えない。nameをidに変えるだけでは、JavaScriptのエラーになってしまう。そこで、comment.jsを書き換えなければならない。
中身を解読してみると、email, author, urlのvalueと、ラジオボックスをいじっているだけだとわかる。そこで、comment.jsを、DOMを利用して以下のように刷新する。
if(document.getElementById && document.createElement){
document.getElementById('email').setAttribute('value',getCookie("mtcmtmail"));
document.getElementById('author').setAttribute('value',getCookie("mtcmtauth"));
document.getElementById('url').setAttribute('value',getCookie("mtcmthome"));
if (getCookie("mtcmtauth")) {
document.getElementById('bakecookie').setAttribute('checked','checked');
} else {
document.getElementById('forget').setAttribute('checked','checked');
}
}
最後に、Individual Entry Archiveの
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">
から、name="comments_form"を削除すれば任務完了。
トラックバックURL: http://adp.daa.jp/cgi/mt2/mt-tb.cgi/79
一文追記。ここが勘違いしやすいポイントかも(その後も細かく修正しておりますが)。
よい関連サイトがあったので後付けトラックバック http://d.dotnote.jp/id/2004/03/01