Yahoo! JAPANのOpenIDはMT4では使えない?

 MovableType4化でコメント認証がOpenIDに対応したはず、ということで、早速先日対応したYahoo! JAPANでIDを取得して動作確認してみたもののダメ。

 どうもYahoo!のOpenIDがセキュリティレベルの高いOpenID 2.0にしか対応していないせいっぽい。PlaceEngineのサイトでもYahoo!のOpenIDははじかれるみたいだし、現状では(日本のサイトでは特に)あまり使い道なさそうですね。

 MovableTypeのOpenIDモジュールを差し替えるワザもあるっぽいけど、そもそもOpenID使いが日本ではまだあんまりいなさそうなので、まだいっか、という気も。

 といあえず、↓のサインインボタンを押した時のデフォルトがOpenIDではなくTypeKeyにする方法はないものか。

MovableType3→4移行時のツボ~その2. コメントフォーム編

 前回に続いて、MT3→MT4のテンプレート更新の覚え書きです。今回は、コメントフォーム部分。ウチではフォームのテキスト欄が表示されず、見出しだけになる現象が発生しました。

 コメントに関係しそうなのは、テンプレートモジュールでは、「コメント」、「コメント入力フォーム」、「コメント詳細」。システムテンプレートでは「コメントプレビュー」、「コメント完了」の計5点のようです。MT3時代に作成したブログでは、テンプレートモジュールは3点とも存在せず、システムテンプレートはアリ、という状態でした。

 ついでにトラックバックもほぼ同様の作業なので一緒に処理してしまいます。

■テンプレートモジュールを作成

 この3点は「エントリ・アーカイブ」(MT4では「ブログ記事」)でインクルードされるモジュールです。「コメント」が他の2点をインクルードするようです。おそらくフォームが正しく表示されないのはこの部分の影響でしょう。元々この部分はたいしていじっていなかったはずなので、新モジュールをそっくり使ってしまいます。トラックバック関係は「トラックバック」のみのようです。

 計4点、新規に作っておいたテスト用のブログからコピペで作成します。

■新コメントモジュール利用する設定

 MTデフォルトではコメント欄は個別の「エントリー・アーカイブ」で使われているだけだと思うので、そこだけ修正すれば良いはず。「アーカイブ・テンプレート」→「エントリー・アーカイブ」テンプレート(名称は作成時期で多少違うと思います。MT2の頃だと英語だったり)を開き、コメントは、<MTIfCommentsAcrive>~</MTIfCommentsAcrive>、トラックバックは、<MTIfPingAcrive>~<MTIfPingAcrive>の部分をそれぞれ下記のように置き換えて下さい。

<$MTInclude module=”トラックバック”$>
<$MTInclude module=”コメント”$>

 更に、<body>タグに以下の属性を追加します。前回の検索フォーム対策をしてある場合は、「ヘッダー」テンプレートの中にあると思います。また、元々class属性がある場合は、残して置いた方が良いかも知れません。でないとスタイルシートが正しく適用されなくなります。

<body class=”<MTIf name=”body_class”><$MTGetVar name=”body_class”$> </MTIf><$MTGetVar name=”page_layout” default=”layout-wtt”$>”<MTIf name=”body_onload”> onload=”<$MTGetVar name=”body_onload”$>”</MTIf>>

 コメント、トラックバック部分がモジュールに追い出せたので、直接コードを書いてあった元のテンプレートに比べると、かなりスッキリしますね。もともと細かくいじる部分ではないので合理的です。

■JavaScriptテンプレートを作成

 さて、これで試しに適当なエントリを再構築してみると、無事コメント欄が正しく表示されるようになると思います。ただし、TypeKeyなどの認証サービスを利用するリンクが表示されません。これはJavaScriptファイルであるmt.jsが存在しないためのようです。

 「インデックステンプレート」を開くと、古いmt-site.jsというファイルに紐付いた「JavaScript」テンプレートがあるので、削除するなりして無効化し、やはりこれも新ブログからコピペします。「テンプレートの種類」は「JavaScript(javascript)」を選び、ファイル名は元あったmt-site.jsなど、現在のヘッダ部分で記述しているままを指定します。

(そういえば、この「テンプレートの種類」という項目、他のインデックステンプレートでも再設定しておく方が無難かも知れません。)

 以上で、コメント欄は正しく表示、動作するようになったはずです。MT4では最初、コメント欄は隠れており、「サインイン」か「匿名でコメント」というリンクをクリックするとそれに応じた動作をする、という仕様のようです。

■システムテンプレートの更新

 さて後は、「確認」ボタンを押した時のプレビュー画面を定義する「コメントプレビュー」(旧名は「Comment Preview Template」)と、コメント送信後の完了画面を定義する「コメント完了」の2点のシステムテンプレートを、やはり新ブログからコピペします。前者は旧名のテンプレートをクリックして中身を書き換えたら名称も自動的に更新されました。

 以上で、ブログの外観はほとんど変わらず、コメント周りが正しく機能するようになると思います。動作チェックの後、残りの個別エントリを全て再構築して作業完了です。

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でページが生成されるはずです。