MTEntriesWithSubCategories タグの不具合などについて
Movable Type 4.2/4.21 で、MTEntriesWithSubCategories タグをブログ記事リストで使用すると、下記の問題が発生します。頂いたコメントで判明致しました。
- テンプレートのプレビューでエラーになる
- テンプレート再構築でエラーになる(場合がある)
いずれも次のようなエラーが発生します。

再構築でエラーになるのは、テンプレート編集画面の「保存と再構築」をクリックした場合で確認しています。
また、Movable Type 4.1 では親カテゴリーにブログ記事が1件も投稿されていない場合でも、小カテゴリーにブログ記事が投稿されていれば、MTEntriesWithSubCategories タグを使用することで、親カテゴリーアーカイブが出力されましたが、4.2 では親カテゴリーに1件以上のブログ記事が投稿されていないと空の親カテゴリーアーカイブが出力されるようです。
バージョン4.1 で MTEntriesWithSubCategories タグを利用されている方はご注意ください。
Movable Type 4.1 と 4.2 の差分(コメント入力フォーム)
Movable Type 4.1 と 4.2 のコメント入力フォームの差分を掲載します。
Movable Type 4.2 では、インデックステンプレートの JavaScript(mt.js)の実装がほぼすべて新しくなり、それに伴い、コメント入力フォームのマークアップもかなり変更されています。
4.1 から 4.2 にアップグレードした場合、JavaScript(mt.js)やコメント入力フォームはそのままでも問題ないと思いますが、4.2 のコメント関連機能を活用するには、インデックステンプレートの JavaScript(mt.js)を初期化、つまり 4.2 の JavaScript(mt.js)を利用し、コメント入力フォームのテンプレートについては、以下に示す変更を行うと良いでしょう。
1.コメントプレビュー用データ
表示されているページがコメントプレビューであることを示すための情報を設定します。
コメントプレビューテンプレートに下記の青色のスクリプトを、mt.js が読み込まれる前に実行されるよう、挿入してください。
4.1
...前略...
<MTSetVarBlock name="html_head">
<script type="text/javascript" src="<$MTLink template="javascript"$>"></script>
</MTSetVarBlock>
...後略...
4.2
...前略...
<MTSetVarBlock name="html_head">
<script type="text/javascript">
/* <![CDATA[ */
var user = <mt:userSessionState />;
var is_preview = true;
/* ]]> */
</script>
<script type="text/javascript" src="<$MTLink template="javascript"$>"></script>
</MTSetVarBlock>
...後略...
この設定がもれていると、サインインしていないコメントでプレビューした場合、CAPTCHA フィールドがデフォルトで表示されないといった不具合が発生します。
2.メッセージ表示用エリアのマークアップ
「サインインできます」などのメッセージを表示するエリアのサブテンプレートは、4.1 で使われていた MTIfRegistrationAllowed タグがなくなり、(X)HTML の div 要素に変わりました。div 要素の id 属性値は comment-greeting としてください。
4.1
<MTIfRegistrationAllowed>
<div id="comment-form-external-auth">
<script type="text/javascript">
<!--
<MTIf name="comment_preview_template">is_preview = true;</MTIf>
writeCommenterGreeting(commenter_name, <$MTEntryID$>, <$MTEntryBlogID$>, commenter_id, commenter_url);
//-->
</script>
</div>
</MTIfRegistrationAllowed>
4.2
<div id="comment-greeting"></div>
3.form要素
onsubmit 属性値が変わりました。この変更を行わないと、コメント投稿時に「不正なエラーです」というエラーになります。
4.1
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" id="comments-form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
4.2
<form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments_form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)">
4.hidden属性のinput要素
4つの input 要素が追加されています。parent_id は親コメントへの返信コメントのときの親コメントIDです。armor(よろい)はスパムコメント対策用のデータです。
4.1
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<input type="hidden" name="__lang" value="<$MTBlogLanguage$>" />
4.2
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$mt:EntryID$>" />
<input type="hidden" name="__lang" value="<$mt:BlogLanguage$>" />
<input type="hidden" name="parent_id" value="<$mt:CommentParentID$>" id="comment-parent-id" />
<input type="hidden" name="armor" value="1" />
<input type="hidden" name="preview" value="" />
<input type="hidden" name="sid" value="" />
4.2(コメントプレビュー)
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$mt:EntryID$>" />
<input type="hidden" name="__lang" value="<$mt:BlogLanguage$>" />
<mt:IfCommentParent>
<input type="hidden" name="parent_id" value="<$mt:CommentParentID$>" id="comment-parent-id">
</mt:IfCommentParent>
<input type="hidden" name="armor" value="1" />
<input type="hidden" name="preview" value="" />
5.input要素(名前・メール・URL)
名前・メール・URLの input 要素に、CAPTCHAを表示するための onfocus 属性が追加されています。onfocus 属性値はブログ記事/ウェブページまたはコメントプレビュー画面で起動する関数が異なります。ブログ記事/ウェブページでは入力フィールドをクリックするとCAPTCHAを表示し、コメントプレビューではデフォルトで表示します。
4.1
<input id="comment-author" name="author" size="30" value="<MTIf name="comment_preview_template"><$MTCommentAuthor encode_html="1"$></MTIf>" />
...中略...
<input id="comment-email" name="email" size="30" value="<MTIf name="comment_preview_template"><$MTCommentEmail encode_html="1"$></MTIf>" />
...中略...
<input id="comment-url" name="url" size="30" value="<MTIf name="comment_preview_template"><$MTCommentURL encode_html="1"$></MTIf>" />
4.2
<input id="comment-author" name="author" size="30" value="<mt:If name="comment_preview_template"><$mt:CommentAuthor encode_html="1"$></mt:If>" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>" />
...中略...
<input id="comment-email" name="email" size="30" value="<mt:If name="comment_preview_template"><$mt:CommentEmail encode_html="1"$></mt:If>" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>" />
...中略...
<input id="comment-url" name="url" size="30" value="<mt:If name="comment_preview_template"><$mt:CommentURL encode_html="1"$></mt:If>" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>" />
6.input要素(情報を保存)
onclick 属性値が変わりました。またコメントプレビューでは非表示になるため、全体をMTUnlessタグで括ります。
4.1
<div id="comment-form-remember-me">
<label for="comment-bake-cookie"><input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="if (!this.checked) forgetMe(document.comments_form)" value="1" />
<__trans phrase="Remember personal info?"></label>
</div>
4.2(コメントプレビューでは表示させない制御を追加)
<mt:Unless name="comment_preview_template">
<div id="comment-form-remember-me">
<input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="mtRememberMeOnClick(this)" value="1" accesskey="r" />
<label for="comment-bake-cookie"><__trans phrase="Remember personal info?"></label>
</div>
</mt:Unless>
7.返信表示用チェックボックス
コメント返信機能が標準装備されたので、返信用のチェックボックスが追加になりました。
4.1
- なし
4.2
<div id="comments-open-data">
...中略...
</div>
<div id="comment-form-reply" style="display:none">
<input type="checkbox" id="comment-reply" name="comment_reply" value="" onclick="mtSetCommentParentID()" />
<label for="comment-reply" id="comment-reply-label"></label>
</div>
8.textarea要素
CAPTCHA表示用の onfocus 属性が追加されています。onfocus 属性値はブログ記事/ウェブページまたはコメントプレビュー画面によって内容が異なります。
4.1
<textarea id="comment-text" name="text" rows="15" cols="50"><MTIf name="comment_preview_template"><$MTCommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$></MTIf></textarea>
4.2
<textarea id="comment-text" name="text" rows="15" cols="50" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>"><mt:If name="comment_preview_template"><$mt:CommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$></mt:If></textarea>
9.CAPTCHA用フィールド
4.1 で使われていた テンプレートタグがなくなり、div 要素だけになりました。
4.1
<MTIfNonEmpty tag="MTCaptchaFields">
<MTIfCommentsAccepted><MTIfRegistrationAllowed><MTElse><$MTCaptchaFields$></MTIfRegistrationAllowed></MTIfCommentsAccepted>
<div id="comments-open-captcha">
</div>
</MTIfNonEmpty>
4.2
<div id="comments-open-captcha"></div>
10.確認用フォームボタン
name 属性値が変更になり、onclick 属性が追加されました。
4.1
<input type="submit" accesskey="v" name="preview" id="comment-preview" value="<__trans phrase="Preview">" />
4.2
<input type="submit" accesskey="v" name="preview_button" id="comment-preview" value="<__trans phrase="Preview">" onclick="this.form.preview.value='1';" />
11.投稿後、フォームボタンをdisableにするJavaScript(二重送信の防止)
コメントフォームの最後に script 要素が追加されました。
4.1
- なし
4.2
<div class="comments-open" id="comments-open">
...中略...
</div>
<script type="text/javascript">
<!--
mtAttachEvent("load", mtEntryOnLoad);
mtAttachEvent("unload", mtEntryOnUnload);
//-->
</script>
12.4.1のテンプレート構成で4.2にバージョンアップする場合のコメント入力フォームサンプル
4.2 の「既定のブログ」テンプレートセットでは、「コメント入力フォーム」テンプレートモジュールがなくなり、ブログ記事・ウェブページ用のコメント入力フォーム(「コメント」テンプレートモジュール)とコメントプレビューのコメント入力フォーム(コメントプレビューテンプレートに直接記述)が独立してしまったので、4.1 の「既定のブログ」テンプレートセットの構成に対応できるよう、
- ブログ記事
- ウェブページ
- コメントプレビュー
のテンプレートで使える「コメント入力フォーム」テンプレートモジュールを作ってみましたので、よければお使いください。
また、不具合がありましたらご連絡ください。
<mt:IfCommentsAccepted>
<div class="comments-open" id="comments-open">
<h2 class="comments-open-header"><__trans phrase="Leave a comment"></h2>
<div class="comments-open-content">
<div id="comment-greeting"></div>
<form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments_form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$mt:EntryID$>" />
<input type="hidden" name="__lang" value="<$mt:BlogLanguage$>" />
<mt:IfCommentParent>
<input type="hidden" name="parent_id" value="<$mt:CommentParentID$>" id="comment-parent-id">
</mt:IfCommentParent>
<input type="hidden" name="armor" value="1" />
<input type="hidden" name="preview" value="" />
<div id="comments-open-data">
<div id="comment-form-name">
<label for="comment-author"><__trans phrase="Name"></label>
<input id="comment-author" name="author" size="30" value="<mt:If name="comment_preview_template"><$mt:CommentAuthor encode_html="1"$></mt:If>" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>" />
</div>
<div id="comment-form-email">
<label for="comment-email"><__trans phrase="Email Address"></label>
<input id="comment-email" name="email" size="30" value="<mt:If name="comment_preview_template"><$mt:CommentEmail encode_html="1"$></mt:If>" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>" />
</div>
<div id="comment-form-url">
<label for="comment-url"><__trans phrase="URL"></label>
<input id="comment-url" name="url" size="30" value="<mt:If name="comment_preview_template"><$mt:CommentURL encode_html="1"$></mt:If>" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>" />
</div>
<mt:Unless name="comment_preview_template">
<div id="comment-form-remember-me">
<input type="checkbox" id="comment-bake-cookie" name="bakecookie" onclick="mtRememberMeOnClick(this)" value="1" accesskey="r" />
<label for="comment-bake-cookie"><__trans phrase="Remember personal info?"></label>
</div>
</mt:Unless>
</div>
<div id="comment-form-reply" style="display:none">
<input type="checkbox" id="comment-reply" name="comment_reply" value="" onclick="mtSetCommentParentID()" />
<label for="comment-reply" id="comment-reply-label"></label>
</div>
<div id="comments-open-text">
<label for="comment-text"><__trans phrase="Comments">
<mt:IfAllowCommentHTML><__trans phrase="(You may use HTML tags for style)"></mt:IfAllowCommentHTML></label>
<textarea id="comment-text" name="text" rows="15" cols="50" onfocus="<mt:If name="comment_preview_template">mtShowCaptcha()<mt:Else>mtCommentFormOnFocus()</mt:If>"><mt:If name="comment_preview_template"><$mt:CommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$></mt:If></textarea>
</div>
<div id="comments-open-captcha"></div>
<div id="comments-open-footer">
<input type="submit" accesskey="v" name="preview_button" id="comment-preview" value="<__trans phrase="Preview">" onclick="this.form.preview.value='1';" />
<input type="submit" accesskey="s" name="post" id="comment-submit" value="<__trans phrase="Submit">" />
</div>
</form>
</div>
</div>
<script type="text/javascript">
<!--
mtAttachEvent("load", mtEntryOnLoad);
mtAttachEvent("unload", mtEntryOnUnload);
//-->
</script>
</mt:IfCommentsAccepted>
Movable Type 4.2 テンプレートセット(フッタ付きリキッドレイアウト対応)
Movable Type 4.2 用のテンプレートセット(スタイル対応版)にフッタ付きリキッドレイアウトを追加したバージョンの配布を開始します。
これまで配布していたテンプレートセットのリキッドレイアウトは、CSSレイアウトの構造上、背景つきのフッタを表示させると、フッタの表示がサイドバーに重なってしまうという欠点があったため、簡易なテキストのみをフッタとして中央カラムに表示していました。
今回、リキッドレイアウトについては、ネガティブマージンを利用したCSSレイアウトに変更したので、背景つきのフッタもサイドバーに重ならずに表示させることができると思います。
今回追加したリキッドレイアウトは以下の 3 種類です。
3カラムリキッド(左右サイドバー)
![]()
3カラムリキッド(右サイドバー)
![]()
2カラムリキッド(右サイドバー)
![]()
表示は、Windows XP + IE6/Firefox 2/Oprea 9/Safari 3 で確認しています。
なお、ネガティブマージンによるリキッドレイアウトについてはファイルサイズが大きくなると動作が重たくなる可能性があります。以前、当ブログでもこの手法を用いたレイアウトで一度デザインを変更したのですが、IE6 でファイルサイズの大きなページでは実用に耐える表示ができなかったため、一週間ほどで取りやめた経緯があります。
そういう経緯に加え、CSSを作りこむ余裕もなく、リキッドレイアウト+ネガティブマージンによるフッタ付きのCSSレイアウトについては積極的ではなかったのですが、IE7 や FireFox、Safari などのモダンブラウザが主流になり、それらでは問題なく表示できるはずですので、公開することにします。
ただし、動作の保障は致しかねますので、ご利用に関してはご自身の責任でお願い致します。
1.テンプレートセットのダウンロード
「4.2 スタイル対応版(フッタ付きリキッドレイアウト対応)」のテンプレートセットアーカイブを、下記のページからダウンロードしてください。
以下、テンプレートセットの利用方法です。
2.テンプレートセットのインストール
ダウンロードしたテンプレートセットアーカイブを解凍し、中にある plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の plugins フォルダに丸ごとアップロードしてください。
また、mt-static/plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の mt-static/plugins フォルダに丸ごとアップロードしてください。
「システムメニュー」→「プラグイン」でプラグインの一覧が表示されるので、「KoikikukanTemplateSet」が表示されていればインストールOKです。

