Sitemaps 0.90 用テンプレート(MT4対応)
「Sitemaps 0.90 用テンプレート(Google・Yahoo!・MSN サポート予定)」で公開していた Sitemaps 0.90 用テンプレートについて、ご要望を頂きましたので Movable Type 4 対応に修正しました。
Sitemaps 0.90 に対応した情報を公開することで、Google、Yahoo、Microsoft の各検索エンジンにサイト情報を適切に通知できるようになります(検索エンジンのインデックスにウェブページのすべてを含むことを保証するものではありません。クロールを補完するための仕組みです)。
1.テンプレートの変更点
変更点は下記の通りです。
- ウェブページに対応
- 全ての種類のアーカイブテンプレートに対応
- ブログ記事アーカイブの全件出力にMTSetVarBlockタグを使用
- アーカイブインデックス用のMTLinkタグのtemplate属性名を修正
以下、Sitemaps 0.90 用テンプレートの設定方法です。
2.テンプレート作成
ブログ管理画面より「デザイン」→「テンプレート」→「インデックステンプレートを作成」をクリック
- テンプレート名:サイトマップ(名前は何でもいいです)
- テンプレートの種類:カスタムインデックステンプレート
- 出力ファイル名:sitemaps.xml
- 再構築オプション:チェックする
- ファイルへのリンク:(設定不要)
- テンプレートの内容:下記 の内容をコピー&ペースト
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<MTIgnore>メインページ</MTIgnore>
<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<lastmod><$MTDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
<changefreq>daily</changefreq>
</url>
<MTIgnore>ブログ記事アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Individual">
<MTSetVarBlock name="blogentrycount"><$MTBlogEntryCount$></MTSetVarBlock>
<MTEntries lastn="$blogentrycount">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
<priority>1.0</priority>
</url>
</MTEntries>
</MTIfArchiveTypeEnabled>
<MTIgnore>ウェブページ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Page">
<MTPages>
<url>
<loc><$MTPagePermalink encode_xml="1"$></loc>
<lastmod><$MTPageModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
<priority>1.0</priority>
</url>
</MTPages>
</MTIfArchiveTypeEnabled>
<MTIgnore>カテゴリー・アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Category">
<MTCategories>
<url>
<loc><$MTCategoryArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTCategories>
</MTIfArchiveTypeEnabled>
<MTIgnore>ユーザー別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Author">
<MTArchiveList archive_type="Author">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>年別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Yearly">
<MTArchiveList archive_type="Yearly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>月別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Monthly">
<MTArchiveList archive_type="Monthly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>週別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Weekly">
<MTArchiveList archive_type="Weekly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>日別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Daily">
<MTArchiveList archive_type="Daily">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>ユーザー年別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Author-Yearly">
<MTArchiveList archive_type="Author-Yearly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>ユーザー月別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Author-Monthly">
<MTArchiveList archive_type="Author-Monthly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>ユーザー週別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Author-Weekly">
<MTArchiveList archive_type="Author-Weekly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>ユーザー日別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Author-Daily">
<MTArchiveList archive_type="Author-Daily">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>カテゴリ年別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Category-Yearly">
<MTArchiveList archive_type="Category-Yearly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>カテゴリ月別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
<MTArchiveList archive_type="Category-Monthly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>カテゴリ週別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Category-Weekly">
<MTArchiveList archive_type="Category-Weekly">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>カテゴリ日別アーカイブ</MTIgnore>
<MTIfArchiveTypeEnabled archive_type="Category-Daily">
<MTArchiveList archive_type="Category-Daily">
<url>
<loc><$MTArchiveLink encode_xml="1"$></loc>
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
</url>
</MTArchiveList>
</MTIfArchiveTypeEnabled>
<MTIgnore>アーカイブインデックス</MTIgnore>
<url>
<loc><$MTLink template="アーカイブインデックス" encode_xml="1"$></loc>
<lastmod><$MTDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</url>
</urlset>
上記を設定後、保存・再構築します。
これでメインページと同じディレクトリに sitemaps.xml が生成されていればOKです。確認方法は、ブラウザから sitemaps.xml をURL指定して実行してみるか、FTPツールでメインページと同じディレクトリに sitemaps.xml があることを探してください。
3.その他
他のサイトでもサイトマップ用テンプレートは数多く公開されていますが、当サイトでは下記の点を改善しています。
3.1 アーカイブの選択
各アーカイブ(カテゴリー/エントリー/月別/週別/日別等)の表示は、MTIfArchiveTypeEnabled を用いているので、使用中のアーカイブのみを自動的に対象に含めます。
つまりデフォルトテンプレートの運用であれば、サイトマップテンプレートの修正は不要です。
3.2 ファイルの最終更新日
各アーカイブページの更新日時は、下記の設定により、更新順に並べ替えた最新の1件を用いるようにしています。これにより過去のエントリーを修正した場合も、その時刻が反映されます。
Google の説明では、静的ファイルは「ファイルを実際に更新した日付」とありますが、Movable Type の静的ファイル生成、つまり再構築はアーカイブ別に行われるため、MTEntryModifiedDate が適正と思われます(間違ってたらすいません)。これにより、更新されていない URL はクロールしなくなるらしいので、サーバー負荷や CPU 使用量を軽減できます。
<MTEntries lastn="1" sort_by="modified_on">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
下の設定では、該当するアーカイブに属する最新エントリーの更新時刻しか収集されません。つまり、過去のエントリーを修正した時刻が反映されないという欠点があります。
<MTEntries lastn="1">
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</MTEntries>
ただし、インデックステンプレート(メインページ/アーカイブページ)については正確な更新日を取得する手段がないため、MTDate(再構築日時)を利用しています。
3.3 タイムゾーン
タイムゾーンに MTBlogTimeZone を用いています。現地時刻表記の場合は MTBlogTimeZone を用いてタイムゾーン・オフセットを付与するのが適切と思われます。
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
utc 属性を用いれば協定世界時になるので、MTBlogTimezone の代わりに下記の設定でも大丈夫なようです。
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
W3C Datetime によれば、青色部分の「Z」は時刻をUTC (協定世界時) で表記した場合に付与する特別な指定子です。
なお、utc 属性は MTDate / MTEntryDate / MTEntryModifiedDate / MTEntryCreateDate / MTTemplateCreatedOn タグで利用することができます(MT4 公式マニュアルには掲載されていません)。
3.4 優先度
インデクシングして欲しい(と思われる)エントリー・アーカイブに priority を設定し、相対値を少し高くしています。
4.注意事項
Sitemap ファイル(sitemaps.xml)は UTF-8 で保存する必要があります。ブログの文字コードが UTF-8 以外の場合は下記のプラグインを用いて、Sitemaps の文字コードを UTF-8 で出力しましょう。
MT-I18Nプラグインをインストールした後、Sitemaps のテンプレート全体を MTEncodeText タグで括ります。
<MTEncodeText from="[ブログの文字コード]" to="utf8">
:
[Sitemap の内容]
:
</MTEncodeText>
「Movable Type WEBデザインの新しいルール」 販売状況と紹介リンク等
17日に発売された「Movable Type WEBデザインの新しいルール」 の販売状況と関連リンク、および書籍の補足です。
![]() | Movable Type WEBデザインの新しいルール 荒木 勇次郎 松永 英明 翔泳社 2007-10-17 売り上げランキング : 205 Amazonで詳しく見る by G-Tools |
1.販売状況
出版社の方から連絡頂きました。好調な売れ行きで、社内でも評判らしいです。
お買い上げ下さった皆様、ありがとうございます!
Amazon売り上げランキング
私が確認した限りでは205位が最高でした。

Amazon・本のベストセラー(コンピュータ・インターネット)
私が確認した限りでは9位が最高でした。

翔泳社の本ランキング:6位(10/30現在)
MCP教科書等がひしめく中、大健闘(浮いてます)。

cbookランキング:1位(10/15~10/21)
コンピュータ書籍専門ネット書店でも大健闘のようです。

