MovableType3→4移行時のツボ~その1. 検索フォーム編

 MovableType3.6のデータを4.1にコンバートしたら、一部機能が正常に機能しなくなりました。 大きくは検索でエラーが出る点とコメントフォームが正しく表示されない点です。

 あれこれいじってなんとか動くようになったんですが、ウチでホストしている他のブロガーの為に、外観、テンプレートを極力書き換えずに機能させる手順をまとめてみました。

 ドキュメント等を見ずに我流で編み出した方法なので、もっとスマートなやり方があるのかも知れません。というか従来のデザインにあまり名残が無いのであれば、いっそテンプレートをリセットしてMT4のものをベースに再構築した方が、後々シアワセになれるかも知れません。モジュール化、サイドバーへのウィジェット配置機能などせっかくのコンセプトが活かせるからです。実際、このブログは練習も兼ねてそうしてみましたが、かなり見通しがよくなった気がします。

■なぜ検索でエラーが出るのか?

 DBコンバートしただけの状態では「 検索結果の作成に失敗しました。」と出てしまうワケですが、この原因は、「システムテンプレート」→「検索結果」テンプレートの中で呼んでる(インクルードしている)「ヘッダー」、「ブログ記事の概要」、「フッター」という3つのテンプレートモジュールが存在しないからのようです。この3つを用意してやれば正常に機能するというワケです。

 「検索結果」テンプレートを開いた画面で、右サイドバーの「インクルードモジュール」という見出しの下に、各モジュールを新規作成するリンクがあるので、そこから作れば簡単です。

■「ヘッダー」

 文字通り<html><head>~</head>辺りのテンプレートです。MT4の標準テンプレートを見ると、<body>以降も共通となる部分は若干含んでいるようです。「メインページ」テンプレートからごっそりコピーするのが簡単でしょう。

 MT3の標準的な2カラムレイアウトのテンプレートをベースにしている場合、

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

から、<MTEntries>で記事データが始まる直前の、

<div id=”pagebody”>
<div id=”pagebody-inner” class=”pkg”>
<div id=”alpha”>
<div id=”alpha-inner” class=”pkg”>

あたりまででよさそうです。

■「フッター」

 同様にフッターも「メインページ」から最後の部分をコピペします。サイドバー部分もメインページ同様に表示されるようにするには、</MTEntries>直後からざくっと行きましょう。

■「ブログ記事の概要」(→別名で作成)

 さて、問題は検索に該当した記事の表示フォーマットを既定する部分です。一番簡単には、「メインページ」テンプレートから上記の「ヘッダー」、「フッター」にもってった部分の残り、つまり<MTEntries>~</MTEntries>の中身を流用する手がありますが、これだと本文が全て表示されてしまうので、ヒット数が増えた時に一覧性がよろしくありません(MT4標準ではそうなるようです)。

 そこでこの際、シンプルに日付入りのタイトルのリストになるようにしましょう、

<li class=”search-list-item”><$MTEntryDate format=”%Y.%m.%d”$>: <a href=”<$MTEntryLink$>”><$MTEntryTitle$></a></li>

です。

 「ブログ記事の概要」というテンプレート名はMT4のテンプレート群の中では重要なものなので、中身を大きく改変したものを重複する名前で作っておくと、将来MT4テンプレートを一括導入した時に問題になりそうなので、ここでは「タイトル一覧項目」という名前で作成しておきます。

■「検索結果」テンプレートの調整

 上記モジュールを呼び出すシステムテンプレート「検索結果」を調整します。元々

<$MTInclude module=”ブログ記事の概要” hide_counts=”1″$>

と書かれた行があるので、これのモジュール名を変えつつ、<ul>タグを追加します。下記のように置き換えて下さい。

<div class=”search-content”>
       <ul class=”search-list”>
              <$MTInclude module=”タイトル一覧項目” hide_counts=”1″$>
        </ul>
</div>

 ■スタイルシートの調整

 例えば、リストの文字が小さいな、という気がしたら、「インデックステンプレート」→「スタイルシート」テンプレートに