3.テンプレートセットの入れ替え
ここではインストールされた状態で入れ替える方法を説明します。
ブログ管理画面より「デザイン」→「テンプレート」をクリック。

右下にある「ブログのテンプレートを初期化」をクリック。

「新しいテンプレートセットを適用」を選択し、セレクトボックスから「小粋空間テンプレートセット」を選択。「既存のテンプレートのバックアップを作成する」をチェックすると、入れ替え前のテンプレートのバックアップがとれます。
選択後、右下の「次へ」をクリック。

「確認」をクリック。これでテンプレートセットの入れ替えが開始します。

「テンプレートの初期化を完了しました。」が表示されれば完了です。

サイトの再構築アイコンをクリック。

「すべてのファイル」を選択して「再構築」をクリック。

「すべてのファイルを再構築しました。 」が表示されたら再構築完了です。

前の画面の「サイトを見る」をクリックするか、ブログ管理画面の「サイト表示」のアイコンをクリック。

当サイトのテンプレートセットのデザインで表示されれば完了です。デフォルトデザインのままであればブラウザをリロードしてください。

4.スタイルの切り替え
ここではカラムレイアウトを切り替える方法を説明します。
ブログ管理画面より「デザイン」→「スタイル」をクリック。

「既定のスタイル」の左側にある + マークのアイコンをクリック(「既定のスタイル」の部分は選択状態によって異なります)。

