右側にある「最近の記事」はテーブルで表示しています。
テーブルの左セルに日付、右セルにタイトルという構成ですが、11/22 のように 1 日に 2 件の記事がある場合でも、11/22 が 2 件にそれぞれ表示されていました。
そこで <MTDateHeader> タグで日付を囲んでみたところ、11/22 は 1 つだけ表示されるようになりました。

ソースはこちら。
<table border="0" cellspacing="1" cellpadding="1">
<MTEntries lastn="10" author="Washimi">
<tr>
<td valign="top">
<MTDateHeader><$MTEntryDate format="%m/%d"$></MTDateHeader>
</td>
<td valign="top">
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
</td>
</tr>
</MTEntries>
</table>
どうもプログラムがうまく動作していないと思ったら、値の比較は == と = を重ねなければいけないのに 1 つしかなく、b に true を代入していたというケースがあります。
if (b = true) {
....
}
明らかにつまらないヒューマン・エラー (人的ミス) ですが、シビアな状況ほど気づきにくいものです。
そこで以下のような一工夫で、このようなミスを防ぐことができます。
if (true == b) {
....
}
というか、納期が厳しくなった客先に常駐し、ソースコードのレビュー (内容をチェックすること) を行ったのですが、危なっかしい箇所が多々あって脱力しました。
新人くんだから仕方ないとはいえ、切羽詰っているためか社内でのフォローがなく、外部に頼る体制も、、、ということで日曜は出勤、来週は大忙し。
network styly * の「【MovableTypeカスタマイズ】長くなりすぎたページを分割して表示する方法」を参考にして、MTPaginate というプラグインをインストールしました。
Movable Type の設置時に Digital カテゴリーが 100 件以上あり、さすがに一覧表示すると情報過多でわずらわしく感じました。その後、応急処置的にカテゴリーの細分化で件数を削減しました。
今回、各カテゴリーを 5 件ずつ複数ページに表示するようにしましたが、なかなか見通しがよいですね。
数ステップでプラグインの機能が利用できるようになるため、php が利用できるサーバをお使いの方は試されることをオススメします。
ついでに各テンプレートも編集してみました。
表向きには日付の上部になった罫線を下部にもってきました。この対応で故意に改行をいれないと記事の内容が表示されなくなる不具合も解消されました。
過去の記事 (月別アーカイブ) のリストが長くなってしまったので、フォームを使ってプルダウンメニューにしてみました。
実際に右側の過去の記事でご覧いただけると思いますが、プルダウンメニュー内の項目を選択すると該当年月の記事を表示します。
新規ウィンドウのチェックボックスがチェックされている場合、新しいウィンドウで表示します。チェックされていない場合は現在のウィンドウで表示します。
以下がプルダウンメニューとチェックボックスを表示するための HTML です。
なお利用時はインデントの全角空白をタブ等に置き換えてください。
<div class="sidetitle">過去の記事</div>
<div class="side">
<form name="monthly">
<select onChange="SelectMonthlyArchive(this)">
<option value="/">選択してください</option>
<MTArchiveList archive_type="Monthly">
<option value="<$MTArchiveLink$>"><$MTArchiveTitle$> (<$MTArchiveCount$>)</option>
</MTArchiveList>
</select>
<input type="checkbox" name="window">新規ウィンドウ
</form>
</div>
実際にプルダウンメニューで選択された場合、以下の JavaScript で記事を表示します。
ブラウザで JavaScript を使用しない設定では動作しませんのでご注意ください。
function SelectMonthlyArchive(Obj) {
var url = Obj.options[Obj.selectedIndex].value;
// 「選択してください」が選択された場合
if ("/" == url)
return false;
// 「新規ウィンドウ」がチェックされているかどうか
if (true == document.monthly.window.checked) {
// 新規ウィンドウで月別アーカイブを開く
window.open(url);
} else {
// 現在のウィンドウで月別アーカイブを開く
parent.location = url;
}
}
MySQL という RDB に対応しているのに使っていなかったので、インストール時に選択していた Berkeley DB から移行してみました。
Berkeley DB や MySQL というのは、簡単に言うと記事を保管しておく場所なのですが、投稿後のトップページ他のページの再構築は MySQL の方が早いそうです。
実は Berkeley DB を聞くのは初耳ですが、サーバ上にバイナリファイルとして存在する DB なのでしょうか。
さて、Berkeley DB から MySQL への移行には、mt-db2sql.cgi という CGI を実行するのですが、私がダウンロードしたパッケージには含まれていませんでした。何かの拍子の自動生成されるのかとも思ったのですが違いました。
新規インストール用のパッケージではなく、アップグレード用のパッケージに含まれていました。(他に探し回った方はいらっしゃるのかな?)
アップグレード用のパッケージをダウンロードし、mt-db2sql.cgi をサーバにアップしたところ、見事に移行されました。
さっそくこの記事を投稿して、再構築の速度をみてみたいと思います。