Wed

21

Mar

2007

070321_mtbanner01.jpg

MovableTypeの最新バージョンは、公式サイトによると「3.34-ja(2007/1/22)」のようです。(左の各種バナーの元画像はBatches?! We don’t need no stinkin batches…で公開されています。他にも沢山ありました。)自分が再開した当時はMT3.2が最新であったため、何も考えずに最新版を導入したのですが、3.1→3.2のバージョンアップでは、スパム対策など変更点も大きかったらしいです。そのせいかどうかはわかりませんが、3.1向けのMacromedia風テンプレートはそのままではエラーとなってしまいました。
前にも書いた通り、どうしてもこのテンプレートを使いたかったためMT3.2で使用している人のサイトを探してみたものの、配布サイトにあったコメントなどは既にどこもリンクが切れておりました。そもそも本家の「風のまにまに号」は「3.151-ja」らしいので、MT自体は古いバージョンで良かったのですが、自分が探した限りでは個人の無償ライセンスでは、バージョンを選ぶ余地もなかったようなので、何とか試行錯誤の日々が始まったというところです。


とりあえずテンプレートの配布サイトにあるコメントやトラックバックの書き込みを中心に、以下の対策を実施。

1.”Remember me”の削除

配布サイトにMT3.2にバージョンアップされた方のコメントがありましたので、その通りに該当箇所を削除してみました。

削除した箇所は下記の通りです。

個別エントリーアーカイブ

ファイル名:Individual Entry Archive.html
箇所:25行目

コメント・プレビューのテンプレート

ファイル名:Comment Preview.html
箇所:14行目

コメント・エラーのテンプレート

ファイル名:Comment Error.html
箇所:14行目

いづれも削除した箇所のコードは、

<MTInclude module=”Remember Me”/>

です。

2.スクリプトの追記

上記1.の対策のみで、とりあえずはブラウザ上で問題なく動作、表示が行えました。ただし、個別記事のエントリ画面を表示させると、ブラウザ左下に「エラーが発生しました!」の表示が出て消えません。

エラーの詳細をみてみると、

ライン:131
文字:1
エラー:オブジェクトを指定してください
コード:0

とあります。

試行錯誤の末、Individual Entry Archive.html内の中盤228?240行にある下記のスクリプトが何らかのエラーの引き起こしているようです。

<!–
if (document.comments_form.email != undefined)
document.comments_form.email.value = getCookie(“mtcmtmail”);
if (document.comments_form.author != undefined)
document.comments_form.author.value = getCookie(“mtcmtauth”);
if (document.comments_form.url != undefined)
document.comments_form.url.value = getCookie(“mtcmthome”);
if (getCookie(“mtcmtauth”) || getCookie(“mtcmthome”)) {
document.comments_form.bakecookie[0].checked = true;
} else {
document.comments_form.bakecookie[1].checked = true;
}
//–/>

そこで、Individual Entry Archive.htmlの内に下記のスクリプトを追記してやるとエラーが消えました。

※追記したスクリプト(内の<$MTEntryTrackbackData$/>以降に追加)

<script type=”text/javascript” language=”javascript”/>
<!–

var HOST = ‘<$MTBlogHost$/>’;

// Copyright (c) 1996-1997 Athenia Associates.
// http://www.webreference.com/js/
// License is granted if and only if this entire
// copyright notice is included. By Tomer Shiran.

function setCookie (name, value, expires, path, domain, secure) {
var curCookie = name + “=” + escape(value) + (expires ? “; expires=” + expires : “”) + (path ? “; path=” + path : “”) + (domain ? “; domain=” + domain : “”) + (secure ? “secure” : “”);
document.cookie = curCookie;
}

function getCookie (name) {
var prefix = name + ‘=’;
var c = document.cookie;
var nullstring = ”;
var cookieStartIndex = c.indexOf(prefix);
if (cookieStartIndex == -1)
return nullstring;
var cookieEndIndex = c.indexOf(“;”, cookieStartIndex + prefix.length);
if (cookieEndIndex == -1)
cookieEndIndex = c.length;
return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

function deleteCookie (name, path, domain) {
if (getCookie(name))
document.cookie = name + “=” + ((path) ? “; path=” + path : “”) + ((domain) ? “; domain=” + domain : “”) + “; expires=Thu, 01-Jan-70 00:00:01 GMT”;
}

function fixDate (date) {
var base = new Date(0);
var skew = base.getTime();
if (skew > 0)
date.setTime(date.getTime() – skew);
}

function rememberMe (f) {
var now = new Date();
fixDate(now);
now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);
now = now.toGMTString();
if (f.author != undefined)
setCookie(‘mtcmtauth’, f.author.value, now, ‘/’, ”, ”);
if (f.email != undefined)
setCookie(‘mtcmtmail’, f.email.value, now, ‘/’, ”, ”);
if (f.url != undefined)
setCookie(‘mtcmthome’, f.url.value, now, ‘/’, ”, ”);
}

function forgetMe (f) {
deleteCookie(‘mtcmtmail’, ‘/’, ”);
deleteCookie(‘mtcmthome’, ‘/’, ”);
deleteCookie(‘mtcmtauth’, ‘/’, ”);
f.email.value = ”;
f.author.value = ”;
f.url.value = ”;
}

//–/>
</script/>

これで、とりあえず自分の環境ではエラーも出ずに動いています。


この記事をシェアする

ディスカッション

コメントはまだありません

コメントはお気軽にどうぞ

※メールアドレスは公開されませんのでご安心ください。


This site is protected by reCAPTCHA and the GooglePrivacy Policy and Terms of Service apply.

このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。

”ところによりエンジニア”