開いたウィンドウに小粋空間テンプレートセットをインストールしたスタティックディレクトリのテーマURLを入力。

具体的には、次のような URL になります。
http://[user-domain]/mt-static/plugins/KoikikukanTemplateSet/themes/
赤色の部分は、MT のスタティックディレクトリ(mt-static ディレクトリがある位置)までの URL を設定してください。
正しい URL であれば、次のような画面になるので、表示されたサムネイル画像をクリック。

右側に大きな画像が表示され、その下にレイアウト選択用のセレクトボックスが表示されます。

リキッドレイアウトは次のものから選択してください。
- 3カラムリキッド(左右サイドバー):layout-three-column-liquid
- 3カラムリキッド(右サイドバー):layout-three-column-liquid-right
- 2カラムリキッド(右サイドバー):layout-two-column-liquid-right

選択後、「デザインを適用」をクリック。

「テーマを適用しました。レイアウトも変更されたので、再構築する必要があります。 設定を有効にするために再構築してください。」と表示されるので、ブログ全体を再構築してください。

スタイルが切り替わりました。サイドバーの内容もテンプレート編集画面で入れ替える必要はありません。
![]()
5.スタイルの編集
スタイルを変更する場合は、インデックステンプレートにある、「スタイルシート(styles-site.css)」を編集してください。
アップロード画像の img 要素の alt 属性・title 属性をカスタマイズする
Movable Type 4.2 で、ブログ記事の「画像の挿入」を使ってアップロード画像を本文や追記に埋め込む場合の、img 要素のalt 属性や title 属性の出力内容をカスタマイズする方法です。
1.「説明」フィールドの内容を alt 属性に挿入する
アップロード時の「説明」フィールドの内容を alt 属性に反映させるカスタマイズです。
デフォルトの状態では、次のようにアップロード時のオプションを設定した場合、