2.紹介リンク
以下、書籍を紹介くださった記事の一覧です。ご紹介くださりありがとうございます。
- Resonanced Sky*:MT4.0初の解説本、今日発売
- Ogawa::Memoranda:Movable Type WEBデザインの新しいルール
- Wing Memo:Movable Type WEBデザインの新しいルール
- Private space ver2.0:Movable Type WEBデザインの新しいルール 到着
- ElectronicBrain is eating BreakFast:初のMT4本、秀逸です!
- どうぷのHarf Time Shuffleな日々:Version Up
- fakelife -kalze's blog-:【レビュー】Movable Type WEBデザインの新しいルール
- lblevery:Movable Typeその後。
- webkun.org:Movable Type WEBデザインの新しいルール
- Sea TrunkRoom:サイト開設に着手しました
- maoneko blog:MT4.0の本を買ってきました。
- Sadoru.log:Movable Typeお勉強中: Movable Type WEBデザインの新しいルール
- Rikolog:MT4に悪戦苦闘。
- 書評箋:Movable Type WEBデザインの新しいルール 荒木 勇次郎 , 松永 英明
3.補足
Amazon のカスタマーレビューで、PHP化がうまくできなかった方の評価で、
肝心のところでphpに関するサーバー側設定についてはソースを数行掲載するばかりで(しかもそれは決して汎用性のあるものではない)、「ここはサーバーによって異なるので各自調べるように」といった感じで放り投げまったく解説しないありさま。ある特定の1つのレンタルサーバーでいいから、設定手順などが解説してあれば、多くの読者はそこから類推して自分のケースに置き換えるなどできるはずだが、それさえない。
とありました。
「ソースを数行掲載」は、おそらく mt-config.cgi のパーミッション変更設定のことを指されていると思いますが、設定は「さくらインターネット(スタンダード・プレミアム)」を例に解説しています(サーバ名の記載は抜けておりましたので反省)。
mt-config.cgi の設定項目の説明はページの制約上掲載できなかったため、結果的に一例しか掲載できませんでした(原稿は書いたのですが編集の段階で割愛)。これについてはいずれ解説したいと思います。
念のため、PHP化の説明は、この方がおっしゃっているようなソース数行(+各自調べる)だけではなく、拡張子の変更方法やXML宣言の変更、html ファイルの削除、うまく動作しなかった場合の対処方法等、4ページにわたって解説しています。
それから、
「急いで作ったので、こうなって(深く掘り下げずに省略を多くして)しまった」と いう感じが本のあちこちで見えたので~
というくだりについても、印象や感想は主観的なので仕方ないのですが、「急いで作った」ということは決してありません。
Amazon 上ではこのような応答ができないため、代わりにここに掲載させて頂きました。
他のルートでも「PHP化がうまくできません」という質問を頂いてまして、PHP化の記述は基本的な記述にとどめていたのですが、意外に反響があったのかもしれません。
いずれにしても、売り逃げするつもりは毛頭ありません。ご不明な点は出版社への質問や、本ブログのコメント等でできるだけ解消していきたいと思います。
またサンプルデータのダウンロードサイトはサポートも兼ねてますので、そちらでも情報を展開していきたいと思います。
Web Site Expert #14
「Web Site Expert #14」には、個人的に読んでみたい記事が目白押しです。
![]() | Web Site Expert #14 WebSite Expert編集部 技術評論社 2007-09-27 売り上げランキング : 5424 Amazonで詳しく見る by G-Tools |
目玉は「まだ間に合う、いまから始めるSEO」という特集で、誌面の70ページほどを割いてSEOに関する記事が掲載されています。
- 1章:SEOを始める前に読んでいただきたい12のポイント
- 2章:検索エンジンと仲良しになる6つのポイント
- 3章:意外に知らない「リンク」の常識・非常識
- 4章:ケーススタディ『きのとやオンライン』の場合
- 5章:キーワード有効度調査からのサイト設計
- 6章:CMSで実現するSEO対策
- 7章:ユーザ生成型コンテンツによるSEO戦略
- 8章:モバイル検索エンジンの最新動向とモバイルSEOのコツ
- 9章:FlashでのSEOは可能なのか?
SEOに関する技術や最新の動向を知ることができるでしょう。
また、「先取り、Twitter使いへの道 A to Z」というタイトルでは、Twitter に関する基本から応用、各種ツール・サービスの紹介、アンケート等、20ページの特集が組まれています。
Twitter って何?のビギナーからTwitter にハマっている方まで楽しめる内容です。
そして本誌には、先日講師を務めさせて頂いた「WebSig 24/7」の紹介および、先日行われた「第14回WebSig会議『Movable Type 4 のポテンシャルを探る』」のイベントレポートが掲載されています。
イベントレポートは「世界中の1%の人々へ」の蒲生さんが執筆を担当されています。
水道料金
最近の大ボケネタをひとつ。
今年4月に引っ越した時、電気やガス等の公共料金の支払いは、銀行からの自動引き落としの手続きを行ったのですが、水道料金(上水道・下水道)だけは手続きし損ねて、請求書が来るたびに振り込んでました。
ただ、こういう振込み作業がどうも苦手で、間際になって払い込んだり、期日を過ぎてから支払うといった事が、繰り返し続いてました。
そうしているうちに、最近、水道局(上水道)から一通のハガキがきました。いつも来るハガキよりものものしい印象です。

中を見ると、水道停止の通知でした。どうも一か月分だけ振込みもれがあったようで、慌ててハガキを探して銀行に振込みにいきました(コンビニでは期限切れの分は取り扱ってくれず)。
水道は、電気やガスに比べて生活に重要なものなので、停止させられる時期が一番遅いはずなのですが…。

支払いが終わって一安心、と思ったら、今度は下水道から何か通知が来ました。

「こっちも払い忘れか…」と思って中を見ると、

こちらはある月の分を重複してお金を振り込んでしまったようです。
ダメダメですね…(-"-;)
リスクの大きい
MTIf タグの like 属性について
MTIf タグ(MTUnless タグ)の like 属性について、利用方法を紹介します。
この内容は、先日行われた「WebSig24/7 MT4分科会 第1回イベント『WebSig24/7 2007年秋 MT4の日』」で頂いたご質問、
- like 属性に or 演算子のようなものは使えますか?
- like 属性を使って、title 要素に表示するデータを収集したいのですが?
の回答です。ご返事が遅くなりましたこと、この場をお借りしてお詫びいたします。
1.like 属性の機能
MTSetVar タグに設定された変数、または MTSetVarBlock, MTSetVarTemplate ブロックタグの変数値が、like 属性に記述された文字列とマッチする場合に実行します。
また、属性値には perl の正規表現を使うことができます(厳密には、属性値は正規表現としてしか扱われません)。
2.ソースコード
lib/MT/Template/ContextHandlers.pm の MTIf タグ(MTUnless タグ)の like 属性の処理は下の青色部分です。
sub _hdlr_if {
my ($ctx, $args, $cond) = @_;
my $var = $args->{name} || $args->{var};
my $value = $ctx->var($var);
:
} elsif (exists $args->{like}) {
my $re = eval { qr/$args->{like}/ };
return defined($value) && ($value =~ m/$re/) ? 1 : 0;
}
:
}
$args->{like} には like の内容が設定されており、内容が存在すれば変数 $re に代入します。この時、「qr// 演算子」を用いて、like の内容を正規表現として代入しています。
その後、m// 演算子を用いて、$value(事前に取得されたもの)とのパターンマッチの結果(1 または 0)を返却します。
3.サンプル1
MTSetVar タグで、変数 hoge の値に "foo" を設定しています。
MTIf タグでは hoge に "f" が含まれていたらブロック内を実行します。この場合は含まれているので、ブロック内の MTGetVar を実行します。
<$mt:setvar name="hoge" value="foo"$>
<mt:if name="hoge" like="f">
<$mt:getvar name="hoge"$>
</mt:if>
Perl で書くと、多分下記のようになります。
my $hoge = 'foo';
if ($hoge =~ m/f/) {
print $hoge;
}
4.サンプル2
MTSetVar タグで、変数 hoge の値に "foo" を設定しています。
MTIf タグでは hoge に "foo" または "var" が含まれていたらブロック内を実行します。この場合は含まれているので、ブロック内の MTGetVar を実行します。
<$mt:setvar name="hoge" value="foo"$>
<mt:if name="hoge" like="foo|var">
<$mt:getvar name="hoge"$>
</mt:if>
Perl で書くと、多分下記のようになります。
my $hoge = 'foo';
if ($hoge =~ m/foo|var/) {
print $hoge;
}
4.サンプル3
ブログ記事リストのタイトルに "foo" または "var" が含まれているものだけを表示します。
<MTEntries>
<mt:setvarblock name="entrytitle"><$MTEntryTitle$></mt:setvarblock>
<mt:if name="entrytitle" like="foo|var">
<$mt:getvar name="entrytitle"$>
</mt:if>
</MTEntries>
Perl で書くと、多分下記のようになります。
for my $entrytitle (@entries) {
if ($entrytitle =~ m/foo|var/) {
print $entrytitle;
}
}
冒頭の2つめのご質問に適用する場合、このブロック全体を tilte 要素で括れば、ある程度期待する表示にできると思います。質問の解釈が誤ってましたら再度ご連絡ください。
5.参考
コメント投稿フォームをデフォルトで表示する&「匿名でコメントすることもできます。」の文言を修正する
Movable Type 4 のコメント投稿フォームの表示方法と、「匿名でコメントすることもできます。」の文言を変更するカスタマイズを紹介します。
1.コメント投稿フォームの違い
コメント投稿フォームの表示は、ブログ管理画面の「設定」→「ブログの設定」→「登録/認証」の「認証方式」(下)のチェック状態によりいくつかのパターンがあります。

1.1 認証方式で「認証なしコメント」のみ選択している場合
コメント投稿フォームはデフォルトで表示されます。

1.2 認証方式で「認証なしコメント」以外を選択している場合
コメント投稿フォームはデフォルトで非表示となります。

サインインすることでコメント投稿フォームが表示されます。認証されたので、「名前」および「電子メール」入力フィールドは表示されません。

1.3 認証方式で「認証なしコメント」と任意の認証方式を選択している場合
コメント投稿フォームはデフォルトで非表示となります。

サインインすることでコメント投稿フォームが表示されます。認証されたので、「名前」および「電子メール」入力フィールドは表示されません。

または「匿名でコメントすることもできます。」のリンクをクリックすればコメント投稿フォームが表示されます。

2.「匿名でコメントすることもできます。」の文言を修正する
「認証方式」の選択状態が1.3項の場合、コメント投稿フォームに「匿名でコメントすることもできます。」のリンクが表示されます。
たしかに名前欄を未記入で投稿することはできますが、このリンクの文言は、厳密には「認証なしでコメントすることもできます。」が正しいように思われます(その後で、さらに匿名投稿の選択の余地がある)。
ということで、この文言の変更方法です。
ブログ管理画面の「デザイン」→「テンプレート」で「インデックステンプレート」の一覧を表示し、テンプレート名の「JavaScript」をクリックします。
その中に
document.write('<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=login&entry_id=' + entry_id + '&blog_id=' + blog_id + '&static=1">サインイン' + '</a>' + 'してからコメントしてください。 <a href="javascript:void(0);" onclick="showAnonymousForm();">匿名でコメントすることもできます。</a>');
という行がありますので、赤色部分を「認証なしでコメントすることもできます。」等に書き換えて、「保存と再構築」をクリックします。
修正後、下記のようになります。