.search-list-item a {
   font-size:medium;
   margin-left:3px;
}

 などと調整しましょう。

 既にMT3環境がなく、検索結果画面のレイアウトが調べられないので、適当にでっちあげてしまいましたが、以上でとりあえず動くようにはもってけると思います。

 次回は、コメントフォームを動かすための最低ステップをまとめてみたいと思います。

MovableType4でアーカイブマッピングが変更できない件の覚え書き

 MovableType4.1ではデフォルトで、ファイル名が「hoge-fuga.html」とハイフンで生成されます。今までは「hoge_fuga.html」のようにアンダースコア区切りだったので、このまま再構築してしまうと、過去のページのURLが変わってしまい、外部サイトからリンクされている場合などに不都合が生じます。

 通常、この設定はアーカイブテンプレートで「ブログ記事」の「アーカイブマッピング」の設定をいじることで変更できるのですが、なぜか「yyyy/mm/entry_basename.html」を選んで「保存」を押すとエラー(Bad Request)になってしまいます。ブラウザを変えてもダメ。

 このままではいつまでも全再構築ができないので、MySQLで直接データベースを書き換えるという暴挙に出ました。おそらく、テンプレートを初期化した場合などにも再度設定が必要になると思われるので覚え書きしておきます。

 まず、MT管理画面で該当の設定画面を呼び出します。個別記事の場合、MT4では「ブログ記事」というアーカイブテンプレートが相当するようです。そして、この時のURIを見て、 テンプレートのID番号を探ります。

https://…/cgi-bin/mt/mt.cgi?__mode=view&_type=template&id=265&blog_id=7

 で、MySQLのコマンドラインツールで、

update mt_templatemap set templatemap_file_template=’%y/%m/%f’ where templatemap_template_id=’265′;

というSQLを発行します。 「%y/%m/%f」というのは、管理画面のソースから読み取りました。

 ターミナルでログインできるサーバーか、DB編集ユーティリティの提供されているレンタルサーバー等でしか使えない技ですが、ご参考までに。

MovableType 4.1への移行と文字コード変換

 Webサーバーを新マシンに移行するついでに、MovableType4のオープンソース版に移行することにしました。そして、同時にかねてからの課題だったUTF-8化に挑戦(BlogWriteIIから投稿した時に「~」が化けなくなるように)。

 様々なページを参考にしましたが、それぞれ微妙に事情が違っていて苦労しました。基本的には、

  • MTはEUC-JPで構築していた
  • MySQLのテーブルはlatin1だった
  • バックエンドDBはMySQL

という状況です。

 結果としては効いたのは、迷惑コメントの消去です。これでMySQLのダンプサイズが劇的に減っただけでなく、奇妙な文字化けによるインポートエラーを回避することができました。MTの管理画面からは見えにくいですが、迷惑コメントタブの方に万単位に溜まってたのでしたorz。

 MT管理画面で一通り不要なデータを削除した後、ターミナルから、

mysqldump –default-character-set=ujis -u user -p dbname > mtdb.sql

としました(もしかすると–default-character-set=binaryだったかも)。赤字部分は環境に応じて修正すべし。次に、これをUTF-8にコンバートし、ファイル内部のlatin1という文字列をutf8に置換します。

nkf -w mtdb.sql > mtdb_utf.sql
perl -pi -e ‘s/latin1/utf8/’ mtdb_utf.mysql

 ついでに、今までの化けた「~」を修正するため、emacsで、波ダッシュを「~」に置換しました。これで下準備は完了です。

 次に、新サーバー側の準備として、/etc/my.cnfの、[mysqld] 、[mysql]、[mysqldump]の項に、

default-character-set=utf8

を追記。[mysqld]には更に、

skip-character-set-client-handshake

も追記。この辺はどれが必須かは不明です。 これで、MySQLの作るDBのデフォルト文字コードがUTFになるので、新しくMovableType用DBを作成し、先ほどのダンプを流し込みます。

mysqladmin create dbname
mysql dbname < mtdb_utf.sql

 ここの流し込みで散々エラーに悩まされましたが、迷惑コメントのデータを一層し、nkfでUTF-8に変換したところ上手くいきました(lvではダメでした)。

 あとは、新規インストールしたmT4のmt-config.cgiでPublishCharsetをutf-8にし、mt.cgiにアクセスしたら自動的にDBの変換が実行され、管理画面で文字化けしてなければOKです。再構築すればUTF-8でページが生成されるはずです。