埋め込まれる img 要素の alt 属性には、このように「ファイルオプション」の「名前」フィールドの内容が反映されます。

下に示す、1項のカスタマイズを行えば、埋め込まれる img 要素の alt 属性には、このように「ファイルオプション」の「説明」フィールドの内容が反映されます。

ただし、デフォルトの動作(alt 属性に「名前」フィールドの内容を反映)は適切と思われます。
alt 属性の目的が画像の代替文字列を表示させるためのものであり、代替文字列に対応するのは「名前」フィールドが妥当です。つまり、「名前」フィールドを適切な内容に書き換えてアップロードすればいいわけです。「名前」フィールドを書き換えてもファイル名が変更される訳ではありません。

が、「説明」フィールドの内容を alt 属性値として使いたい場合は、後述するカスタマイズを行ってください。
次の内容をパッチとして使ってください。パッチの実施方法は下記のエントリーを参考にしてください。
--- lib/MT/Asset/Image.pm.bak Wed Aug 27 00:39:40 2008
+++ lib/MT/Asset/Image.pm Wed Aug 27 00:36:14 2008
@@ -324,7 +324,7 @@
$text = sprintf(
'<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
MT::Util::encode_html( $asset->url ),
- MT::Util::encode_html( $asset->label ),
+ MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $thumb->url ),
$dimensions,
$wrap_style,
@@ -333,7 +333,7 @@
else {
$text = sprintf(
'<img alt="%s" src="%s" %s %s />',
- MT::Util::encode_html( $asset->label ),
+ MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $asset->url ),
$dimensions, $wrap_style,
);
パッチが分からない方は、lib/MT/Asset/Image.pm をダウンロードして任意のエディタで開き、322行目あたりにある下記の赤色部分を、青色の内容に書き換えてください。変更後、元のディレクトリにアップロードすれば完了です。
作業前にファイルのバックアップをとっておくと良いでしょう。
変更前
...前略...
else {
if ( $param->{thumb} ) {
$text = sprintf(
'<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $asset->label ),
MT::Util::encode_html( $thumb->url ),
$dimensions,
$wrap_style,
);
}
else {
$text = sprintf(
'<img alt="%s" src="%s" %s %s />',
MT::Util::encode_html( $asset->label ),
MT::Util::encode_html( $asset->url ),
$dimensions, $wrap_style,
);
}
...後略...
変更後
...前略...
else {
if ( $param->{thumb} ) {
$text = sprintf(
'<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $thumb->url ),
$dimensions,
$wrap_style,
);
}
else {
$text = sprintf(
'<img alt="%s" src="%s" %s %s />',
MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $asset->url ),
$dimensions, $wrap_style,
);
}
...後略...
2.「説明」フィールドの内容を title 属性に挿入する
画像を挿入したときに、img 要素に title 属性を追加し、「説明」フィールドの内容を title 属性の内容に反映させるカスタマイズです。

1項と同様、次の内容をパッチとして使ってください。
--- lib/MT/Asset/Image.pm.bak Wed Aug 27 00:39:40 2008
+++ lib/MT/Asset/Image.pm Wed Aug 27 01:17:48 2008
@@ -322,9 +322,10 @@
else {
if ( $param->{thumb} ) {
$text = sprintf(
- '<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
+ '<a href="%s"><img alt="%s" title="%s" src="%s" %s %s /></a>',
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $asset->label ),
+ MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $thumb->url ),
$dimensions,
$wrap_style,
@@ -332,8 +333,9 @@
}
else {
$text = sprintf(
- '<img alt="%s" src="%s" %s %s />',
+ '<img alt="%s" title="%s" src="%s" %s %s />',
MT::Util::encode_html( $asset->label ),
+ MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $asset->url ),
$dimensions, $wrap_style,
);
パッチが分からない方は、lib/MT/Asset/Image.pm をダウンロードして任意のエディタで開き、322行目あたりに、下記の青色部分の内容を追加してください。変更後、元のディレクトリにアップロードすれば完了です。
作業前にファイルのバックアップをとっておくと良いでしょう。
...前略...
else {
if ( $param->{thumb} ) {
$text = sprintf(
'<a href="%s"><img alt="%s" title="%s" src="%s" %s %s /></a>',
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $asset->label ),
MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $thumb->url ),
$dimensions,
$wrap_style,
);
}
else {
$text = sprintf(
'<img alt="%s" title="%s" src="%s" %s %s />',
MT::Util::encode_html( $asset->label ),
MT::Util::encode_html( $asset->description ),
MT::Util::encode_html( $asset->url ),
$dimensions, $wrap_style,
);
}
...後略...
以上です。
今回、プラグインが使えそうになかったので、久しぶりに力技のカスタマイズになってしまいました。エレガントな変更方法がありましたらご教示ください。
【重要】MT4.1x → MT4.2 へのアップグレード注意
Movable Type 4.1x でカスタムフィールドを利用している場合、Movable Type 4.2 へのアップグレードは行わないでください、というニュースがシックス・アパートより公開されました。
Movable Type News - MT4.1x とカスタムフィールドをお使いの場合は MT4.2 へのアップグレードはおまちください
Movable Type 4.1x をお使いで、カスタムフィールドを利用している場合、4.2 へアップグレードは行わないでください。MT4.1x から MT4.2 にアップグレードを行う際、カスタムフィールドのデータを一部消失する可能性があるためです。
アップグレード禁止となる条件は次の通りです。
- Movable Type 4.1x でカスタムフィールド機能をお使いの場合
- Movable Type 4.1x でカスタムフィールド機能をお使いかどうかわからない場合
おそらく近日中に 4.21 がリリースされると思います。
便乗ですが、「Movable Type 4.1x から 4.2 へのアップグレード」で頂いたコメントで、いくつかの問題が発生しているようです。参考になれば幸いです。
Movable Type 4.2 テンプレートセット(スタイル対応版)
Movable Type 4.2 用のテンプレートセット(スタイル対応版)の配布を開始します。