3.コメントフォームを常に表示する
「認証方式」の選択状態が1.3項の場合でコメントフォームを常に表示するには、ブログ管理画面の「デザイン」→「テンプレート」で「インデックステンプレート」の一覧を表示し、テンプレート名の「JavaScript」をクリックします。
その中にある
function individualArchivesOnLoad(commenter_name) {
<MTIfCommentsAccepted>
<MTElse>
hideDocumentElement('comments-open');
</MTIfCommentsAccepted>
<MTIfPingsAccepted>
<MTElse>
hideDocumentElement('trackbacks-info');
</MTIfPingsAccepted>
<MTIfRegistrationAllowed>
<MTIfRegistrationRequired>
if ( commenter_name &&
( !commenter_id
|| commenter_blog_ids.indexOf("'<$MTBlogID$>'") > -1))
{
hideDocumentElement('comment-form-name');
hideDocumentElement('comment-form-email');
showDocumentElement('comments-open-text');
showDocumentElement('comments-open-footer');
} else {
hideDocumentElement('comments-open-data');
hideDocumentElement('comments-open-text');
hideDocumentElement('comments-open-footer');
}
<MTElse>
// comments are allowed but registration not required
if ( commenter_name &&
( !commenter_id
|| commenter_blog_ids.indexOf("'<$MTBlogID$>'") > -1))
{
hideDocumentElement('comment-form-name');
hideDocumentElement('comment-form-email');
} else if (is_preview) {
delayShowCaptcha();
} else {
hideDocumentElement('comments-form');
}
</MTIfRegistrationRequired>
</MTIfRegistrationAllowed>
の赤色部分を、下記のように行頭に "//" を付与して、コメントアウトします。
} else {
// hideDocumentElement('comments-form');
}
CAPTCHA 認証を用いてる場合は、さらに CAPTCHA フィールド表示用の行を追加します。
} else {
captcha_timer = setInterval('delayShowCaptcha()', 1000);
// hideDocumentElement('comments-form');
}
上記の修正にあわせて、2項で示したテンプレートの「匿名でコメントすることもできます。」のリンク(下記の赤色部分)を削除、または(X)HTMLコメントアウトします。
document.write('<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=login&entry_id=' + entry_id + '&blog_id=' + blog_id + '&static=1">サインイン' + '</a>' + 'してからコメントしてください。 <a href="javascript:void(0);" onclick="showAnonymousForm();">匿名でコメントすることもできます。</a>');
修正後、「保存と再構築」をクリックすれば、コメント投稿フォームは下記のようになります。

投稿フォームが表示されているのに、「サインインしてからコメントしてください。」という文言に違和感を感じる場合は、下記の赤色部分を変更すると良いでしょう。
document.write('<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=login&entry_id=' + entry_id + '&blog_id=' + blog_id + '&static=1">サインイン' + '</a>' + 'してからコメントしてください。 <a href="javascript:void(0);" onclick="showAnonymousForm();">匿名でコメントすることもできます。</a>');
なお、コメントに「認証なしコメント」を適用する場合は、スパムを避けるため、CAPTCHA 機能を併用することをお勧めします。
2008.02.03
CAPTCHA 認証フィールドが表示されない不具合を修正しました。
検索機能復活のお知らせ
サーバ移転以降、右サイドバーにあるサイト内検索が機能していませんでした(検索文字列にマッチするエントリーが全く表示されない)が、本日解決致しました。
ご利用の皆様にはご迷惑おかけ致しました。
また、検索結果画面がデフォルトテンプレートでの表示でしたが、テンプレートを修正してサイトデザインを統一しました。
検索結果が表示されなかった原因は、MT3 で利用していたプラグイン mt-xsearch.pl が有効になっていたためです。これを無効にすることで解決しました。
MT3 で運用していた元サーバから plugins 配下のファイルを丸ごとコピーして、そのままにしていたのがまずかったようです。
今回は検索機能だけでしたが、管理画面系の動作で異常が発生した場合は、全てのプラグインを無効(無効にできない場合は plugins 配下のファイルのバックアップをとってから一旦削除)にして、問題箇所を切り分けると良いでしょう。
Google や Yahoo 検索も併設した方がいいかもと思いました。
サイドバーに Google Adsense を貼り付ける
当サイト配布のテンプレートのサイドバーに Google Adsense(160ピクセル幅)等のバナー広告を設置する方法です。
![]()
ワイドスカイスクレイパー(160×600)をデフォルト状態のまま設置すると、右サイドバーが中央カラム(あるいは左サイドバー)の下に回りこむ、いわゆるレイアウト崩れが発生します(下)。
![]()
これはサイドバーの表示幅に、それを超える画像やバナー類を設置しているためで、CSS の float プロパティの性質上、レイアウトが崩れます。
以下、テンプレートの修正方法です。ご利用のテンプレートによって表示内容が若干異なりますが、基本構造は同じです。
1.サイドバーの幅を修正
サイドバーの全体幅はデフォルトで 185px に設定していますが、左右余白分の 30px(15px × 2) が含まれているので、実際の表示領域幅はデフォルトで 155px となります。したがって、160px 幅のバナー類を設置するためには全体幅を 190px に変更する必要があります。
レイアウトによって変更箇所が異なるので、以下の説明にしたがって該当箇所を修正してください。
1.1 3カラム固定レイアウト
3カラム固定レイアウトの場合、下記のセレクタの width プロパティを 185px から 190px に変更します。
.layout-three-column #links-left-box,
.layout-three-column #links-right-box {
float: left;
width: 190px;
}
1.2 2カラム固定レイアウト(右サイドバー)
2カラム固定レイアウト(右サイドバー)の場合、下記のセレクタの width プロパティを 185px から 190px に変更します。
.layout-two-column-right #links-right-box {
float: left;
width: 190px;
}
1.3 2カラム固定レイアウト(左サイドバー)
2カラム固定レイアウト(左サイドバー)の場合、下記のセレクタの width プロパティを 185px から 190px に変更します。
.layout-two-column-left #links-left-box {
float: left;
width: 190px;
}
2.全体のカラム幅を修正
サイドバーのカラム幅が合計10px(2カラムの場合は 5px) 増加した分、全体の横幅を広げます。
逆に、中央カラムの幅を狭くする方法もありますが、ここでは割愛しています。
2.1 3カラム固定レイアウト
3カラム固定レイアウトの場合、下記のセレクタの width プロパティを 850px から 860px に変更します。
/* 3カラム固定レイアウト幅 */
.layout-three-column #box {
width: 860px;
}
2.2 2カラム固定レイアウト(右サイドバー/左サイドバー)
2カラム固定レイアウト(右サイドバー/左サイドバー)の場合、下記のセレクタの width プロパティを 665px から 670px に変更します。
/* 2カラム固定レイアウト幅 */
.layout-two-column-left #box,
.layout-two-column-right #box {
width: 670px;
}
ここまでの修正でカラム崩れは発生しなくなります。
3.フッタ幅の修正
2項にあわせてフッタ幅も併せて修正してください(過去の配布テンプレートにはこの設定はありません。ない場合はスキップしてください)。
3.1 3カラム固定レイアウトの場合
3カラム固定レイアウトの場合、下記のセレクタの width プロパティを 850px から 860px に変更します。
.layout-three-column #footer {
width: 860px;
}
3.2 2カラム固定レイアウト(右サイドバー/左サイドバー)
2カラム固定レイアウト(右サイドバー/左サイドバー)の場合、下記のセレクタの width プロパティを 665px から 670px に変更します。
.layout-two-column-left #footer,
.layout-two-column-right #footer {
width: 670px;
}
4.広告表示位置の微調整
広告表示用の script 要素を dd 要素(青色)で括り、必要に応じて縦方向のマージンを調整します。
<dd class="adsense">
<script ~></script>
</dd>
スタイルシート(メイン)に下記の設定を追加します。サンプルは下マージンを 10px 設定しています(表示位置によって適宜修正してください)。
dd.adsense {
margin: 0 0 10px;
}
MTSetVarBlock と MTSetVarTemplate の違いについて
Category:[テンプレートタグ]
Tag:[MovableType, MTSetVarBlock, MTSetVarTemplate]
Permalink
Movable Type 4 では、MTSetVar タグや MTSetVarBlock タグを用いた制御が数多く行われています。 本エントリーでは、新たに追加された MTSetVarTemplate タグについて解説します。
1.MTSetVarTemplate タグの機能
MTSetVarTemplate タグで囲まれた内容を、変数として値を設定します。
<MTSetVarTemplate name="foo">
<!-- do something -->
</MTSetVarTemplate>
なお、MTSetVarTemplate タグは、ドキュメントによれば MT 管理画面での使用が目的らしいので、ユーザのテンプレートで用いる可能性は低いかもしれません。
2.MTSetVarBlock タグとの違い
MTSetVarBlock タグは、ブロック内の内容が処理された結果を値として取得しますが、MTSetVarTemplate タグは、ブロックの内容が MTGetVar、あるいは MTVar タグで呼び出された時点ではじめて評価されます。
3.サンプル
ここでは MTIncludeタグ・MTGetVar タグと組み合わせた、MTSetVarBlock タグと MTSetVarTemplate タグの振舞いの違いを示したいと思います。
3.1 MTSetVarBlock + MTInclude + MTGetVar(OK)
MTSetVarTemplate タグは用いず、アーカイブテンプレートの MTInclude タグが実行された時点で MTEntries 全体が評価されるサンプルです。
アーカイブテンプレート
<$MTInclude module="test"$>
<$MTGetVar name="entries"$>
テンプレートモジュール(test)
<MTSetVarBlock name="entries">
<MTEntries>
<$MTEntryTitle$>
</MTEntries>
</MTSetVarBlock>
3.2 MTSetVarBlock + MTInclude + MTGetVar(NG)
アーカイブテンプレートの MTInclude で MTEntryTitle が評価されますが、評価時点では MTEntryTitle が MTEntries コンテキスト外のため、再構築エラーとなるサンプルです。
アーカイブテンプレート
<$MTInclude module="test"$>
<MTEntries>
<$MTGetVar name="entries"$>
</MTEntries>
テンプレートモジュール(test)
<MTSetVarBlock name="entries">
<$MTEntryTitle$>
</MTSetVarBlock>
3.3 MTSetVarTemplate + MTInclude + MTGetVar(OK)
3.2項の MTSetVarBlock タグを MTSetVarTemplate タグに置き換えることで、アーカイブのMTInclude 時点でMTEntryTitleは評価されず、MTGetVar(=MTEntires ブロック内)で評価されるので、期待通りの動作になります。
アーカイブテンプレート
<$MTInclude module="test"$>
<MTEntries>
<$MTGetVar name="entries"$>
</MTEntries>
テンプレートモジュール(test)
<MTSetVarTemplate name="entries">
<$MTEntryTitle$>
</MTSetVarTemplate>
4.参考:MT4 のデフォルトテンプレート
3項でサンプルをいくつか比較しましたが、実際には、デフォルトテンプレートの MTEntries 関連のタグデザインは下記の通りです。
MTGetVar は用いず、アーカイブテンプレートの MTEntries ブロックに直接 MTInclude が記述され、MTEntryTitleが評価されます。
アーカイブテンプレート
<MTEntries>
<$MTInclude module="test"$>
</MTEntries>
テンプレートモジュール(test)
<$MTEntryTitle$>
5.まとめ
MTSetVarTemplate を用いるケースとして、下記が考えられます。
- テンプレートモジュールをひとつにまとめたい
- ブロックタグとファンクションタグのテンプレートを分離したい
- ファンクションタグのテンプレートモジュールに、複数のバリエーションをもたせる(MTGetVar で振り分ける)
管理画面テンプレートは調査していないので、実際にはもう少し適正な使用方法があるかもしれません。
FeedBurner 動画広告テスト配信
FeedBurner 社より依頼を受けまして、動画広告テスト配信を開始致しました。
現在、トップページの最新記事下に表示されている「eyeVio」がそうです。
配信スケジュールは、まつゆうさん出演の eyeVioTV が10月末までとなっています。「eyeVio」はソニーが運営している動画配信サービス(下)で、無料会員登録すれば動画のアップロード・ダウンロードや友達とのシェア等ができます。
「Sony版YouTube」といった感じでしょうか。
出かける前に慌てて表示用タグを設定したのですが、マークアップを誤ってしまい、そのため今日1日、トップページの表示が崩れてしまってました。お見苦しい状態が続いてしまい申し訳ありませんでした。
ブログ記事の画像挿入時に表示位置を指定しないプラグイン
ブログ記事の投稿で、記事内に画像ファイル等を挿入する場合、ファイルの表示位置を指定しないオプションがありません(下)。