iPod touch/iPhoneのSafariでデフォルトの表示幅を指定する

meta (HTMLタグ リファレンス)

 iPod touchのSafariでは、携帯電話向けに作った横幅の狭いページもデフォルトではやたら縮小されて表示されてしまいます。せっかくドットバイドットで表示できる画像を用意してもわざわざ小さく縮小表示してくれやがります。bodyタグやpタグにwidthとか指定してみてもダメ。そこでググってみると、上記のリファレンスページにmetaタグでの指定方法が載っていました。

<meta name=”viewport” content=”width=300″>

のように記述しておけば良いことが判明。

<meta name=”viewport” content=”initial-scale=0.75″>

のようにズーム率で指定することもできるようですが、どっちを使うべきかは不明。とりあえず前者にしときます。

 現状ではPCのブラウザでは無視されるっぽいので、iPod touchでアクセスする可能性のあるページに気軽に埋め込んでおけそうです。

 他にも、最小倍率、最大倍率、ピンチ禁止などができるようです。

ノイズキャンセリングヘッドフォン ATH-ANC7

 以前のエントリで「カフェ仕事用鞄に専用のヘッドフォンを用意するか」と思いつきを書いたのが原因で「コレハカワネバ」の呪いを受けました。

 で、どうせならガジェット感の高いものをということでノイズキャンセリング(以下NC)タイプにしようと。NCといえばまだ世間の認知が低かった頃にSONYがひっそり発売していたインナーイヤータイプのものを数年前に買ったんですが、ホワイトノイズがひどくてゲンナリでした。また、iPod nano 2nd赤をAppleStoreに買いに行った時にQuiet Comfort3(以下QC3)を試聴してコンパクトさやかけ心地がかなり気に入ったんですが、さすがに想定使用頻度を考えると高い買い物だと思って躊躇してました。

 で、今回結局選んだのはオーディオテクニカのATH-ANC7。ヨドバシ店頭で2.5諭吉程度なので衝動買いにはちょっと高いなぁ、と思ってたんですが、Amazonで1.7諭吉程度だと判明したため決定。本日到着。

 早速スタバで試しつつこれを書いているんですが、ホワイトノイズは皆無と言って良いと思います。NC力もなかなかで店内BGMが少し聞こえる程度で、その他の話し声や空調音はほとんど遮断できてると思います。スイッチを入れた瞬間にまるで、イヤーパッドがきつく締まったみたいに「キュッ」って感じで音が消えます。今は夜遅めの時間であまり騒がしい客はいないんですが、このモデルは人の声の遮断性が優れているらしいので、休日昼間のマックとかでは更に期待できそうです。

 かけ心地はさすがにQC3には一歩譲りますね。あっちの方がコンパクトですし。ただ、こっちの方が耳全体を覆うタイプなので遮音性能自体は高いはず。小一時間ほどつけて書き物をしていますが、ちょっと圧迫感(パッドの押しつけ感)が強いかも知れません。

 ユーザビリティ的に面白いのはヘッドフォン側のケーブルも外せる点。音楽を聴かなくてもNC機能だけ使う”耳栓”代わりに使うのに便利そう。長さも自分の用途に併せて選べる点もメリットでしょう。ただし、ケーブルを外してしまうとデザイン的に前後がわかりづらいです。もう少しひと目で向きがわかるデザインだったら良かったのに、と思います。あと折りたたみもできないので、移動時は首にかけるしかナサゲ。まぁ、この手のヘッドフォンはあまり移動中に使うものでもないんですが、飛行機とかに持ち込むのにはちょっと嵩張るでしょうね。

 音質的にはほぼ満足。中低音は充分。サントラではチェロとかいい感じです。ピアノはもう少し綺麗だと嬉しいかなぁ、という程度。アニソンとかなら無問題。ボーカルは高音まで綺麗だと思います。

 1.7諭吉ならトータルなCPは高いんじゃないでしょうか。