Movable Type 4.1 で追加されたテンプレートセット機能を用いれば、これまでのようにテキストエリアにテンプレートをペーストせずに、簡単に入れ替えることができます。
バージョン 4.1 では、ウィジェットセットがテンプレートセットに未対応でしたが、バージョン 4.2 からウィジェットセットもテンプレートセットに含めることができるようになったため、サイドバーのパーツをウィジェットに移動しました。

1.テンプレートセットのダウンロード
「4.2 スタイル対応版」のテンプレートセットアーカイブを、下記のページからダウンロードしてください。
以下、テンプレートセットの利用方法です。
2.テンプレートセットのインストール
ダウンロードしたテンプレートセットアーカイブを解凍し、中にある plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の plugins フォルダに丸ごとアップロードしてください。
また、mt-static/plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の mt-static/plugins フォルダに丸ごとアップロードしてください。
「システムメニュー」→「プラグイン」でプラグインの一覧が表示されるので、「KoikikukanTemplateSet」が表示されていればインストールOKです。

3.テンプレートセットの入れ替え
ここではインストールされた状態で入れ替える方法を説明します。
ブログ管理画面より「デザイン」→「テンプレート」をクリック。

右下にある「ブログのテンプレートを初期化」をクリック。

「新しいテンプレートセットを適用」を選択し、セレクトボックスから「小粋空間テンプレートセット」を選択。「既存のテンプレートのバックアップを作成する」をチェックすると、入れ替え前のテンプレートのバックアップがとれます。
選択後、右下の「次へ」をクリック。

「確認」をクリック。これでテンプレートセットの入れ替えが開始します。

「テンプレートの初期化を完了しました。」が表示されれば完了です。

サイトの再構築アイコンをクリック。

「すべてのファイル」を選択して「再構築」をクリック。

「すべてのファイルを再構築しました。 」が表示されたら再構築完了です。

前の画面の「サイトを見る」をクリックするか、ブログ管理画面の「サイト表示」のアイコンをクリック。

当サイトのテンプレートセットのデザインで表示されれば完了です。デフォルトデザインのままであればブラウザをリロードしてください。

4.スタイルの切り替え
ここではカラムレイアウトを切り替える方法を説明します。
ブログ管理画面より「デザイン」→「スタイル」をクリック。

「既定のスタイル」の左側にある + マークのアイコンをクリック(「既定のスタイル」の部分は選択状態によって異なります)。

開いたウィンドウに小粋空間テンプレートセットをインストールしたスタティックディレクトリのテーマURLを入力。