このプラグインでは表示位置を指定しないラジオボタンを追加します。

このプラグインは、crema さんの記事を元に作成したものです。
が、やや先に Junnama さんがよりリッチなプラグインを投稿されていました。
私の作成したプラグインは簡素なので、style 属性が設定されなくなるだけです。class 属性の設定は残ります。
1.プラグインのダウンロード
下記のリンクより、プラグイン InsertAssetWithoutStyle をダウンロードしてください。
2.プラグインのアップロード
アーカイブを解凍し、解凍した内容を plugins ディレクトリおよびスタティックディレクトリに、それぞれ下記のように配置してください。
mt-static/
plugins/
InsertAssetWithoutStyle/
images/
align_none.gif
styles/
app.css
plugins/
InsertAssetWithoutStyle.pl
システムメニュー→プラグインで「InsertAssetWithoutStyle 0.0x」が表示されていればOKです。

3.利用方法
画像の表示位置を指定したくない場合、冒頭のスクリーンショットのように、位置欄より「なし」を選択します。「設定を記憶」をチェックすれば選択状態を保存することができます。
AMN(アジャイルメディア・ネットワーク)に参加しました
右サイドバーに表示されているバナーですでにお気づきの方も多いと思いますが、今月より AMN (アジャイルメディア・ネットワーク)に、推薦により参加させて頂くことになりました。
ちなみに、本エントリー投稿時点(10月19日1時頃)、参加ブロガー一覧に当ブログは掲載されていませんが、インチキではありません。
AMN関連でブログ上に表示されるのは、ヘッダのラージバナー(728x90)とサイドバーの「ブログ・オン・ブログ広告(BonB広告)」の2つで、今のところ「BonB広告」のみ表示しています(いずれラージバナーも掲載させて頂くかもしれません)。
BonB広告の下には、パートナーブログの最新記事がランダムに掲載されるようになっています。
当サイトのダジャレが表示される日も遠くないでしょう(笑)。
サイトマップを作る for Movable Type 4
Movable Type 4 で新しく追加されたフォルダとウェブページを使って、ウェブサイト内の構成を俯瞰する、いわゆる「サイトマップ」を作成する方法を紹介します。
上のサイトマップのサンプルは、「フォルダx」がフォルダ名、「ウェブページx」がフォルダ配下に配置されたウェブページを示しています。フォルダの下にあるサブフォルダおよびウェブページは階層化表示されます。
下のタグをテンプレートの任意の位置に貼り付ければ上記のようなサイトマップが表示されます。
フォルダ名は「フォルダのパス」ではなく「フォルダの名前」を表示するようにしています。
<MTTopLevelFolders>
<MTSubCatIsFirst>
<ul>
</MTSubCatIsFirst>
<MTIfNonZero tag="MTFolderCount">
<li><$MTFolderLabel$>
<ul>
<MTPages>
<li><a href="<$MTPagePermalink$>" title="<$MTPageTitle$>"><$MTPageTitle$></a></li>
</MTPages>
</ul>
</MTIfNonZero>
<MTSubFolderRecurse>
</li>
<MTSubCatIsLast>
</ul>
</MTSubCatIsLast>
</MTTopLevelFolders>
フォルダ関連タグはサブカテゴリー関連タグと同じなので、サブカテゴリー関連タグが理解できていれば比較的簡単に扱えるでしょう。
なお、フォルダにはMTSubCatIsFirst/MTSubCatIsLastに対応するタグがないため、サブカテゴリー用のタグで代用しています。
「Movable Type WEBデザインの新しいルール」発売
「Movable Type WEBデザインの新しいルール」がいよいよ発売になります。
![]() | Movable Type WEBデザインの新しいルール 荒木 勇次郎 松永 英明 翔泳社 2007-10-17 売り上げランキング : 205 Amazonで詳しく見る by G-Tools |
「16日発売」と聞いていたので、閉店間際に某書店に行ってみたのですが、これから販売の準備をするようでした(下)。誤った情報を流してしまったこと、お詫び申しあげます。

書籍の内容は次の通りです。
- Chapter 01 | MovableType でできること
- 1-1 効果的・効率的にWeb サイトを運営するために有用なCMS
- 1-2 CMS として使えるブログツールMovableType
- 1-3 ブログツールでブログらしくないWeb サイトを作るメリット
- 1-4 複数ブログを組み合わせた企業サイト運営というアイデア
- 1-5 Movable Type を使ったWeb サイトの紹介
- Chapter 02 |はじめてのMovableType
- 2-1 Movable Type をはじめる際に準備すべきもの
- 2-2 インストールの概要
- 2-3 Movable Type4 をダウンロードする
- 2-4 Movable Type のディレクトリ構成
- 2-5 サーバへのアップロードとパーミッションの変更
- 2-6 Movable Type をインストールする
- 2-7 ブログ記事を投稿・編集する①
- 2-8 ブログ記事を投稿・編集する②
- 2-9 ウェブページを作成する
- 2-10 ファイルをアップロードする
- 2-11 カテゴリを管理する
- 2-12 タグを管理する
- 2-13 アイテムを管理する
- 2-14 フォルダを管理する
- 2-15 Movable Type の詳細設定①
- 2-16 Movable Type の詳細設定②
- 2-17 ファイルをPHP 化する
- 2-18 ダイナミック・パブリッシングの概要
- 2-19 ダイナミック・パブリッシングを設定する
- Chapter 03 |サイトの見た目を変えてみよう
- 3-1 テンプレートとは何か
- 3-2 テンプレートを編集する
- 3-3 Movable Type のテンプレート構成
- 3-4 テンプレートを入れ替えてデザインを変更する
- 3-5 テンプレート・タグの基礎知識
- 3-6 テンプレート・タグのカスタマイズ
- 3-7 CSS(スタイルシート)の基礎知識
- 3-8 CSS プロパティ一覧
- 3-9 CSS を変更し、テンプレートのデザインを変える
- 3-10 背景画像を利用する
- 3-11 カラムレイアウトを変更する
- 3-12 カラムサイズを変更する
- 3-13 サイドバーの情報をフッタメニューに追加する
- Chapter 04 |サイトの構成とMT の設定
- 4-1 Web サイトの構造を設計する
- 4-2 ウェブページを使ってカタログ型サイトを作成する
- 4-3 ブログ記事の保存先を変更してカタログ型サイトを作成する
- 4-4 必要のないテンプレートタグを削除する
- 4-5 他のブログツールとMovable Type を組み合わせて使用する
- Chapter 05 |効果的なサイトへのカスタマイズ
- 5-1 グローバルナビゲーションでページを切り替える
- 5-2 パンくずリストを表示する
- 5-3 コメントリスト・トラックバックリストをブログ記事ごとにツリー表示する
- 5-4 Feed アイコン・バナーリンクを追加する
- 5-5 カテゴリーリストにエントリーを表示する
- 5-6 ブログ記事に同一カテゴリーのブログ記事リストを表示する
- 5-7 ソーシャルブックマークリンクを追加する
- 5-8 タグによる効果的なカスタマイズ
- 5-9 メールフォームを設置する
- 5-10 SEO 対策とMovable Type
- 5-11 サイトマップを作り、Google ウェブマスターツールに登録する
- 5-12 更新PING を送り、アクセスを集めやすくする
- 5-13 アクセス解析ツールを設置する
- 5-14 他のブログの更新情報を自動的に掲載する
- 5-15 Web サイト引っ越しの場合の告知方法
- Chapter 06 |効率的なブログの管理
- 6-1 PHP モジュール化とAjax モジュール化
- 6-2 コメント・トラックバックの管理
- 6-3 アーカイブマッピングとアーカイブテンプレートの作成
- 6-4 スケジュール・タスクを設定する
- 6-5 管理系フィードを利用する
- 6-6 フィードウィジェットでフィードをブログに表示する
- 6-7 複数ブログの作成・管理とブログの複製
- 6-8 ポータル・ブログを構築する
- 6-9 複数ユーザーを管理する
- 6-10 ブログデータのインポート・エクスポート
- 6-11 ブログのバックアップと復元
- 6-12 Movable Type のアップグレード
-
- Movable Type テンプレート・タグ・リファレンス
私が執筆を担当させて頂いたのは、Chapter 02 の2-2~2-19、Chapter 03、Chapter 05の5-1~5-9、Chapter 06、Movable Type テンプレート・タグ・リファレンス、です。
先日講師を担当させて頂いた「WebSig24/7 MT4分科会 第1回イベント」では、MTIf と MTSetVar による条件分岐が話題になりましたが、その技も入っています。
例えば「5-2 パンくずリストを表示する」では、これまで PHP で制御していたパンくずリストを、MT タグだけで各アーカイブに対応させています。
また、本書でMTのブログ別管理画面で触れていない項目は、「デザイン」→「スタイル」と「デザイン」→「ウィジェットセット」「設定」→「アドレス帳」の3つだけだと思います。これらを除いた他のほぼ全ての操作について網羅しています(多分)。
なおシステムメニューについては一部端折ってますので予めご了承ください。
サーバ移転メモ & Movable Type 4.01 バージョンアップ
レンタルサーバを「さくらインターネット」から「coreserver」に移転しました。
DNSを変更したのは10月14日(日)の夜です。
このエントリーは新サーバ側のみに投稿していますので、このエントリーが表示されていれば新サーバ側のブログになっています。
また、Movable Type は新サーバに新規インストール致しまして、現在のバージョンは 4.01 になっています。
以下、簡単なサーバ移転メモです。概ね時系列に並べていますので、参考になれば幸いです。
旧サーバのMTのバージョンは 3.21-ja です。
- 旧サーバ側の作業(MT3.21-ja)
-
- コメント・トラックバックのCGI停止
- コメントに連続したハイフンを検索機能で検索し、実体参照(または"=")に変更
- 異なるカテゴリー配下の同名のカテゴリーがインポート時に合成されないよう、名称変更
- データのエクスポート
- 画像ファイル・プラグインファイル・サンプルデータ・ダウンロードファイル等をFTPでローカルPCにダウンロード
- 新サーバ側の作業(MT4.01-ja)
-
- MT4.01のインストール、CGIのパーミッション変更
- coreserverドメインで試験エントリー等の表示確認
- 画像ファイル・プラグインファイル・サンプルデータ・ダウンロードファイル等をFTPでアップロード
- データのインポート →実際にはサイズが大きすぎて正常に読み込めなかったので、分割して読み込み。その際改行文字コードをLFにすること(誤ってCRLFで保存してしまったファイルは全く読み込まれず)
- 旧サーバのテンプレートを全てコピー(急いでいたのでデフォルトの構成は利用していません)
- mt-site.js のインクルードを mt.js に変更
- コメント・トラックバックの設定を、旧サーバの設定と同じ内容に変更(TypeKeyは後)
- お試し再構築。MT4に対応していない拡張テンプレートタグの削除
- 確認用に設定していた「サイトURL」をcoreserverドメインから正規のドメイン(http://www.koikikukan.com/)に変更して、再度再構築(これ以降はDNSが反映されるまで新サーバ側のブログは参照できなくなる)
- DNS設定変更:1日程度で新サーバのアドレス反映。
- 新サーバ側の作業(DNS変更後)
- PHPエラー等、表示の不具合を何箇所か修正
- 更新PING設定、TypeKey設定
- コメントテンプレートのフォーム修正
- システムテンプレート(コメントプレビュー・コメントエラー・検索結果画面)入れ替え(未)
- 検索機能確認(未)
- タグ検索機能確認(未)
- スケジュールタスク実行(未)
- サブカテゴリーの再編成(未)
- 自作CGIの動作確認(未)
表示の不具合やデッドリンク等、何かありましたらご連絡ください。
また、PHPは以前のCGI版からモジュール版で動作するように変更されておりますので、表示に関して「軽くなった」「重くなった」という感想もお待ちしています。
Movable Type 3 から Movable Type 4 のアップグレードにおける注意事項
Movable Type 3 から Movable Type 4 のアップグレードでは、注意すべき点がいくつかあります。本エントリーで現在分かっている項目をまとめてみましたので、参考になれば幸いです。
1.JavaScript(mt.js) 作成
MT4 ではコメントフォーム制御用の mt.js というインデックステンプレートが必要になりますが、アップグレードではこのテンプレートが生成されないようです。
対策として、下記の手順で mt.js を取得してください。
1.1 インデックステンプレートを作成
- 名前:JavaScript
- テンプレートの種類:JavaScript (javascript)
- 出力ファイル名:mt.js
- 再構築オプション:チェック
- 内容:空のまま
で保存。
1.2 テンプレートの初期化
Template Backup and Refresh プラグインを使って、作成した JavaScript テンプレートを初期化します。これで mt.js のコードを取得することができます。
2.コメントフォーム
MT3 のコメントフォームでは、認証機能や CAPTCHA 等、MT4 の全ての機能を利用することができません。また1項で作成した JavaScript を利用するためにも、下記のエントリーを参考に、MT4 用の変更を行ってください。
3.プラグイン
アップグレードで MT4 に対応していないプラグインを利用していると、再構築でエラーになる可能性があります。
拡張タグのプラグインは、無効である旨のエラーメッセージが表示されると思いますので、
- エラーとなるテンプレートタグをテンプレートから外す
- プラグインを MT4 対応のものにアップグレードする
といった対処を行ってください。
4.システムテンプレート
システムテンプレートはアップグレード対象にならないようです。
ということで、元ブログのテンプレートを手動でコピーしてください。なお、コメント完了テンプレートについては MT3 と制御が異なっているので、そのまま使うことはできないと思われます(これについては別途エントリーしま
す)。
5.「認証なしコメント」を受け付ける
アップグレードによる管理情報の引継ぎ状況は未確認ですが、ちょっと分かりにくいのがコメント受信設定です。
認証なしコメントを受け付ける設定は管理画面の「設定」→「コメント」ではなく、「設定」→「登録 / 認証」にあります。
6.インポート・エクスポート機能を利用したデータ引継ぎ
6.1 タグ・出力ファイル名
インポート・エクスポート機能を利用したブログ記事のデータ引継ぎでは、タグや出力ファイル名の情報が引き継がれません。
これを引き継ぐためには、MT3 側のインデックステンプレートにエクスポートデータを作成するためのテンプレートを作り、これによって生成されたデータを MT4 のブログにインポートすると良いでしょう。
- JunnamaOnline (Mirror):MT3→MT4へタグやbasenameを引き継いで(インポート&エクスポートで)簡単に移行する方法。
- Movable Type のブログ記事インポートフォーマット(一番最後にテンプレートが掲載されています)
6.2 サブカテゴリー
インポート・エクスポート機能を利用したブログ記事のデータ引継ぎでは、サブカテゴリー情報が引き継がれません。
また、親カテゴリーが異なるサブカテゴリーに同名のサブカテゴリーが存在すると、ひとつのカテゴリーとして扱われてしまいます。
たとえば、下記のようなカテゴリー構成の場合、
AAA
└ CCC
BBB
└ CCC
カテゴリー「CCC」はひとつのカテゴリーにまとめられてしまいます。
同名のカテゴリーがまとめられてしまう問題を回避するには、エクスポート前に、重複するサブカテゴリー名のみ、異なるカテゴリー名にしておく必要があります。
6.3 その他
ブログ記事本文に連続したハイフンが含まれていると、適正でないフォーマットのエクスポートデータが生成され、結果的に正常にインポートできない可能性がありますので、MT3→MT4へタグやbasenameを引き継いで(インポート&エクスポートで)簡単に移行する方法。にあるプラグインを利用すると良いでしょう。
なお、エクスポートデータの改行文字が \n(LF) でない場合も正常にインポートできません。生成したエクスポートデータを Windows の任意のエディタで編集する場合、改行文字が \r\n(CR/LF)にならないよう、注意しましょう。
関連記事
「WebSig24/7 MT4分科会 第1回イベント」終了
以前お知らせしていました「WebSig24/7 MT4分科会 第1回イベント」が本日、
無事終了致しました。
講師という立場もそうなのですが、「小粋空間」のサイト管理人として人前に出
るのは、(Movable Type コンテストの授賞式を除いて)これが初めてです。
出だしから講習会会場への到着が遅れる(開始時間には間に合いましたが)と
いった失敗をしでかしてしまい、蒲生さん
始め、スタッフの方にはご心配おかけして申し訳ありませんでした。
Six Apart の上之郷谷さんもお待ちくださっていたようですが、お会いできずに
申し訳ありません(名刺は間接的に受けとりました)。
講義内容は、MT4のテンプレート構造とテンプレートタグについて、ビギナー~
中級者向けに、浅く広くお話させて頂きました。内容の一部については本ブログ
で公開を止めていたものもいくつかありますので、別途部分的にエントリーして
いきたいと思います。
参加された皆さんには積極的に講義に耳を傾けて頂け、後半のワークグループで
私が受け持ったグループでは多くの質問を受け、特にMT4で追加された MTIfタグ
による制御については色々な可能性があることを改めて認識させられました。
また、終了後の懇談会ではMTに関する情報収集で当サイトを訪れる方が多くい
らっしゃることに驚きました。普段は一人で黙々とブログを書き続けているだけ
なので、そのような意識はないのですが、リアルに肌で感じることができました。
今回のイベントにお声がけ下さった蒲生さん、そしてこのような機会を与えて頂
いた皆様にこの場をお借りしてお礼申し上げます。ありがとうございました。
なお、現在サーバ移転中のため、コメント・トラックバックは受付できない状態
です。予めご了承ください。
サイドメニューの折りたたみ(定義リスト編)
当サイトで公開している「サイドメニューの折りたたみ」について、配布テンプレート(XHTML 1.0 Strict 版)のサイドバーに定義リスト(dl/dt/dd)を使用している場合のカスタマイズについてご質問を頂きましたので、本エントリーにて説明致します。
div 要素の場合の設定例
これまでの、div を使用した場合の設定(青色部分を追加)は下記の通りです。
<div class="sidetitle" id="categoryname">
Categories
</div>
<div class="side" id="categorylist">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<script type="text/javascript">
<!--
FoldNavigation('category','on',true);
//-->
</script>
MT4(またはMT3.x XHTML1.0 Strict 版)の設定例
カテゴリーリスト
ここではカテゴリーリストを例に挙げてますが、どのリストについても、script 要素を dd 要素で括ってください。これを行わないと valid な XHTML になりません。
また、script 要素はリストに示す通り、MTIfArchiveTypeEnabled の内側に設定してください。外側でも問題ありませんが、内側の方がより妥当です。
<MTIf name="module_category_archives">
<MTIfArchiveTypeEnabled archive_type="Category">
<dt class="sidetitle" id="categoryname">
Categories
</dt>
<dd class="side" id="categorylist">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</dd>
<dd>
<script type="text/javascript">
<!--
FoldNavigation('category','on',true);
//-->
</script>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>
アーカイブリスト
デフォルトテンプレートのサイドバーにあるアーカイブリストの構造(+定義リスト)を適用している場合、script 要素を dd 要素で括ることに加え、各アーカイブリスト(月別アーカイブリスト・月別カテゴリアーカイブリスト・ユーザーアーカイブリスト・月別ユーザーアーカイブリスト)の id 属性はすべて同じものを使用して構いません。これは各アーカイブ(またはメインページ)で表示されるリストがいずれかひとつであるためです。
<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
<dt class="sidetitle" id="archivename">
Monthly Archives
</dt>
<dd class="side" id="archivelist">
<ul>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>
</dd>
<dd>
<script type="text/javascript">
<!--
FoldNavigation('archive','on',true);
//-->
</script>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_category-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
<dt class="sidetitle" id="archivename"><$MTArchiveTitle$>: Monthly Archives</dt>
<dd class="side" id="archivelist">
<MTArchiveList archive_type="Category-Monthly">
<MTArchiveListHeader>
<ul>
</MTArchiveListHeader>
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$> (<$MTArchiveCount$>)</a></li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
</dd>
<dd>
<script type="text/javascript">
<!--
FoldNavigation('archive','on',true);
//-->
</script>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_author-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Author-Monthly">
<dt class="sidetitle" id="archivename"><$MTAuthorDisplayName$>: Monthly Archives</dt>
<dd class="side" id="archivelist">
<MTArchiveList archive_type="Author-Monthly">
<MTArchiveListHeader>
<ul>
</MTArchiveListHeader>
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$> (<$MTArchiveCount$>)</a></li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
</dd>
<dd>
<script type="text/javascript">
<!--
FoldNavigation('archive','on',true);
//-->
</script>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_author_archives">
<MTIfArchiveTypeEnabled archive_type="Author">
<dt class="sidetitle" id="archivename">Author Archives</dt>
<dd class="side" id="archivelist">
<MTArchiveList archive_type="Author">
<MTArchiveListHeader>
<ul>
</MTArchiveListHeader>
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$> (<$MTArchiveCount$>)</a></li>
<MTArchiveListFooter>
</ul>
</MTArchiveListFooter>
</MTArchiveList>
</dd>
<dd>
<script type="text/javascript">
<!--
FoldNavigation('archive','on',true);
//-->
</script>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>
上記の例では script 要素がやや冗長なので、リストの一番最後(MTIf の外側)にひとつだけ設置しても良いでしょう。
その場合、何らかのページでアーカイブリストがひとつも表示されなくても、JavaScript エラーは出ないはずです。
「Movable Type WEBデザインの新しいルール」見本誌到着
本日、翔泳社より「Movable Type WEBデザインの新しいルール」の見本誌を受け取りました。自画自賛で恐縮ですが、かなり洒落たものに仕上がっています。
これまで出版されているMTカスタマイズ本よりちょっと縦長(B5変形版)で、オビを取ればそのまま持ち歩いてもOKそうな、デザイン誌っぽい装丁です。
内側の紙は若干クリーム色がかった柔らかな印象です。
ということで、しつこいようですが10月16日(火)発売です。
販促を兼ねて「WebSig24/7 MT4分科会 第1回イベント」に持っていきたいと思います。参加される方はどうぞお楽しみに。
dTree プラグイン for WordPress v0.4
WordPress のカテゴリーリストをツリー表示する「dTree プラグイン」をバージョンアップしました。
バージョンアップ内容は次の通りです。
- クッキーによる折りたたみ状態を保持しない場合の折りたたみ初期状態を設定可能
プラグインのダウンロードは「dTree プラグイン for WordPress」よりお願い致します。
追加機能の設定方法
バージョンアップしたプラグインをアップロード・有効化すると下記のリンクが表示されるのでクリック。

クリックすると下記のオプション画面が表示されます。赤枠部分が今回追加したオプションです。

追加オプションの意味は次の通りです。
| オプション | 意味 | デフォルト |
|---|---|---|
| Fold Status is open. | ツリーを常に開いた状態にする場合にチェック(クッキーによる状態保持を無効にしている場合のみチェックボックスを表示) | false |
Internet Explorer 7 の自動更新をブロックする
先日、Internet Explorer 7が誤って自動更新されるという問題が発生しました。
今回は誤配信だったのですが、いずれ自動更新プログラムに正式に組み込まれる筈なので、IE6 をそのまま利用したい方は、今のうちに自動更新されないようブロックしておくと良いでしょう。
ブロックするために、Microsoft のサイトでは4つの手段が挙げられていますが、ここでは1番目の「Internet Explorer 7 Blocker Toolkit をダウンロードして展開」について説明しておきます。
以下、設定手順です。
1.ツールのダウンロード&インストール
「自動配布の無効化ツールキット (Blocker Toolkit)」にある「続行」をクリック(PC環境によっては表示されないかもしれません)。

情報バーが表示さるので、右クリックして「ActiveX コントロールのインストール」を選択(この操作はキャプチャできませんでした)。
詳細は上記の手順で表示される「正規 Windows 確認コンポーネントのインストール」を参照してください。
「ダウンロード」をクリック。

「実行」をクリック。後で実行する場合は「保存」をクリックして、任意のフォルダに保存してから、保存した exe ファイルを実行します。

プログラムの解凍先を指定して、「Unzip」をクリック。ここではCドライブを設定します。

「OK」をクリック。

解凍先フォルダ(ここではCドライブ直下)に IE7BlockerToolkit_0816 というようなフォルダができている筈です。この中にある IE70Blocker.cmd を起動することで、ブロックの有効・無効を設定することができます。

2.ブロックの有効化
IE70Blocker.cmd の起動方法は、コマンドプロンプトから行います。「スタート」→「プログラム」→「アクセサリ」→「コマンドプロンプト」を選択して、開いた画面で IE70Blocker.cmd のあるフォルダに移動。
すべてを手入力しなくても「cd 」のみ手入力した後で、エクスプローラにある IE7BlockerToolkit_0816 のフォルダをコマンドプロンプトにドラッグすればフォルダまでのパスが入力されます。

IE70Blocker.cmd /B と入力すればブロックを有効にするためのレジストリキーが設定されます。

無効にする(=自動更新の対象にする)には、IE70Blocker.cmd /U と入力します。
IE70Blocker.cmd /H と入力するか、フォルダの中に IE70BlockerHelp.htm がありますので(英語ですが)、詳細はそちらをご覧ください。
サッカーをする
サーバ移転一旦中止します
昨日お知らせしたサーバ移転ですが、旧サーバ側のインポートデータに不具合があり、新サーバのブログに正常にインポートできていないことが発覚しました。
具体的には、インポートデータの中のコメントに "-------" という連続したハイフンが含まれたものがあり、これ以降のデータが一部インポートされていませんでした。
Movable Type のインポートデータフォーマットに連続したハイフンが使われているため、それ以外の部分(エントリー本文やコメント・トラックバック等)で連続したハイフンが存在すると、インポートデータを正常に解析できなくなるためです。
なお、本エントリーに記載している "-------" は大丈夫なのか?と疑問に思われるかもしれませんが、実体参照(- で表示)しているので問題ありません。
そういう訳で、サーバ移転については一旦見合わせることに致します。コメント・トラックバックは受信できるように戻していますが、できれば来週までに移転させたいので、動作確認が必要なコメントのご返事はかなり遅れる可能性があります。予めご容赦ください。
コメントやトラックバックの概要には連続したハイフンを含めないよう、お願いしたいのですが、お願いレベルでは回避できる問題ではないため、何らかの対策が必要かもしれません。
サーバ移転のお知らせ
突然ですが、本ブログのサーバを「さくらインターネット(スタンダードプラン)」から「coreserver(CORE-A)」に移転します。
新サーバでは Movable Type 4.01 で運用開始します。
移転の主な理由は次の通りです。
- ディスク容量の圧迫(ログを削除してもすでに7割ほど使用)
- PHP をモジュール版で動作させたい(現状は CGI 版)
「さくらインターネット(スタンダードプラン)」は1GB、MySQL もひとつという制約がありましたが、「coreserverは 15GB、データベースも複数作成できます。
価格も1年契約であれば500円/月。かなり割安感があります。
PHP・CGI 版については色々手を尽くしましたが、時々発生する 503 エラーを減少させる手立てがないため、モジュール版での動作を試してみたい、というところです。サーバのスペックが異なるので、単純な比較はできませんが。
同じテンプレートを使ったページ表示速度は体感的に問題ないように思いますが、パフォーマンスが落ちるようでしたら、また次のサーバを探したいと思います。
MT4で運用しておけばバックアップから復元できるので、移転作業が楽になることを期待しています。
ブログのバージョンアップについては、エクスポートデータを元に新規インストールしたMT4に対して粛々と作業を進めていますが、一筋縄ではいかず、速やかに DNS を切り替えられない状況です。
また移転期間中は、旧サーバ側のコメント・トラックバック受信を現在停止しています(実行するとエラー等になります)。
ご迷惑をおかけ致しますがよろしくお願い致します。
Simply Threaded プラグイン(MT4版)でコメントフォームに返信機能を追加する
Movable Type 4 では、元コメントに対する返信機能が新たに追加されましたが、デフォルトでは元コメントに返信できるのは管理画面から、つまり Movable Type ユーザのみです。
ブログ記事ページのコメントフォームから同様に返信できるようにするには、MT3 の時に紹介した、Simply Threaded プラグインが MT4 対応にバージョンアップされたので、これを利用します。
- Simply Threaded プラグイン
- 過去の紹介記事
本プラグインをインストールすることで、管理画面のコメント返信と同等の機能が追加され、さらに MT4 のコメント関連テンプレートタグでカスタマイズすれば、いわゆる掲示板のようなスレッド形式のコメント欄を表示することができます。
まず、プラグイン導入後のコメント返信方法から説明します。
1.コメント返信方法
返信したい元コメントに表示されている「返信」リンクをクリック。

クリックすると、コメント投稿画面にリプライのチェックボックス(「In reply to yujiro」の部分)が表示されます。
チェックボックスチェックした状態でコメント投稿すると、元コメントの返信コメントとして認識されます。

投稿後はスレッド形式で表示することができます。

コメント欄をスレッド表示にする方法は「Movable Type 4 で返信コメントをスレッド形式で表示する」の設定を利用しています。
以下、プラグインの設定方法です。
2.プラグインのダウンロード
Simply Threaded のサイトより、「download now」をクリック。
User Type(ここでは Personal bloggers を選択)、License の確認、Your Name、Email Adress を入力して「Submit」をクリック。
同じ画面の左下に「Success! Check your email for instructions on downloading this plugin」が表示されれば送信OKです。

入力したメールアドレスにダウンロード用のURLが送信されるので、そこにアクセスし、表示された画面で、Version(Movable Type 4.0x の方)、Format を選択して、Download をクリック。
商用利用または企業利用の場合は有償なので、ダウンロード後、「purchase license」をクリックして必要な金額を送金してください。
3.プラグインのインストール
ダウンロードしたアーカイブ Simply-Threaded_1.xx.zip(または tar.gz) を解凍し、SimplyThreaded フォルダを丸ごと plugins フォルダ配下にアップロード。SimplyThreaded フォルダは2つありますので注意してください。
アップロード後、下のような構成になっていればOKです。
plugins/
SimplyThreaded/
lib/
SimplyThreaded/
CommentThread.pm
php/
function.MTCommentReplyField.php
function.MTCommentReplyLink.php
simplythreaded.pl
管理画面にアクセスすると、「アップグレード開始」画面になるので、「アップグレード」をクリック。

サインインします。

アップグレード開始します。完了後「Movable Type に戻る」をクリック。

「システムメニュー」→「プラグイン」で「Simply Threaded 1.xx」が表示されていればインストール完了です。

4.テンプレート修正(コメント詳細)
管理画面より「デザイン」→「テンプレート」→「テンプレートモジュール」→「コメント詳細」を開き、リプライ用リンクの MTCommentReplyLink タグ(青色部分)を追加します。
デフォルトテンプレート
<div class="comment"<MTIfArchiveTypeEnabled archive_type="Individual"> id="comment-<$MTCommentID$>"</MTIfArchiveTypeEnabled>>
<div class="inner">
<div class="comment-header">
<$MTCommentAuthorLink default_name="Anonymous" show_email="0"$> <MTIfNonEmpty tag="CommentAuthorIdentity"><$MTCommentAuthorIdentity$></MTIfNonEmpty>:
</div>
<div class="comment-content">
<$MTCommentBody$>
</div>
<div class="comment-footer">
<a href="#comment-<$MTCommentID$>" title="コメントのURL"><$MTCommentDate format="%x %X"$></a> | <$MTCommentReplyLink$>
</div>
</div>
</div>
公開テンプレート
<div class="comment"<MTIfArchiveTypeEnabled archive_type="Individual"> id="c<$MTCommentID$>"</MTIfArchiveTypeEnabled>>
<div class="comment-content"><$MTCommentBody$></div>
<p class="comment-footer">
Posted by <$MTCommentAuthorLink default_name="Anonymous" show_email="0"$> <MTIfNonEmpty tag="CommentAuthorIdentity"><$MTCommentAuthorIdentity$></MTIfNonEmpty> at <$MTCommentDate$> | <$MTCommentReplyLink$>
</p>
</div>
MTCommentReplyLink タグにはオプションで text 属性が用意されています。これで表示テキストを変更できます。
<MTCommentReplyLink text="Reply to this comment">
5.テンプレート修正(コメント入力フォーム)
管理画面より「デザイン」→「テンプレート」→「テンプレートモジュール」→「コメント入力フォーム」を開き、チェックボックス表示用の MTCommentReplyField タグ(青色)を追加します。
デフォルトテンプレート
:
<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" />
ログイン情報を記憶</label>
</div>
<$MTCommentReplyField$>
:
公開テンプレート
:
<div id="comment-form-remember-me">
<p>
<label for="comment-bake-cookie"><input type="checkbox" id="comment-bake-cookie" name="bakecookie" tabindex="4" accesskey="r" onclick="if (!this.checked) forgetMe(document.comments_form)" value="1" onkeypress="if (!this.checked) forgetMe(document.comments_form)" />
ログイン情報を記憶</label>
</p>
</div>
<$MTCommentReplyField$>
:
ちなみに MTCommentReplyField タグは、(X)HTML上は下のように展開されます。
<script type="text/javascript">
<!--
function replyComment(entry_id, parent_id, author, created_on) {
var p = document.getElementById(entry_id + '_comment-reply');
while (p.hasChildNodes()) {
p.removeChild(p.firstChild);
}
var label = document.createElement('label');
var checkbox = document.createElement('input');
checkbox.setAttribute('type', 'checkbox');
checkbox.setAttribute('name', 'simplythreaded_parent_id');
checkbox.value = parent_id;
checkbox.setAttribute('checked', true);
checkbox.style.marginLeft = '0px';
checkbox.style.verticalAlign = 'middle';
label.appendChild(checkbox);
var reply_text = document.createTextNode(' In reply to ');
label.appendChild(reply_text);
var anchor = document.createElement('a');
anchor.setAttribute('href', '#comment-' + parent_id);
anchor.innerHTML = author;
label.appendChild(anchor);
p.appendChild(label);
checkbox.focus();
}
//-->
</script>
<p id="2_comment-reply"></p>
6.関連リンク
下記に、プラグイン適用時のブログ記事ページを valid にする方法が掲載されています。
Movable Type 4 で返信コメントをスレッド形式で表示する
Movable Type 4 ではコメント返信関連のタグ
MTIfCommentParentMTIfCommentRepliesMTCommentParentMTCommentRepliesMTCommentRepliesRecurse
が追加されており、サブカテゴリーリストのように、返信コメントを元コメントに関連づけ、スレッド形式で表示することができます。
1.サンプル
下はコメント返信関連タグを用いた、デフォルトテンプレートのコメントリストのカスタマイズ例です。コメント本文の数字はコメントの返信関係を示しており、変更後は投稿時間に関わらず、返信コメントが元コメントに関連づけされます。
| 変更前 | 変更後 |
|---|---|
![]() | ![]() |
デフォルトテンプレート、および公開テンプレート用のテンプレートおよび CSS を作ってみましたので、よろしければお試しください。
2.テンプレート
2007.10.04 テンプレート・CSSについて、コメントに順序なしリストが投稿された場合を考慮した内容に修正しました。
管理画面より「デザイン」→「テンプレート」→「テンプレートモジュール」→「コメント」を選択して、テキストエリアの内容を、下記の内容にごっそり入れ替えてください。
テンプレートを初期化したい場合は、テンプレート名左のチェックボックスをチェックして、一覧上にあるセレクトボックスより「テンプレートの初期化」を選択して「Go」をクリックします(途中で一旦入れ替えたテンプレートについてはこの機能では復活できないのでご注意ください)。
2.1 デフォルトテンプレート用
<MTIfCommentsActive>
<div id="comments" class="comments">
<MTIf name="comment_preview_template">
<$MTInclude module="コメント入力フォーム"$>
</MTIf>
<MTComments>
<MTCommentsHeader>
<h2 class="comments-header">コメント(<$MTEntryCommentCount$>)</h2>
<div class="comments-content">
<ul class="comment-replies">
</MTCommentsHeader>
<MTIfCommentParent>
<MTElse>
<li class="comment-replies-content">
<$MTInclude module="コメント詳細"$>
<MTCommentReplies>
<MTCommentsHeader>
<ul class="comment-replies">
</MTCommentsHeader>
<li class="comment-replies-content">
<$MTInclude module="コメント詳細"$>
<$MTCommentRepliesRecurse$>
</li>
<MTCommentsFooter>
</ul>
</MTCommentsFooter>
</MTCommentReplies>
</li>
</MTIfCommentParent>
<MTCommentsFooter>
</ul>
</div>
</MTCommentsFooter>
</MTComments>
<MTUnless name="comment_preview_template">
<$MTInclude module="コメント入力フォーム"$>
</MTUnless>
</div>
</MTIfCommentsActive>
2.2 公開テンプレート用
<MTIfCommentsActive>
<div id="comments">
<MTIf name="comment_preview_template">
<$MTInclude module="コメント入力フォーム"$>
</MTIf>
<MTComments>
<MTCommentsHeader><h3 class="comments-header">コメント</h3><ul class="comment-replies"></MTCommentsHeader>
<MTIfCommentParent>
<MTElse>
<li class="comment-replies-content">
<$MTInclude module="コメント詳細"$>
<MTCommentReplies>
<MTCommentsHeader>
<ul class="comment-replies">
</MTCommentsHeader>
<li class="comment-replies-content">
<$MTInclude module="コメント詳細"$>
<$MTCommentRepliesRecurse$>
</li>
<MTCommentsFooter>
</ul>
</MTCommentsFooter>
</MTCommentReplies>
</li>
</MTIfCommentParent>
<MTCommentsFooter></ul></MTCommentsFooter>
</MTComments>
<MTUnless name="comment_preview_template">
<$MTInclude module="コメント入力フォーム"$>
</MTUnless>
</div>
</MTIfCommentsActive>
3.CSS
入れ替えたコメント用テンプレートは、各コメントを順序なしリスト(ul/li)でマークアップしているので、リストマークの無効化やインデント幅を設定します。
管理画面より「デザイン」→「テンプレート」→「スタイルシート(メイン)」を選択して、テキストエリアに下記の内容を追加してください。デフォルトテンプレートの場合は「スタイルシート(ベーステーマ)」でも結構です。
3.1 デフォルトテンプレート(罫線なし)
.comments-content ul.comment-replies {
list-style: none;
margin-left: 0;
padding-left: 0;
}
.comments-content ul.comment-replies ul.comment-replies {
border-left: 1px solid #999;
}
.comments-content li.comment-replies-content li.comment-replies-content {
margin-left: 10px;
padding-left: 10px;
}
- 完成例

3.2 デフォルトテンプレート(罫線つき)
.comments-content ul.comment-replies {
list-style: none;
margin-left: 0;
padding-left: 0;
}
.comments-content ul.comment-replies ul.comment-replies {
border-left: 1px solid #999;
}
.comments-content li.comment-replies-content li.comment-replies-content {
margin-left: 8px;
padding-left: 8px;
}
- 完成例

3.3 公開テンプレート(罫線なし)
#comments ul.comment-replies {
list-style: none;
margin-left: 0;
padding-left: 0;
}
#comments li.comment-replies-content li.comment-replies-content {
margin-left: 10px;
padding-left: 10px;
}
3.4 公開テンプレート(罫線つき)
#comments ul.comment-replies {
list-style: none;
margin-left: 0;
padding-left: 0;
}
#comments ul.comment-replies ul.comment-replies {
border-left: 1px solid #999;
}
#comments li.comment-replies-content li.comment-replies-content {
margin-left: 7px;
padding-left: 7px;
}
4.関連記事
大人の科学マガジンVol.17 テルミン
はてなで話題に上がっていた「大人の科学マガジンVol.17 テルミン」を購入しました。瞬間風速っぽいですが、Amazon ではベストセラーになっています。
![]() | 大人の科学マガジンVol.17 テルミン (Gakken Mook) 大人の科学マガジン編集部 学習研究社 2007-09-29 売り上げランキング : 3 おすすめ平均 ![]() Amazonで詳しく見る by G-Tools |
音楽愛好家であればご存知の方も多いと思いますが、「テルミン」は世界最古の電子楽器で、備え付けられたアンテナに手を近づけたり遠ざけたりすることにより音を発します。
プロ奏者の竹内正美さんの演奏が凄いです。
で、「大人の科学マガジンVol.17 テルミン」には、付録にテルミンがついています。
肝心のブツはドライバー一本で、都合10分ほどで作れましたが、注意書きに「アルカリまたはマンガン電池をお使いください」と書かれており、家にはオキシライド乾電池しかありませんでした...(短絡等の間違いがあった場合に部品の溶解・発火の危険が大きいとのこと)。
体験談はまた次回ということで。
Movable Type 4 のアーカイブリスト表示の仕組みを探る
デフォルトテンプレートのサイドバーにある、アーカイブリスト表示について解説します。
当サイトで現在配布中のテンプレートもこれとほぼ同じ構成で、MTIf の部分だけを抽出すると、概ね下記のようになっていますので参考にしてください。*1
1.アーカイブリスト表示用のテンプレートタグ
「デザイン」→「テンプレート」→「テンプレートモジュール」→「サイドバー(3カラム)(または2カラム)」の中に下記のようなテンプレートタグがあります。これがアーカイブリスト表示用のテンプレートタグです。
<MTIf name="module_author_archives">
:
[ユーザー別アーカイブリスト]
:
</MTIf>
<MTIf name="module_monthly_archives">
:
[月別アーカイブリスト]
:
</MTIf>
<MTIf name="module_category-monthly_archives">
:
[月別カテゴリアーカイブリスト]
:
</MTIf>
<MTIf name="module_author-monthly_archives">
:
[ユーザー月別アーカイブリスト]
:
</MTIf>
<MTIf name="module_category_archives">
:
[カテゴリアーカイブリスト]
:
</MTIf>
デフォルトでは5種類のアーカイブリストが用意されており、すべて青色の MTIf タグで括られています。
メインページでは
- 月別アーカイブリスト
- ユーザー別アーカイブリスト
- カテゴリアーカイブリスト
が表示されるようになっています。各アーカイブページでは、アーカイブの内容にそったリストが表示されます(その仕組みは後述)。
アーカイブリストが表示されるためには、上の赤色で示した、MTIf タグにある、各 name 属性の値が "1" であることが条件になります。
例えば、月別アーカイブが表示されるためには、module_monthly_archives に "1" が設定されている必要があります。
この MTIf タグの name 属性が表示を制御するポイントとなりますので、次に、各 name 属性の値をどこで "1" に設定しているかについて解説します。
2.メインページで表示される仕組み
メインページテンプレートの先頭に下のタグが記述されています。
<MTSetVar name="module_category_archives" value="1">
<MTSetVar name="module_author_archives" value="1">
<MTSetVar name="module_monthly_archives" value="1">
つまり、MTSetVar タグで name 属性の値に "1" が設定され、メインページのサイドバーには、前述の通り、カテゴリアーカイブリスト・ユーザー別アーカイブリスト・月別アーカイブリストが表示される、という訳です。
ただし、厳密には各リストは MTIfArchiveTypeEnabled タグでも括られています(下の青色部分)。
<MTIf name="module_author_archives">
<MTIfArchiveTypeEnabled archive_type="Author">
:
[ユーザー別アーカイブリスト]
:
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
:
[月別アーカイブリスト]
:
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_category-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Category-Monthly">
:
[月別カテゴリアーカイブリスト]
:
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_author-monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Author-Monthly">
:
[ユーザー月別アーカイブリスト]
:
</MTIfArchiveTypeEnabled>
</MTIf>
<MTIf name="module_category_archives">
<MTIfArchiveTypeEnabled archive_type="Category">
:
[カテゴリアーカイブリスト]
:
</MTIfArchiveTypeEnabled>
</MTIf>
MTIfArchiveTypeEnabled タグの中が実行されるためには、赤色で示した「アーカイブ種類(=アーカイブマッピング)」が存在する必要があります。存在しなければ、リストは表示されません。
デフォルトテンプレートでは「ユーザー別アーカイブ」のアーカイブマッピングは設定されていないので、MTSetVar タグがあるにもかかわらずメインページに表示されないのは、そのためです。
3.アーカイブページで表示される仕組み
メインページについてはテンプレート編集画面で MTSetVar タグで name 属性が明示されていますが、各アーカイブテンプレート、例えば「ブログ記事リスト」には、
module_author_archives
module_monthly_archives
module_category-monthly_archives
module_author-monthly_archives
module_category_archives
という name 属性値は見当たりません。
実は、これらの値はシステムで事前に設定されており、各アーカイブに対応する name 属性に "1" が設定されているのです。
ソースコードが読める方は lib/MT/WeblogPublisher.pm の core_archive_types というサブルーチンを見ればお分かりになると思います。
下は、lib/MT/WeblogPublisher.pm より月別アーカイブ部分を抜粋したものです。青字部分に module_monthly_archives が設定されているのが何となくお分かりになると思います。
sub core_archive_types {
return {
:
(中略)
:
'Monthly' => ArchiveType(
name => 'Monthly',
archive_label => \&monthly_archive_label,
archive_file => \&monthly_archive_file,
archive_title => \&monthly_archive_title,
date_range => \&monthly_date_range,
archive_group_iter => \&monthly_group_iter,
archive_group_entries => \&monthly_group_entries,
archive_entries_count => \&monthly_entries_count,
dynamic_template => 'archives/<$MTArchiveDate format="%Y%m"$>',
default_archive_templates => [
ArchiveFileTemplate(
label => MT->translate('yyyy/mm/index.html'),
template => '%y/%m/%i',
default => 1
),
],
dynamic_support => 1,
date_based => 1,
template_params => {
datebased_only_archive => 1,
datebased_monthly_archive => 1,
module_monthly_archives => 1,
main_template => 1,
archive_template => 1,
archive_class => "datebased-monthly-archive",
},
),
:
(中略)
:
};
}
他のアーカイブも同様にシステムで設定された値を使用しています。
アーカイブページ右上に表示される「このアーカイブについて」も、同じ仕組みで制御されています。