具体的には、次のような URL になります。
http://[user-domain]/mt-static/plugins/KoikikukanTemplateSet/themes/
赤色の部分は、MT のスタティックディレクトリ(mt-static ディレクトリがある位置)までの URL を設定してください。
正しい URL であれば、次のような画面になるので、表示されたサムネイル画像をクリック。

右側に大きな画像が表示され、その下にレイアウト選択用のセレクトボックスが表示されます。

セレクトボックスからお好きなレイアウトを選択してください。ここでは「layout-two-column-right」を選択します。

レイアウトの対応は次の通りです。このテンプレートセットには3カラム(右サイドバー)を新しく追加しました。
| 名称 | 意味 |
|---|---|
| layout-three-column | 3カラム・固定レイアウト |
| layout-three-column-right | 3カラム・固定レイアウト(右サイドバー) |
| layout-three-column-liquid | 3カラム・リキッドレイアウト |
| layout-two-column-right | 2カラム(右サイドバー)・固定レイアウト |
| layout-two-column-liquid-right | 2カラム(右サイドバー)・リキッドレイアウト |
| layout-two-column-left | 2カラム(左サイドバー)・固定レイアウト |
| layout-two-column-liquid-left | 2カラム(左サイドバー)・リキッドレイアウト |
| layout-one-column | 1カラム・固定レイアウト |
| layout-one-column-liquid | 1カラム・リキッドレイアウト |
選択後、「デザインを適用」をクリック。

「テーマを適用しました。レイアウトも変更されたので、再構築する必要があります。 設定を有効にするために再構築してください。」と表示されるので、ブログ全体を再構築してください。

スタイルが切り替わりました。サイドバーの内容もテンプレート編集画面で入れ替える必要はありません。
![]()
5.スタイルの編集
スタイルを変更する場合は、インデックステンプレートにある、「スタイルシート(styles-site.css)」を編集してください。
Movable Type 4.2 にアップグレード
当ブログを Movable Type 4.2 にアップグレードしました。

アップグレード方法は「Movable Type 4.1x から 4.2 へのアップグレード」の通りです。
以下、感想など。
1.ブログ管理画面間の移動
軽くなりました。
2.再構築時間の短縮
再構築時間が格段に早くなりました。4.1 では約2200 ブログ記事の再構築が2時間近くかかっていたのに対し、バージョンアップ後は 20 分に短縮されました。
3.テンプレートの再構築オプション
4.1 まではインデックステンプレートに「再構築オプション(インデックステンプレートを再構築するとき、このテンプレートも再構築するかしないかを設定する)」がありました。私のサイトではインデックステンプレートを使ってモジュール化を行っているので、スタティックな内容のインデックステンプレートはこのチェックを外していたのですが、4.2 ではこの項目がなくなっているため、4.2 のアップグレード後、「テンプレートの設定」の「公開」を「手動」に変更する必要があります。
4.プラグイン
ほとんどのプラグインは 4.2 でもそのまま使えますが、MTArchiveDateFooter プラグインは 4.2 対応のものに変更してください。
ちなみに「Movable Type 4.2 パーフェクトガイド」では、MTArchiveDateHeader/MTArchiveDateFooter プラグインを使わずに、月別アーカイブリストを年別に区切るカスタマイズを紹介しています。
また、頂いたコメントから、VisibleCustomFieldImage プラグイン 0.03 は、バージョン 4.2 に対応していないことが判明しています。
なお、カスタムフィールドについては、標準機能として、サムネイルがある場合は画像を表示するように変更されているようです。また画像アップロード時のオプション画面が表示されなくなっています。
Movable Type 4.1x から 4.2 へのアップグレード
ローカル環境で、Movable Type 4.13 から 4.2 へアップグレードしてみました。簡素な環境ですが正常にアップグレードできたことを確認できたので、手順を紹介します。
なお、アップグレードは個人の責任で行ってください。正常にアップグレードできなかった場合、申し訳ありませんが当ブログに質問を頂いても解決するお手伝いをすることはできません。作業前には1項に示すバックアップ作業などを行い、ブログのバックアップを行ってください。
1.ブログのバックアップ
4.1 の状態でブログのバックアップを取得します。
注:ブログのバックアップファイルは4.1と4.2で互換性がありません。ドキュメントにも次のように書かれており、4.2 で復元する場合は、4.2 のバックアップファイルしか対象にできません。
Movable Type 4 ドキュメント - バックアップしたブログの復元
バックアップファイルは、必ずバックアップを行った Movable Type と同じ環境で復元してください。例えば、Movable Type 4.1 の環境で、バックアップしたファイルを Movable Type 4.2 で復元したいとき、まず、Movable Type 4.1 で (緊急時用) バックアップを作成後、その Movable Type を Movanle Type 4.2 にアップグレードし、再度バックアップファイルを作成します。その Movable Type 4.2 の環境で作成したバックアップファイルを使用して、復元したい Movable Type 4.2 の環境で復元します。
この件については下記の記事が参考になると思います。
バックアップした後、正しくバックアップされているかどうか、バックアップファイルを確認した方が良いでしょう。圧縮ファイルでバックアップした場合、バックアップファイルを解凍すれば、XMLファイルなどがテキストエディタで確認できます。
またはバックアップを2回繰り返し、同じサイズになっていれば、経験上大丈夫だと思います。
バックアップはこれ以外にも方法があります。SQLiteであれば、mt-config.cgi に指定してる DBファイルを丸ごとダウンロードしておけば良いでしょう。MySQL であれば、コマンドラインからバックアップを実行するか、phpMyAdmin によるバックアップが可能です。
バックアップはアップグレード前だけでなく、定期的に行いましょう。
2.アプリケーションディレクトリのリネーム
「アプリケーションディレクトリ」は、mt.cgi などがあるディレクトリです。このアプリケーションディレクトリ自体を FTP ツールでリネームして、プログラムを上書きしないようにしています。
例えば、アプリケーションディレクトリ名が
mt
であれば、
mt--
などに変更します。
なお、アプリケーションディレクトリ名を変更した後、一時的にブログ管理画面にアクセスできなくなりますので、注意してください。
3.アプリケーションディレクトリ作成
リネーム前と同じディレクトリを FTP ツールで(同じ位置に)作成します。上の例では、
mt
というディレクトリを作成します。
4.Movable Type 4.2のアップロード
Movable Type 4.2 のプログラム一式を、アプリケーションディレクトリ配下にアップロードします。
スタティックディレクトリをアプリケーションディレクトリと別のディレクトリに配置している場合は、スタティックディレクトリも手順2~3と同じ要領でディレクトリを作成すると良いでしょう。
5.mt-config.cgi のコピー
旧アプリケーションディレクトリ(mt--)にある mt-config.cgi をFTPツールで一旦ローカルPCにダウンロードし、新アプリケーションディレクトリ(mt)にアップロードします。
この作業を行わずに、うっかり mt.cgi にアクセスすると、新規インストールの動作になってしまう場合があるので注意してください。間違ってアクセスしても、6項のパーミッション変更が行われていなければエラーになります。正常にアクセスできた場合も、ブラウザの操作をそれ以上行わなければ問題ありません。
6.SQLiteのデータベースをコピー(データベースにSQLite/SQLite2を使用している場合)
SQLite を使用していて、データベースファイルが旧アプリケーションディレクトリ(mt--)配下にある場合は、FTP ツールで一旦ローカル PC にダウンロードし、新アプリケーションディレクトリ(mt)配下の同じディレクトリにアップロードします。
SQLite のデータベースファイルがどれか分からない場合は、mt-config.cgi を任意のエディタで開き、Database という項目の右側に書かれている内容が SQLite のデータベースへのパスとファイル名になります。
7.CGIファイルの属性変更
5項でアップロードした、アプリケーションディレクトリ直下にある、各CGIファイル(.cgi)の属性を 644 から 755 や 705 などに変更します。属性が分からない場合は、旧アプリケーションディレクトリの CGI ファイルを参照してください。
8.ブラウザから mt.cgi にアクセス
mt.cgi にアクセスするとアップグレードが開始します。「アップグレード開始」をクリック。