4.すべてのアーカイブページで同じアーカイブリストを表示するには
1項で示した、各アーカイブリストの一番外側にある MTIf タグを削除してください。
ただしアーカイブによってはメインページと表示が異なる可能性があります。その場合は、
で対応してみてください。
拙著「Movable Type WEBデザインの新しいルール」の配布テンプレートではこのタグを省略しています。
OpenOffice 日本語版のインストール
Microsoft Office(Word / Excel / PowerPoint 等)は値段が高くて買えないという方へ、ワープロや表計算・プレゼンツールなどを統合したオフィスソフト、OpenOffice(オープンオフィス)をお勧めします。
1.特徴
OpenOffice は無償で入手でき、誰でも自由に利用することができます。さらに Microsoft Office(Word / Excel / PowerPoint 等)と高い相互運用性を備えています。
OpenOffice は下記のような場面で活躍します(Ja.openoffice.org/documentation/start/sceneからの引用)
- 中古パソコンを入手した。ワープロも表計算も付いてない
- パソコン勉強会を開きたい。人数分のソフトは買えない
- 文書ファイルを受け取った。開けるソフトを持ってない
- 今度、発表しなくちゃいけない。プレゼンツールは高すぎる
- 文書ファイルを渡したい。勝手に編集してほしくない(PDFを作成可能)
2.各ツールの起動イメージ
Microsoft PowerPoint に該当する「OpenOffice.org Impress」
Microsoft Excel に該当する「OpenOffice.org Calc」
Microsoft Word に該当する「OpenOffice.org Writer」
3.OpenOffice のダウンロード
OpenOffice 公式サイトの右側にある「ダウンロード」をクリック。
ダウンロードの一覧から、該当するOSをクリック。ここでは「Windows」を選択します。
Java をPCにインストール済の場合は「Java無し」をクリック。「Javaって何?」という方は「Windows」を選択すれば間違いないでしょう。
Java のインストールについて知りたい場合は「JavaとOpenOffice.org」の説明を読みましょう。
4.OpenOffice のインストール
ダウンロードした「OOo_2.2.1_Win32Intel_install_wJRE_ja.exe」をダブルクリックして、プログラムを実行。

「次へ」をクリック。
インストールファイルの保存先を指定。ここではそのまま「展開」をクリック。
この「保存先」はプログラムのインストール先とは異なりますので、デフォルトで表示された保存先をそのまま利用すれば良いでしょう。
インストールファイル展開中。
「次へ」をクリック。
「使用許諾契約の条項に同意します」を選択して「次へ」をクリック。
ユーザ情報とアプリケーション利用者を設定して「次へ」をクリック。ここでは「アプリケーション利用者」は「すべてのユーザ」を選択しています。
セットアップの種類を選択して「次へ」をクリック。ここでは「すべて」を選択。「カスタム」を選択するとプログラムの保存先を指定することができます(「すべて」を選択した場合のプログラムの保存先は C:¥Program Files¥OpenOffice.org 2.x)。
ファイルの種類を選択して「次へ」をクリック。ここでは「PowerPoint」のみを選択してみました。
注:公式サイトでは「このチェックボックスはオンにしないでください。」とあります(チェックしなくても OpenOffice.org で Word や Excel のファイルを扱うことができます)。
「インストール」をクリック。
インストール実行。
「完了」をクリック。
5.オンライン登録
「スタート」→「プログラム」→「OpenOffice.org 2.x」→「OpenOffice.org XXX(各ツール名)」で任意のツールを起動すると、初回のみオンライン登録ウィザードが起動しますので、「次へ」をクリック。
「ライセンス条項」を読み(下までスクロール)、「同意する」をクリック。
姓・名・イニシャルを設定して「次へ」をクリック。
オンライン更新の有無を設定して「次へ」をクリック。
ユーザ登録の有無を設定して「完了」をクリック。
6.ツール起動
Microsoft PowerPoint に該当する「OpenOffice.org Impress」を起動したところ。そのまま「完了」をクリック。
これで開きました。
Microsoft Excel に該当する「OpenOffice.org Calc」はすぐに起動します。
Microsoft Word に該当する「OpenOffice.org Writer」もすぐに起動します。