サインインします。

アップグレードを実行します。完了したら「Movable Typeに戻る」をクリック。

アップグレードが完了しました。これでブログ管理画面にアクセスできれば完了です。

9.プラグインファイルのコピー
旧アプリケーションディレクトリから必要なプラグインをコピーします。4.1 で外部のテンプレートセットを利用していた場合は、必ず新しい plugins ディレクトリに外部テンプレートセットのディレクトリを、plugins ディレクトリ(場合によっては mt-static/plugins ディレクトリも必要)にコピーしてください。
なお、下記の2つのプラグインはコア機能に統合されたので、旧ディレクトリからコピーしないでください(4.1からブログを開始した場合、Template Refresh プラグインは含まれていません)。
- Widget Manager
- Template Refresh
以上です。
2008.08.17
6項を追加しました。
2008.08.31
9項にテンプレートセットの記述を追加しました。
Movable Type 4.2 日本語版リリース
Movable Type 4.2 日本語版がリリースされました。
おまたせしました!本日 Movable Type の最新版、バージョン 4.2 のをリリースしました。コミュニティから寄せられたアイデアやソースコード、ユーザーからのフィードバック、そして、素晴しいチームが生んだ Movable Type 4.2 は、これまでよりも速く、安全です。また、今回のバージョンアップでは、様々な機能を追加しました。
日本語版は次のものがリリースされています。
| 製品名 |
|---|
| Movable Type 4.2 (Open Source) |
| Movable Type 4.2 (Professional Pack, Community Pack 同梱) |
| Movable Type Commercial 4.2 (Professional Pack 同梱) |
| Movable Type Enterprise 4.2 |
個人無償版は、Movable Type 4.2(コミュニティ機能あり)、または Movable Type Commercial 4.2(コミュニティ機能なし)のいずれかを選択できます。

シックスアパートの皆様、お盆休みを返上してのリリース、大変お疲れ様でした!
Movable Type 4.2 リリース
Movable Type 4.2 がリリースされました。
Movable Type 4.2(en/fr/es/de/nl)は下記のページからダウンロードできます。
なお日本語版については、藤本壱さんのブログにある通り、本日15時頃リリースされるようです。
また、4.2 のリリースに伴い、名称が一部変更されています。
| 旧 | 新 |
|---|---|
| Movable Type | Movable Type Pro |
| Movable Type Open Source(MTOS) | Movable Type |
| Movable Type Enterprise | 同左 |
ということで、早速 Movable Type Pro(en)をダウンロードし、日本語化して「既定のブログ」でサイトを構築してみたのが下です。

一番下のクレジット表記が「Movable Type Pro」になっています。
お詫び:都合により、このパーマリンクの内容を「YUI Compressor で JavaScript ファイルを圧縮する」から本エントリーに変更しています。
Movable Type 4.2 リリース延期
7月中にリリース予定だった Movable Type 4.2 が延期となりました。
7月中のリリースを目指していた「Movable Type 4.2」につきまして、さらなる品質向上のため、当初予定していた7月中から8月中のリリースに延期をさせていただきます。
ひそかに「Movable Type 4.2 パーフェクトガイド」の発売と同時リリースを期待していたのですが、思い切りフライング出版になってしまいました。これは予想外でした。
そういうわけで、正直なところ、内部処理の改善は大変嬉しいのですが、テンプレートタグの追加やテンプレートの変更、管理画面の大幅な変更がないことを願ってます。
Movable Type 4.2 テンプレートセット
Movable Type 4.2 用のテンプレートセット配布を開始します。

Movable Type 4.2 で追加されたテンプレートセット機能を用いれば、これまでのようにテキストエリアにテンプレートをペーストせずに、簡単に入れ替えることができます。
バージョン 4.1 では、ウィジェットセットがテンプレートセットに未対応でしたが、バージョン 4.2 からウィジェットセットもテンプレートセットに含めることができるようになったため、サイドバーのパーツをウィジェットに移動しました。
1.テンプレートセットのダウンロード
テンプレートセットアーカイブを下記のページからダウンロードしてください。
以下、テンプレートセットの利用方法です。
2.テンプレートセットのインストール
ダウンロードしたテンプレートセットアーカイブを解凍し、中にある plugins 配下にある KoikikukanTemplateSet フォルダを Movable Type の plugins フォルダに丸ごとアップロードしてください。
「システムメニュー」→「プラグイン」でプラグインの一覧が表示されるので、「KoikikukanTemplateSet」が表示されていればインストールOKです。

また、mt-static/plugins フォルダにある KoikikukanTemplateSet フォルダを、スタティックディレクトリ(mt-static)の plugins ディレクトリにアップロードしてください。
3.テンプレートセットの入れ替え
ここではインストールされた状態で入れ替える方法を説明します。
ブログ管理画面より「デザイン」→「テンプレート」をクリック。

右下にある「ブログのテンプレートを初期化」をクリック。

「新しいテンプレートセットを適用」を選択し、セレクトボックスから「小粋空間テンプレートセット」を選択。「既存のテンプレートのバックアップを作成する」をチェックすると、入れ替え前のテンプレートのバックアップがとれます。
選択後、右下の「次へ」をクリック。

「確認」をクリック。これでテンプレートセットの入れ替えが開始します。

「テンプレートの初期化を完了しました。」が表示されれば完了です。

サイトの再構築アイコンをクリック。

「すべてのファイル」を選択して「再構築」をクリック。

「すべてのファイルを再構築しました。 」が表示されたら再構築完了です。

前の画面の「サイトを見る」をクリックするか、ブログ管理画面の「サイト表示」のアイコンをクリック。

当サイトのテンプレートセットのデザインで表示されれば完了です。デフォルトデザインのままであればブラウザをリロードしてください。

不具合がありましたら、本エントリーにご連絡ください。
「Movable Type 4.2 パーフェクトガイド」見本誌到着
「Movable Type 4.2 パーフェクトガイド」の見本誌が到着しました。シンプルなカバーが結構気に入ってます。

オビのキャッチコピー「最強解説」については、最強かどうかは個人差があると思いますので、文言をそのまま受け止める必要はないと思います。ちなみにキャッチコピーは私の要望ではありません(OKはしました)。
この本は、私が知る限りでは、これまでのMT本の中で最もページ数が多いと思います(776ページ)。どのくらいページ数が多いかというのを分かりやすくするために、これまで執筆させて頂いた書籍と並べて比較してみました。

左から順に、「WEBデザインの新しいルール」が264ページ、「CMSとして使うMovable Type」が304ページ、「Movable Type プロフェッショナル・スタイル」が336ページです。
「Movable Type 4.2 パーフェクトガイド」は、見た目は他書の2倍程度ですが、中身をぎゅうぎゅうに詰め込んでいるので、体感的には2.5~3冊分の内容があると思います。そういう意味では、ページ数の都合で値段も通常の本より1000円ほど高めとはいえ、目的が合う方にとってはコストパフォーマンスは良いのではないかと。
![]() | Movable Type 4.2 パーフェクトガイド 荒木 勇次郎 毎日コミュニケーションズ 2008-07-31 売り上げランキング : 56222 Amazonで詳しく見る by G-Tools |
Movable Type 4.2 リリース候補第4版公開
Movable Type 4.2 リリース候補第4版が公開されました。
リリース候補第4版の「コマーシャル版・個人無償版 (プロフェッシュナルパック・コミュニティパック同梱)」では、テンプレートセットにコミュニティブログ・コミュニティ掲示板が標準で選択できます。また、「汎用ウェブサイト」の名称が「プロフェッショナルウェブサイト」に変更されています。

「Template Set Exporter Tool」もリリースされているので、これについては明日エントリーしようと思います。
「Movable Type 4.2 パーフェクトガイド」予約開始
先日校了したMT本の予約が始まりました。
![]() | Movable Type 4.2 パーフェクトガイド 荒木 勇次郎 毎日コミュニケーションズ 2008-07-31 売り上げランキング : 56222 Amazonで詳しく見る by G-Tools |
とりあえず、この本に関する裏話から。
この本のお話を頂いたのは、昨年の後半です。これまでの書籍では、出版社からあ



