2009年ブログ総括
今年も無事に1年が過ぎようとしています。このブログも多くの方々に暖かく見守っていただき、感謝しております。
毎年恒例の振り返りです。
1.書籍
昨年・一昨年に引き続き、今年もテクニカルライターの仕事をさせて頂きました。今年執筆した著書は「Movable Type逆引きデザイン事典」の1冊です。
![]() | Movable Type逆引きデザイン事典[4.2/4.1対応] 翔泳社 2009-04-21 売り上げランキング : 288913 Amazonで詳しく見る by G-Tools |
この本は他のMT4関連書籍よりかなり出遅れてしまったのですが、内容はこれまで携わった書籍の中でもかなり質の高いものに仕上がっています。
なお、MT5の執筆は水面下で脈々と行なっています。
2.Twitter
今年の7月から本格的に始めた Twitter ですが、おかげさまで現時点で 1288 フォロワーを頂いてます。ありがとうございます。

最近忙しくてつぶやく暇もないのですが、皆様のフォローをお待ちしています。
3.Google PageRank
時期は未明ですが、当ブログの Google PageRank は去年の 6 から 5 に下がりました。この件に関しては特にコメントありません(笑)。
4.BlogPeople 被リンク数
昨年の11月頃から、BlogPeople 被リンク数がトップを維持しています。
関連記事:BlogPeople 被リンク数ランキング1位

5.アクセスの多かったエントリーベスト30
Google Analytics の「タイトル別のコンテンツ」より、2009年1月1日から本日までの期間で、アクセスの多かった(トップページ等を除いた)エントリーの上位30エントリーを発表します。カッコ内はページビューです。
- Movable Type(MT)テンプレート(53,795)
- Windows XP のバックアップ機能(34,328)
- Highslide JS でサムネイル画像を拡大表示する(32,166)
- Movable Type プラグイン一覧(MT4対応)(27,758)
- IE7 の CSS ハック(25,465)
- WordPress テーマ(テンプレート)・3カラム版(24,867)
- リンク画像の枠線を消す(22,853)
- RSS Feed(フィード)を表示する(20,777)
- Internet Explorer 6 と Internet Explorer 7 を共存させる(20,682)
- Lightbox JS で画像を表示する(20,329)
- CSSで画像に影をつける(ドロップシャドウ)(18,196)
- WordPress テーマ(テンプレート)(18,003)
- Movable Type プラグイン一覧(16,595)
- JavaScript エラーを解消する(14,812)
- FC2ブログテンプレート(14,074)
- アメーバブログ スキン(13,885)
- Amazon アソシエイト作成支援ツール一覧(12,773)
- CSS の after 擬似要素で回り込みを解除する(12,639)
- Ajax 月送りカレンダー(MT4版)(12,542)
- WordPress の月および曜日を英語表記にする(12,490)
- Movable Type が WordPress に負けた本当の理由(12,484)
- 破損した Word 文書を修復する方法(12,469)
- MySQL + phpMyAdmin によるバックアップ(11,689)
- .htaccess によるリダイレクト(11,271)
- JavaScript カレンダー(休日表示付き)(10,614)
- input 要素の disabled 属性と readonly 属性の違い(10,505)
- Seesaaブログテンプレート(10,183)
- Windows XP エクスプローラの検索機能でファイルが検索されない問題(9,969)
- Movable Type 4.1 カスタムフィールドの使用方法(9,567)
- WordPress における日付/時間の表示とフォーマット変更方法(9,434)
ちなみに1年間のPVは約220万でした。
ざっと眺めて、Movable Type、WordPress、FC2ブログ、アメーバブログ、Seesaaブログのテンプレート配布系記事やCSS Tipsの記事がランキングしているのが嬉しいです。
6.その他
時間がないので、Amazon の年間ランキングと今年リリースした自作プラグインは来年に投稿します。
7.まとめ
昨年と同じコメントですが、とにかく無事に1年を終えることができたことが何よりの喜びです。皆様には大変お世話になりました。来年もテンプレート・カスタマイズ記事にダジャレをメインにブログを書き続ける所存ですので、ご指導・ご鞭撻の程、どうぞよろしくお願い致します。
それでは2010年もどうぞよろしくお願い致します。そして良いお年をお迎えください。
Movable Type 5.0(MT5.0)で更新通知が送信できない不具合と対処
Movable Type 5.0(MT5.0)で更新通知が送信できないという不具合が発生しています。
具体的には、ブログ記事やウェブページの投稿jで更新通知を設定している場合、「HTTP::Message content must be bytes」というエラーになるようです。
一部ですが、この不具合に関して以下のような記事が投稿されています。
- 一口馬主専科 - MT5 にしてからアクセス数激減の原因は更新通知エラー
- [MovableType5]記事投稿時のエラーメッセージの回避策
- トラブル事例<ネットパソコン教室> - MT5.0エラー「HTTP::Message content must be bytes」
で、Technology on Information のたくさんが Twitter 上で不具合を解消するためのプラグインを公開されています。
私はまだこの事象に遭遇していないのですが、不具合が発生している方はインストールしてみてはいかがでしょうか。
Movabld Type 5(MT5)テーマ機能の「ファイル」について
Movabld Type 5(MT5)では「テーマ」という機能が新たに追加され、テンプレートセットだけでなく、オプションとして、カテゴリやカスタムフィールドをテーマの部品として用意できるようになりました。
つまり、あるテーマに切り替えると、そのテーマに予め設定されているカテゴリやカスタムフィールドを、適用したブログ(またはウェブサイト)に設定した状態にすることができます。
さて、設定できるオプションには「ファイル」という種類がありますが、設定方法がやや分かりずらいように思われます。
ということで、本エントリーでは、テーマのエクスポート時にオプション設定する「ファイル」について説明します。

1.オプションの「ファイル」の概要
テーマには外部ファイル(画像やCSS、JavaScript など)を部品として加えることができます。
テーマを作成にあたっては「テーマのエクスポート」を利用すると思いますが、テーマのエクスポート時に、オプションの「ファイル」をクリックし、次の画面で、ファイルが保存されているパス(ディレクトリ)を設定することで、画像やCSS、JavaScript などの外部ファイルをテーマとして保存することができます。

2.パスの設定方法
設定できるパスは、ウェブサイトパスまたはブログパス直下にあるディレクトリです。1項の設定例では、ウェブサイトパスまたはブログパス直下に images というディレクトリがあり、その配下に画像ファイルなどがアップロードされていることを示しています。
設定画面の説明では、パスは「サイトパスからの相対パスで」となっています。ただし、「../」などは使えませんでした。
また、パスを複数設定する場合は、次のように1行ずつ記述します。

指定したパス配下にサブディレクトリがある場合は、それらも適用対象になります。ただしサブディレクトリを以下のように直接指定することはできないようです。

3.テーマとして適用可能なファイル
パスを指定した配下にあるファイルで、テーマとして含むことができるファイルの種類(拡張子)は以下です。
- .jpg
- .jpeg
- .gif
- .png
- .js
- .css
- .ico
- .flv
- .swf
他のファイル(.txt など)はテーマ用のファイルとしては収集されません。ただし、環境変数 ThemeStaticFileExtensions を指定すると、エクスポートするファイルの種類を追加できるようです。
4.エクスポート時のファイル出力先
指定したパスやパス配下のファイルは、テーマのエクスポート時に、blog_static フォルダ配下に出力されます。サブディレクトリがある場合も構造を維持したまま出力されます。
指定したディレクトリやファイルのエクスポート状況は、blog_static フォルダを参照するとよいでしょう。
5.テーマ利用時のパスの展開先
blog_static があるテーマを適用した場合、blog_static 配下のパスは、適用したウェブサイトパスまたはブログパス直下に展開されます。サブディレクトリがある場合も、その構造を維持したまま展開されます。
2009.12.31
ThemeStaticFileExtensions を追記しました。
コミュニティのカスタムフィールドの表示順序を入れ替える
Category:[コミュニティ]
Tag:[Community, CustomField, Customize, MovableType]
Permalink
Movable Type のコミュニティブログやコミュニティ掲示板では、ユーザー登録を行なえば、メインページからブログ記事作成画面に移動でき、ブログ記事の投稿が行なえます(図)。

そのブログ記事作成画面には、予め作成したカスタムフィールドが自動的に表示することができます(図では「性別」「アップロード画像」「お住まいの地域」が該当)が、残念ながら表示順序は決められません。かといって、カスタムフィールド用のテンプレートタグを書き直してひとつずつ並べるのは面倒です。
ということで、本エントリーでは表示順序を決めるためのカスタマイズを紹介します。
1.カスタムフィールドの設定
作成したカスタムフィールドの説明欄に、表示順序を決めるための数字を設定します。カスタムフィールドは昇順に並びます。

2.テンプレートの修正
「ブログ記事フォーム」テンプレートモジュールの以下の赤色部分を青色の内容に変更します。
変更前
…前略…
<mt:EntryCustomFields>
<mt:SetVarBlock name="custom_field_name"><$mt:CustomFieldName escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="field-content"><$mt:CustomFieldHTML$></mt:SetVarBlock>
<mt:SetVarBlock name="custom_field_id">profile_<$mt:CustomFieldName dirify="1" escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="required"><mt:CustomFieldIsRequired>1<mt:else>0</mt:CustomFieldIsRequired></mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="$custom_field_id" class="" label="$custom_field_name" required="$required"$>
</mt:EntryCustomFields>
…後略…
変更後
…前略…
<mt:EntryCustomFields>
<mt:SetVarBlock name="number"><mt:EntryCustomFieldsDescription></mt:SetVarBlock>
<mt:SetVarBlock name="cfn{$number}"><mt:CustomFieldName escape="html" /></mt:SetVarBlock>
<mt:SetVarBlock name="fc{$number}"><mt:CustomFieldHTML /></mt:SetVarBlock>
<mt:SetVarBlock name="cid{$number}">profile_<$mt:CustomFieldName dirify="1" escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="req{$number}"><mt:CustomFieldIsRequired>1<mt:else>0</mt:CustomFieldIsRequired></mt:SetVarBlock>
</mt:EntryCustomFields>
<mt:Loop name="cfn" sort_by="key numeric">
<mt:GetVar name="__value__" setvar="custom_field_name" />
<mt:GetVar name="fc{$__key__}" setvar="field-content" />
<mt:GetVar name="cid{$__key__}" setvar="custom_field_id" />
<mt:GetVar name="req{$__key__}" setvar="required" />
<$mt:Include module="フォームフィールド" id="$custom_field_id" class="" label="$custom_field_name" required="$required"$>
</mt:Loop>
…後略…
以上です。
再構築してカスタムフィールドの内容が入れ替わっていることを確認してください。

ホットペッパー
インド料理レストラン「Shanti(シャンティ)」
東武東上線・志木駅近くにある、インド料理レストラン「Shanti(シャンティ)」の紹介です。

ここのカレーやナンが結構美味しいのですが、立地条件がよくないせいか、いつ行っても(といっても数回しか行ったことがありません)閑散としているので、紹介しておきます。写真ではちょっと分かりにくいのですが、明らかに和定食屋を改装した佇まいです。
場所は、東武東上線・志木駅南口下車3~4分のところで、ベルセゾンの手前にあります。ローカルネタですいません。ご近所の方がいらしたらどうぞ。
Movable Type 5(MT5)のコメントのページ分割機能(その2:カスタマイズ)
「Movable Type 5 のコメントのページ分割機能(その1:概要)」で紹介した、Movable Type 5(MT5.0)における、コメントのページ分割のカスタマイズ方法です。
ここでは未設定のブログテーマに新たに設定する手順を説明したいと思います。
1.theme.yaml の修正
システムテンプレートに「コメント一覧」があることが前提となるため、利用中のテーマに「コメント一覧」システムテンプレートがない場合、利用中のテーマの theme.yaml を任意のエディタで開いて、青色部分を追加します。
…前略…
system:
comment_listing:
label: Comment Listing
comment_preview:
description_label: Displays preview of comment.
label: Comment Preview
…後略…
また、利用中のテーマの templates ディレクトリ配下に以下の内容を comment_listing.mtml というファイル名で保存してください。
{
"direction": "<mt:Var name="commentDirection">",
"comments": "<mt:Comments sort_order="$commentDirection"><$mt:Include module="<__trans phrase="Comment Detail">" replace="\","\\" replace='"','\"' strip_linefeeds="1"$></mt:Comments>"
}
設定が完了したらテンプレートの初期化を行なってください。
2.ブログ記事テンプレート・ウェブページテンプレートの修正
head 要素部分に以下の内容を追加してください。
<$mt:Var name="comments_per_page" value="50"$>
<mt:If tag="EntryCommentCount" gt="$comments_per_page">
<script type="text/javascript">
MT.entryID = <$mt:EntryID$>;
MT.commentsPerPage = <$mt:Var name="comments_per_page"$>;
MT.entryCommentCount = <$mt:EntryCommentCount$>;
MT.commentIds = [<mt:Comments sort_order="ascend" glue=","><mt:CommentID></mt:Comments>];
</script>
</mt:If>
1行目の Var タグの value モディファイアの値「50」が1ページあたりの表示コメント数になるので、好きな値に変更してください。
3.インデックステンプレート「JavaScript」の変更
MT4 以前のJavaScript(mt.js) を利用している場合、MT5 のクラシックブログなど、デフォルトのテンプレートの内容に差し替えてください。
4.コメントテンプレートモジュールの修正
コメントテンプレートモジュールを修正します(赤色部分を青色部分の内容に差し替え)。例は当サイトの配布テンプレートです。
変更前
<mt:ifCommentsActive>
<div id="comments">
<mt:if name="comment_preview_template">
<mt:include module="コメント入力フォーム" />
</mt:if>
<mt:comments>
<mt:commentsHeader><h3 class="comments-header">コメント<mt:entryCommentCount singular="[1]" plural="[#]" none="[0]" /></h3></mt:commentsHeader>
<mt:include module="コメント詳細" />
<mt:commentsFooter></mt:commentsFooter>
</mt:comments>
<mt:unless name="comment_preview_template">
<mt:include module="コメント入力フォーム" />
</mt:unless>
</div>
</mt:ifCommentsActive>
変更後
<mt:ifCommentsActive>
<div id="comments">
<mt:if name="comment_preview_template">
<mt:include module="コメント入力フォーム" />
</mt:if>
<mt:Comments lastn="$comments_per_page">
<mt:CommentsHeader>
<h2 class="comments-header"><$mt:EntryCommentCount singular="コメント(1)" plural="コメント(#)" none="コメント(0)"$></h2>
<mt:If tag="EntryCommentCount" gt="$comments_per_page">
<ul id="top-comment-nav">
<li id="top-prev-comments">
<a href="javascript://" id="top-prev-comments-link" title="古いコメント"><< 古いコメント</a>
</li>
<li id="top-num-comments"><span id="top-current-comments"></span></li>
<li id="top-next-comments">
<a href="javascript://" id="top-next-comments-link" title="新しいコメント">新しいコメント >></a>
</li>
</ul>
</mt:If>
<div id="comments-content" class="comments-content" style="clear: left;">
</mt:CommentsHeader>
<$mt:Include module="コメント詳細"$>
<mt:CommentsFooter>
</div>
</mt:CommentsFooter>
</mt:Comments>
<mt:If tag="EntryCommentCount" gt="$comments_per_page">
<mt:Ignore>ページネーションスクリプトによって変更されています。</mt:Ignore>
<ul id="comment-nav">
<li id="prev-comments">
<a href="javascript://" id="prev-comments-link" title="古いコメント"><< 古いコメント</a>
</li>
<li id="num-comments"><span id="current-comments"></span></li>
<li id="next-comments">
<a href="javascript://" id="next-comments-link" title="新しいコメント">新しいコメント >></a>
</li>
</ul>
</mt:If>
<mt:unless name="comment_preview_template">
<mt:include module="コメント入力フォーム" />
</mt:unless>
</div>
</mt:ifCommentsActive>
5.スタイルシートの修正
スタイルシートに以下の内容を追加します。これはページナビゲーション部分のデザインの調整なので、内容は適宜修正してください。
#top-comment-nav, #comment-nav {
list-style-image:none;
list-style-position:outside;
list-style-type:none;
margin:0 0 1em;
padding:0;
text-align:center;
width:100%;
}
#top-comment-nav li, #comment-nav li {
display:inline;
padding:0;
}
#top-prev-comments, #prev-comments {
margin:0 1em 0 0;
text-align:left;
}
#top-num-comments, #num-comments {
text-align:center;
}
#top-next-comments, #next-comments {
margin:0 0 0 1em;
text-align:right;
}
Movable Type(MT)5 テーマ修正(コメントのページ分割対応)
Category:[テンプレートセット, テーマ]
Tag:[5.0, MovableType, TemplateSet, Theme]
Permalink
配布中の Movable Type 5.0 テーマを修正しました。
1.改善箇所
Movable Type 5 で提供されているコメントのページ分割機能に対応しました。コメント部分が指定した件数以上になると、次のようにコメントをページ分割します。デフォルトの分割ページ数は 50 件です。

ページ分割の概要は下記を参照願います。
2.コメントの分割件数の変更方法
「ヘッダー」テンプレートモジュールの下記の value モディファイアの値を変更してください。
<mt:var name="comments_per_page" value="50">
Movable Type 5(MT5)テーマは、下記のページからダウンロードしてください。
Movable Type 5 のコメントのページ分割機能(その1:概要)
Movable Type 5 のコメント分割表示機能を紹介します。
機能自体は Movable Type 4.3で盛り込まれているので目新しいものではありませんが、「Movable Type 4.3 α版レポート」で簡単な紹介しか行っていなかったので、改めてエントリーしたいと思います。
1.概要
ブログ記事やウェブページへのコメント投稿数が一定数を超えると次のようにページ分割されます。

ページ送りをすると Ajax を使って表示されます。

この機能はテンプレートの設定で利用することができ、「クラシックブログ」等でも使えます。なお、デフォルトのページ分割数は 50 になっていますが、任意の件数に変更することができます。
2.分割ページ数を変更する
ブログ記事テンプレート・ウェブページテンプレートにある、以下の「50」の部分を変更します。
<$mt:Var name="comments_per_page" value="50"$>
とりあえず以上です。
時間の都合上、テーマへの適用方法については別エントリーで紹介します。
Movable Type 5 におけるウェブサイトとブログの複数指定方法
Movable Type 5 におけるウェブサイトとブログの複数指定方法を図にまとめました。
1.ウェブサイトでブログの情報を出力する場合
ウェブサイトのテンプレートタグに include_blogs="children" を指定します。例はウェブサイト配下のブログA~Cのウェブページをウェブサイトに表示する例です。箱の右上にマークがついているのが対象となります(以下同様)。

2.ウェブサイトで自ウェブサイトとブログの情報を出力する場合
ウェブサイトのテンプレートタグに include_blogs="children" と include_with_website="1" を加えて指定します。例はウェブサイト配下のブログA~Cとウェブサイトのウェブページをウェブサイトに表示する例です。

3.ブログで同一ウェブサイトのブログの情報を出力する場合
ブログのテンプレートタグに include_blogs="children" を指定します。例は同一ウェブサイトのブログA~CのウェブページをブログBに表示する例です。

4.ブログで同一ウェブサイトのブログとウェブサイトの情報を出力する場合
ブログのテンプレートタグに include_blogs="children" と include_with_website="1" を加えて指定します。例は同一ウェブサイトのブログA~CのウェブページとウェブサイトのウェブページをブログBに表示する例です。

5.ウェブサイトですべてのウェブサイトの情報を出力する場合
ウェブサイトのテンプレートタグに include_websites="all" を指定します。例はウェブサイトYにウェブサイトX~Zのウェブページをウェブサイトに表示する例です。

以上です。ちなみに、「children はウェブサイトのコンテキストでウェブサイト内のブログを対象にし、siblings は、ブログのコンテキストで同一ウェブサイト内のブログを対象にします」とドキュメントに書かれています。
Twitter社会論 ~新たなリアルタイム・ウェブの潮流
メディアジャーナリスト・津田大介さんのTwitter新書を読みました。
![]() | Twitter社会論 ~新たなリアルタイム・ウェブの潮流 (新書y) 洋泉社 2009-11-06 売り上げランキング : 54 Amazonで詳しく見る by G-Tools |
津田さんと言えば、Twitterでセミナーなどの実況中継を行う行為を指す「tusdaる」という俗語の元となった方です(著書内で名付け親は自身でないことを明記されています)。
ご本人も2007年4月から利用開始されており、Twitterで起きている様々な事象に対する見解や、先述の「tsudaる」ためのノウハウなどについても記されています。巻末には勝間さんとの対談もあり、Twitterの魅力と今後の可能性を知ることができる一冊です。
- 第1章 ツイッターとは何か?
-
- 1 ツイッターで今、何が起きているのか?
- 急増するユーザー数
- 注目を集めるツイッター
- ツイッターの生い立ち
- ツイッターの日本での広がり
- ユーザー数増加によるトラブルやセキュリティは?
- ツイッターのビジネスモデル
- 2 ツイッターとは何か?
- 「新しい情報流通インフラ」
- 140字という字数制限
- ツイッターの6つの特徴
- 1.リアルタイム性
- 「リアルタイム検索」の価値
- 2.強力な伝播力
- 3.オープン性
- モバツイッターの登場
- 多様な関連サービスの隆盛
- 4.ゆるい空気感
- 5.属人性が強い
- 6.自由度が高い
- 第2章 筆者のツイッター活用術
-
- 1 筆者のツイッター個人史
- ツイッターとの出会い
- リアルタイム・コミュニケーションの快楽
- ネット情報にタイトルなんていらない!?
- 非公開から公開へ
- 悩める公開ユーザー
- 思考をだだ漏れにすることで得られるもの
- 5通りの活用法と、「告知ツール」としてのツイッター
- 2 「tsudaる」技術
- 「tsudaる」とは何か
- 「tsudaる」スタイルの完成
- 「tsudaる」と呼ばれて
- ツイッター中継の効能
- 更なるインセンティブの可能性
- ツイッター中継と著作権問題
- 報道としてのツイッター中継
- ツイッター中継の「報道」としての意味
- 「tsudaる」技術
- 第3章 社会に広がるツイッター・インパクト
-
- 1 ツイッターとジャーナリズム
- マスメディア・ジャーナリズムの3つの機能
- ツイッター上で行われた「伝達機能」的報道
- ムンバイテロ報道の残した課題
- 秋葉原連続殺傷事件
- ハドソン川の旅客機不時着事故
- 「洪水」をきっかけに生まれた新しい伝達型ジャーナリズム
- モルドバやイランで発揮された「監視機能」
- 政治性を帯びるツイッター
- 政策形成のプロセスを透明化する「監視機能」
- ツイッターで「構築機能」は実現できるか
- 旧メディアとソーシャルメディアの連携の可能性
- ネット時代のジャーナリズム
- 2 ツイッターと政治
- オバマ大統領とソーシャル・メディアの威力
- 政治家に広がるツイッター活用
- 日本でも広がる政治家のツイッター活用
- カウンター・メディアとしてのブログ
- ツイッターの強力なカウンター機能
- 日本の政治化がツイッターを使う理由
- 逢坂誠二衆議院議員の場合
- 国会議員による実況中継
- ツイッターを通しての想い
- ツイッター「炎上」
- ツイッター議員との上手な付き合い方
- ツイッターと選挙
- ネットと政治
- 政治の現場とツイッター
- 英国政府の公式ツイッターガイドライン
- 日本の公的機関はツイッターをやるべきか
- 3 ツイッターとビジネス
- 企業のツイッター活用状況
- 大成功したデルの事例
- 企業のツイッター利用の4つのパターン
- ツイッター社が定義する企業のツイッター活用
- 企業活用の具体的事例
- 活用の限界とメリット
- 「人間力」の高い社員を担当にすべし
- スペシャル対談 勝間和代×津田大介 つぶやく力-ツイッターの可能性を探る
- きっかけはエゴサーチ
- 広瀬香美というユーザー
- ツイッターのもたらした発見
- フォロワー数というシビアな現実
- ツイッター時間、生活の時間
- ビジネスパーソンのツイッター活用術
- 非承認制のもたらす気安さ
- ツイッターは「原始インターネット」
- ツイッターはキャズムを越えるか
エクスプローラーだけを再起動する
現在使っているPCでexplorer.exeのメモリ使用量が異常に増加しています。画像で示している数値はそれほどでもありません(し、このPCでもないのです)が、長時間使用していると数百MBになるときがあります。
以前は再起動をしていたのですが、タスクマネージャでエクスプローラーだけを再起動すればよいことが分かったので、方法を紹介します。
タスクマネージャを起動し、プロセスタブをクリックして、explorer.exe を選択して、「プロセスの終了」をクリック。

確認のダイアログが開くので「プロセスの終了」をクリック。これでデスクトップの表示が消えますが気にせず作業を続けます。

タスクマネージャの「アプリケーション」タブをクリックして「新しいタスク」をクリック。

開いた画面で「explorer.exe」を入力します。これでエクスプローラーが再起動します。

なおメモリが増加することの根本的な解決には至っておりません。
Movable Type 5.0 のスケジュールタスクでエラーになる件について
Movable Type 5.0 のスケジュールタスクでエラーになる事象がありましたので、本エントリーにて情報展開しておきます。
1.問題点
カスタムフィールドを作成し、テンプレートにカスタムフィールドのテンプレートタグを記述した状態でブログ記事などの日時指定投稿を行なうと、スケジュールタスク実行時に次のような「日時指定されたブログ記事の再構築中にエラーが発生しました: ブログ記事「XX」の再構築中にエラーが発生しました: テンプレート「ブログ記事」の再構築中にエラーが発生しました: 不明なタグです: カスタムフィールドタグ名」というエラーになります。

すでにどなたかフィードバックされているかもしれませんが、シックスアパートにフィードバックしました。
簡単ですが以上です。
DefaultValueSetter プラグイン v0.10(Movable Type 5.0対応)
Category:[管理画面, 自作プラグイン]
Tag:[DefaultValueSetter, MovableType, Plugin]
Permalink
ブログ記事の入力フィールドに初期値を設定する DefaultValueSetter プラグインを Movable Type 5.0 用にバージョンアップしました。
このプラグインを利用すれば、ブログのブログ記事やウェブページの新規作成時に、
- タイトル
- 本文
- 追記
- タグ
- 概要
- キーワード
の各フィールドに任意の文字列を初期値として表示することができます。
1.ダウンロード
以下のページからダウンロードしてください。
2.使用方法
ブログ管理画面の「ツール」→「プラグイン」で「DefaultValueSetter ~」をクリックし、さらに「設定」をクリックすると次のような設定画面が表示されるので、任意の値を設定し、「変更を保存」をクリックします。
これで、ブログやウェブページの新規作成画面を開いたときに、設定した内容が反映されます。
Movable Type の配列とハッシュの入れ子
Movable Type では配列とハッシュの入れ子が可能です。
以前、MT4.1 でハッシュの入れ子が動作しなかったため、そのまま忘却の彼方でしたが、MT4.261 以降では動作しました。4.261 以前の 4.2x バージョンも動作するかもしれませんが未確認です。
それぞれの組み合わせで動作したサンプルを掲載します。
1.配列の入れ子
<mt:SetVar name="list[0]" value="0" />
<mt:SetVar name="list[1]" value="1" />
<mt:SetVar name="list[2]" value="2" />
<mt:SetVar name="foo[0]" value="$list" />
<mt:GetVar name="foo[0]" setvar="hoge" />
<mt:loop name="hoge">
<mt:GetVar name="__value__" />
</mt:loop>
2.配列とハッシュの入れ子
<mt:SetVar name="list[0]" value="0" />
<mt:SetVar name="list[1]" value="1" />
<mt:SetVar name="list[2]" value="2" />
<mt:SetVar name="foo{bar}" value="$list" />
<mt:GetVar name="foo{bar}" setvar="hoge"/>
<mt:loop name="hoge">
<mt:GetVar name="__value__" />
</mt:loop>
3.ハッシュと配列の入れ子
<$mt:SetVar name="week{mon}" value="Monday"$>
<$mt:SetVar name="week{tue}" value="Tuesday"$>
<$mt:SetVar name="week{wed}" value="Wednesday"$>
<$mt:SetVar name="week{thu}" value="Thursday"$>
<$mt:SetVar name="week{fri}" value="Friday"$>
<$mt:SetVar name="week{sat}" value="Saturday"$>
<$mt:SetVar name="week{sun}" value="Sunday"$>
<mt:SetVar name="list[0]" value="$week" />
<mt:GetVar name="list[0]" setvar="hoge" />
<mt:loop name="hoge">
<mt:GetVar name="__value__" />
</mt:loop>
4.ハッシュの入れ子
<mt:SetHashVar name="week">
<$mt:SetVar name="mon" value="Monday"$>
<mt:SetHashVar name="ampm">
<$mt:SetVar name="am" value="AM"$>
<$mt:SetVar name="pm" value="PM"$>
</mt:SetHashVar>
</mt:SetHashVar>
<mt:GetVar name="week{ampm}" setvar="foo" />
<mt:GetVar name="foo{am}" />
5.ポイント
入れ子の親データを取得する際は、GetVar(Var)タグに setvar モディファイアや SetVarBlock タグを組み合わせて、一旦他の変数に設定します。
<mt:GetVar name="foo[0]" setvar="hoge" />
次のような記述はできません。
<mt:GetVar name="foo[0][0]" />
6.制約
データを取得する際、mt:loop タグの入れ子は対応していないようです。
Movable Type(MT)5 テーマ修正(エクスポート時の不具合修正)
Category:[テンプレートセット, テーマ]
Tag:[5.0, MovableType, StyleCatcher, TemplateSet, Theme]
Permalink
配布中の Movable Type 5.0 テーマを修正しました。
1.問題点
テーマのエクスポートを実行すると次のような「~のファイナライズ中にエラーが発生しました~」というエラーが発生する。

2.原因
テーマのディレクトリ構成で、ウィジェットテンプレートのみ別ディレクトリに配置していたため。
他のテンプレートと同じディレクトリに配置するよう、ディレクトリ構成を見直し、エクスポートできることを確認しました。
Movable Type 5(MT5)テーマは、下記のページからダウンロードしてください。
ThinkPad X61 のバッテリーをリフレッシュする
「ThinkPad X61 用大容量バッテリー購入」の後で気がついたのですが、バッテリーをリフレッシュする方法があったので、紹介します。
リフレッシュとは、強制的にバッテリーの充電・放電・再充電することを指します。
まず、省電力マネージャーを開きます。省電力マネージャーを開くには、タスクバーに表示されたバッテリーマークを左クリックして「省電力マネージャーを起動する...」を選択します。
省電力マネージャーが開いたら「バッテリー情報」タブをクリックします。
次の画面で「バッテリーのメンテナンス」をクリックします。
「リセットの実行」をクリックします。
「続行」をクリックします。
なお、このリフレッシュはバッテリーが使えなくなる前に実行した方がいいみたいです。
ThinkPad X61 用大容量バッテリー購入
1年以上前から使っている ThinkPad X61 ですが、ついにバッテリーが充電されなくなってしまいました。
![]() | レノボ・ジャパン ThinkPad X61 7675A82 Lenovo 2008-06-13 売り上げランキング : 57795 Amazonで詳しく見る by G-Tools |
具体的には、タスクバーに表示されているバッテリーインジケーターでは80%ほどある状態ですぐに電源が落ちてしまいます。これが何回か続いたのと、とりあえず急いで使いたかったのでバッテリーを購入しました。
あとでバッテリーのリフレッシュが可能であることを知ったので、これについては別途エントリーします。
なお、以下にバッテリー診断ツールもあります。
これまでは、4セルのバッテリーを使っていましたが、使用時間が短いのが気になっていたので、思い切って8セルを購入しました(以下)。
![]() | レノボ・ジャパン ThinkPad X60シリーズ8セル大容量バッテリー 40Y7003 Lenovo 2006-02-15 売り上げランキング : 2508 Amazonで詳しく見る by G-Tools |
ちなみに4セルのバッテリーは以下です。
![]() | レノボ・ジャパン ThinkPad X60シリーズ4セル拡張容量バッテリー 40Y7001 Lenovo 2006-02-15 売り上げランキング : 8790 Amazonで詳しく見る by G-Tools |
TableSelectEnabler プラグイン
Category:[管理画面, 自作プラグイン]
Tag:[MovableType, Plugin, TableSelectEnabler]
Permalink
Movable Type 5.0 のブログ・ウェブページ・コメントの各一覧画面から、ブログ・ウェブページ・コメントを選択しやすくするプラグインです。
例えば、ブログ記事の一括編集をする場合、Movable Type 4.x では、ブログ記事一覧から編集したいブログ記事を選択できる範囲が広かった(該当のブログ記事の枠のどの部分をクリックしても選択可)のですが、Movable Type 5.0 の管理画面ではチェックボックスを狙わないとチェックできないようになっています。
Movable Type 4.261のブログ記事一覧画面(マウスがある部分をクリックすると選択状態になる)

Movable Type 5.0のブログ記事一覧画面(マウスがある部分をクリックしても選択状態にならない)

なお、ここで挙げている以外の画面ではMT4並みの選択ができるようになっているので、単に設定もれなのかもしれません。
1.機能
このプラグインは次の機能を提供します。
- ブログ記事・ウェブページ・コメントの各一覧画面から、ブログ記事・ウェブページ・コメントのチェックをつける選択範囲を拡張します。
2.プラグインのダウンロード
下記のリンクからプラグインアーカイブをダウンロードし、任意のフォルダに保存してください。
修正履歴
2009.12.10 初版
プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
3.インストール
プラグインアーカイブを解凍し、中にある TableSelectEnabler フォルダを plugins ディレクトリにアップロードしてください。
ブログ管理画面より「システム」→「プラグイン」でプラグイン一覧を表示し、次のように表示されればOKです。

Movable Type 5.0 のタグクラウドについて
Movable Type 5.0 のタグクラウドの簡単な解説です。
クラッシックウェブサイトテーマのタグクラウドは次のようになっています。
<mt:Tags top="20" include_blogs="children" include_with_website="1">
<mt:If name="__first__">
<div class="widget-tag-cloud widget">
<h3 class="widget-header">タグクラウド</h3>
<div class="widget-content">
<ul>
</mt:If>
<li class="rank-<$mt:TagRank max="10"$>"><a href="javascript:void(0)" onclick="location.href='<$mt:TagSearchLink encode_js="1"$>';return false;" rel="tag"><$mt:TagName$></a></li>
<mt:If name="__last__">
</ul>
</div>
</div>
</mt:If>
</mt:Tags>
mt:Tags タグに include_blogs="children"(青字部分)が設定されているの、ウェブサイト配下のブログのブログ記事に付与されたタグを収集対象にするための設定です。
また、mt:Tags タグに include_with_website="1" (赤字部分)が設定されていることで、自ウェブサイトの情報も収集対象にしていますが、ウェブサイトにはブログ記事が存在しないので、この設定ではウェブサイトのタグは読み込まれません。
ウェブページのタグを読み込むには、先のサブテンプレーとの mt:Tags タグに type モディファイアを追加します。
<mt:Tags type="page" top="20" include_blogs="children" include_with_website="1">
…後略…
type="page" とすることで mt:Tags タグの収集対象をウェブページにします。
ただしこの設定では、ブログのブログ記事のタグは読み込まれず、ブログのウェブページのタグが読み込み対象となります。
また、これは前バージョンからの設定されているのですが、タグのリンクは JavaScript の location.href を使用して、href 属性から取得できないようになっており、クローラー対策と思われます。
…前略…
<a href="javascript:void(0)" onclick="location.href='<$mt:TagSearchLink encode_js="1"$>';return false;" rel="tag"><$mt:TagName$></a>
…後略…
Movable Type 5.0 にアップグレードする場合の注意事項
Movable Type 4.x から Movable Type 5.0 にアップグレードする場合の注意事項です。
1.環境変数 DefaultLanguage を設定する
アップグレード実行前に mt-config.cgi に環境変数 DefaultLanguage を設定してください。
DefaultLanguage ja
新規インストールではインストールウィザード実行により、この環境変数が自動的に設定されますが、Movable Type 4 まではこの環境変数が設定されていません。
設定されているか、そうでないかは最初のアップグレード画面で判別できます。
環境変数 DefaultLanguage を設定していない場合のアップグレード画面
![]()
環境変数 DefaultLanguage を設定した場合のアップグレード画面
![]()
この設定を行なわないでアップグレードを行なうと、コメント通知で文字化けが発生することを確認しています。
設定を行なわなかった場合のコメント通知

設定を行なった場合のコメント通知

テンプレート名なども英語が混在する可能性があります。下は環境変数 DefaultLanguage を設定しなかった場合のグローバルテンプレート一覧です。すべて英語表記になってしまってます。

テンプレートの表示を直すには、テンプレート一覧画面右にある「テンプレート初期化」をクリックして、「初期状態にリセット」を選択してください。

これで次のように直ります。

なお、DefaultLanguage はアップグレード後に追加しても有効になります(上の実験は後で追加してうまくいったものです)。
2.環境変数 SQLSetNames を設定する
データベースがMySQL 5.x で UTF-8 を利用している場合、mt-config.cgiに環境変数 SQLSetNames に 0 を設定します。
SQLSetNames 0
環境変数 SQLSetNames は、データベースへアクセスする際、利用する文字コードを 環境変数 PublishCharset で設定された文字コードに合わせるためのものです。1 を設定すれば、データベースの文字コードを PublishCharset の設定にあわせます。0 を設定すれば、データベースの文字コードにあわせます。
ただし、逆に文字化けしたという記事(以下)もあるので、ブログで利用している文字コードが UTF-8 であれば特に設定を行なわなくてもよいかもしれません。
WordPress 配布テーマのコメントフォームの英語表記を日本語に変更する
現在配布中の WordPress テーマのコメントフォームが英語表記となっているため、これを日本語に変更する方法です。ご質問を頂きましたので本エントリーにて紹介致します。
変更前

変更後

おおざっぱな説明ですいませんが、テーマのコメント(comments.php)を以下の内容に変更してください。日本語変更箇所は青色で示しています。
<?php // Do not delete these lines
if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
die ('Please do not load this page directly. Thanks!');
if (!empty($post->post_password)) { // if there's a password
if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie
?>
<p class="nocomments">This post is password protected. Enter the password to view comments.<p>
<?php return;
}
}
?>
<div id="comments">
<?php if ('open' == $post->ping_status) : // comment close ?>
<h3 class="comments-head">トラックバックURL</h3>
<input type="text" value="<?php trackback_url(true); ?>" size="60" readonly="readonly" id="trackbackurl" tabindex="1" accesskey="t" onfocus="this.select()" />
<?php endif; ?>
<h3 class="comments-head">コメント & トラックバック<!-- [<?php comments_number('No Responses', 'One Response', '% Responses' );?>]--></h3>
<?php if (!('open' == $post->comment_status) && ('open' == $post->ping_status)) : // comment close ?>
<p class="nocomments">コメントは締め切りました</p>
<?php elseif (('open' == $post->comment_status) && !('open' == $post->ping_status)) : // trackback close ?>
<p class="nocomments">トラックバックは締め切りました</p>
<?php elseif (!('open' == $post->comment_status) && !('open' == $post->ping_status)) : // comment and trackback close ?>
<p class="nocomments">コメント・トラックバックは締め切りました</p>
<?php endif; ?>
<?php if ($comments) : ?>
<div class="commentlist">
<?php foreach ($comments as $comment) : ?>
<div id="comment-<?php comment_ID() ?>" class="comment">
<?php if ($comment->comment_approved == '0') : ?>
<em>あなたの投稿コメントは承認待ちになっています.</em>
<?php endif; ?>
<div class="comment-content"><?php comment_text() ?></div>
<p class="comment-footer">Posted at <a href="#comment-<?php comment_ID() ?>"><?php comment_date('Y.m.j') ?> <?php comment_time() ?></a> by <?php comment_author_link() ?><?php if ( $user_ID ) : ?> | <?php edit_comment_link('edit','',''); ?><?php endif; ?></p>
</div>
<?php endforeach; /* end for each comment */ ?>
</div>
<?php else : // this is displayed if there are no comments so far ?>
<p class="nocomments">コメントはありません</p>
<?php endif; ?>
<?php if (('open' == $post->comment_status) && ('open' == $post->ping_status)) : // open ?>
<p><?php comments_rss_link('コメントフィードを購読する'); ?></p>
<?php endif; ?>
<?php if ('open' == $post->comment_status) : ?>
<h3 class="comments-head">コメント</h3>
<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php the_permalink(); ?>">logged in</a> to post a comment.</p>
<?php else : ?>
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" name="commentform" id="commentform">
<div id="comments-open-data">
<?php if ( $user_ID ) : ?>
<p><a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>でログインしています. (<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">ログアウト</a>)</p>
<?php else : ?>
<p><label for="author">名前:<?php if ($req) echo "(必須)"; ?></label><br />
<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="2" accesskey="n" />
</p>
<p><label for="email">メールアドレス: (公開されません) <?php if ($req) echo "(必須)"; ?></label><br />
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" accesskey="m" />
</p>
<p><label for="url">ウェブサイトURL:</label><br />
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" accesskey="w" />
</p>
<?php endif; ?>
<p><label for="url">コメント本文:</label><br />
<textarea name="comment" id="comment" cols="40" rows="8" tabindex="5" accesskey="c" onfocus="if (this.value == 'Please comment') this.value = '';" onblur="if (this.value == '') this.value = 'Please comment';">コメントしてください</textarea>
</p>
<p>コメント本文に次の(X)HTMLタグを使えます:<br /><?php echo allowed_tags(); ?></p>
<p><input name="submit" type="submit" id="submit" tabindex="6" value="投稿" accesskey="s" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>
</div>
</form>
<?php endif; // If registration required and not logged in ?>
<?php endif; // if you delete this the sky will fall on your head ?>
</div><!-- comments -->
ドロップシャドウつきの画像をセンタリングする
ドロップシャドウつきの画像をセンタリングする方法を紹介します。
以前紹介した、「CSSで画像に影をつける(ドロップシャドウ)」では、画像のセンタリングを行うことはできません。

本エントリーの設定を行うことで、次のようにセンタリングすることができます。確認ブラウザは Windows XP+ Firefox3.5/IE6/IE7/Opera10/Safari4 です。

1.基本
「CSSで画像に影をつける(ドロップシャドウ)」のマークアップに加え、さらに青色の div 要素を追加します。
<div class="image" style="width:300px">
<span class="shadow">
<img alt="coffee" src="http://user-domain/coffee.jpg" width="300" height="199" />
</span>
</div>
マークアップのキモは、追加した div 要素に、画像と同じ幅の width プロパティを設定することです。
そして、以下のセレクタを追加します(セレクタ名は相応しい名称に適宜変更してください)。
.image {
margin: 0 auto;
}
2.IE6 以外に対応させる場合
1項の設定ではIE6に対応しません。IE6にも対応させる場合は、1項のマークアップをさらに div 要素で括ります。
<div class="image-ie6">
<div class="image" style="width:300px">
<span class="shadow">
<img alt="coffee" src="http://user-domain/coffee.jpg" width="300" height="199" />
</span>
</div>
</div>
そして、以下のセレクタを追加します(セレクタ名は相応しい名称に適宜変更してください)。
.image-ie6 {
text-align: center;
}
ImageSizeGenerator プラグイン v1.00
先日公開した、Movable Type のブログ記事内の img 要素に width 属性・height 属性を追加する「ImageSizeGenerator プラグイン」をバージョンアップしました。
このバージョンアップでは、Technology on Information の天野さんに変換部分のソースコードを提供していただきました。ありがとうございました。
1.変更内容
- img 要素が1行に複数ある場合や、img 要素の途中に改行がある場合の width 属性・height 属性の追加に対応
- 追記フィールドのimg 要素の変換にi対応
2.ダウンロード
最新版のプラグインは下記のページよりダウンロードしてください。
Excel で大量のシートから特定のシートを一発で探す方法
Excel で複数のシートを使っていると、シートの移動が結構面倒です。

ということで、大量のシートから特定のシートを一発で探す方法を紹介します。
左下の▲が横になったボタン(通常はこれでシートを移動)のあたりを右クリックします。ボタンは4つありますが、どこで右クリックしても同じです。

これでシート選択のサブメニューが表示されるのでそれを使って移動できます。

さらに、上のサブメニューの一番下にある「シートの選択...」を選べば、次のようなシート選択画面が開くので、あとは、移動したいシートをクリックして「OK」をクリックすれば移動できます。

ウェブサイトとブログでグローバルナビゲーションを共有する
Movable Type 5 でウェブサイトとブログでグローバルナビゲーションを共有する方法です。
方法は色々あると思いますが、ここではウェブサイトのテンプレートモジュールをグローバルナビゲーションとして利用する方法を紹介します。
1.グローバルナビゲーションのメニューにウェブサイトのメインページとブログのメインページを含むケース
次のように、ウェブサイトのメインページ(ホーム)と、ウェブサイト配下のブログのメインページ(ブログ名を使用)をウェブサイトとブログで共有する例です。

1.1 ウェブサイトの「ナビゲーション」テンプレートモジュール
ウェブサイトのテンプレートモジュール「ナビゲーション」を新規作成し、次の内容を設定します。
<ul>
<li><a href="<mt:WebsiteURL />">ホーム</a></li>
<mt:Blogs include_blogs="children">
<li><a href="<mt:BlogURL />"><mt:BlogName></a></li>
</mt:Blogs>
</ul>
mt:WebsiteURL タグでウェブサイトのURLを出力します。また、ブログの情報は mt:Blogs ブロックタグを利用して出力します。その際、include_blogs="children" を設定することで、ウェブサイト配下のすべてブログが出力対象となります。
1.2 ウェブサイトで「ナビゲーション」を利用する場合
ウェブサイトの各テンプレートから「ナビゲーション」テンプレートモジュールを呼び出すには、次のmt:Include タグを使用します。
<mt:Include module="ナビゲーション" />
1.3 ウェブサイト配下のブログで「ナビゲーション」を利用する場合
ブログの各テンプレートから「ナビゲーション」テンプレートモジュールを呼び出すには、mt:Include タグを、mt:BlogParentWebsite タグで括ります。また、mt:Include タグに blog_id モディファイアを設定し、ウェブサイトのIDを設定します。
<mt:BlogParentWebsite>
<mt:WebsiteID setvar="website_id">
<mt:Include blog_id="$website_id" module="ナビゲーション" />
</mt:BlogParentWebsite>
mt:Include タグを mt:BlogParentWebsite タグで括ることで、mt:Include タグはブログが属するウェブサイトのコンテキストで動作します。つまり、「ナビゲーション」テンプレートモジュールに設定したテンプレートタグは、ウェブサイトのコンテキストで評価されます。
2.グローバルナビゲーションのメニューにウェブサイトのメインページ・ウェブページとブログのメインページ・ウェブページを含むケース
2.1 ウェブサイトの「ナビゲーション」テンプレートモジュール
ウェブサイトのテンプレートモジュール「ナビゲーション」を新規作成し、次の内容を設定します。
<ul>
<li><a href="<mt:WebsiteURL />">ホーム</a></li>
<mt:Pages>
<li><a href="<mt:PagePermalink />"><mt:PageTitle /></a></li>
</mt:Pages>
<mt:Blogs include_blogs="children">
<li><a href="<mt:BlogURL />"><mt:BlogName /></a></li>
<mt:Pages>
<li><a href="<mt:PagePermalink />"><mt:PageTitle /></a></li>
</mt:Pages>
</mt:Blogs>
</ul>
ウェブサイトのウェブページも、ブログのウェブページも、mt:Pages タグを利用します。ブログのウェブページは mt:Blogs タグを使ってブログのコンテキストで動作させます。
実際にはプライベートタグなどを使ってウェブページのフィルタリングを行なうと思いますが、ここでは説明を割愛します。
2.2 ウェブサイトで「ナビゲーション」を利用する場合
1.2 と同様です。
2.3 ウェブサイト配下のブログで「ナビゲーション」を利用する場合
1.3 と同様です。
Ajax ハイブリッド月送りカレンダー
Movable Type 4 以降のバージョンで、ブログ記事が投稿されていない月のカレンダーも含めて月送りができるカレンダーのハイブリッド版です。
「Ajax ダイナミック月送りカレンダー」ではダイナミックパブリッシングを利用して、ブログ記事が投稿されていない月のカレンダーも含めた月送りカレンダーを紹介しましたが、ハイブリッド月送りカレンダーでは、該当月にブログ記事が存在する場合は、スタティックパブリッシングで生成されたカレンダーページを Ajax で読み込むようにしました。
また、カレンダーの月送りのリンク部分にも同じロジックを適用して、ダイナミック・スタティックの振り分けを行っています。動作イメージを図に示します。
1.スクリプトのダウンロード・アップロード
下記のスクリプトをダウンロードします。
prototype.js("Download the latest version" のリンクをクリック)ajaxCalendar.js(ハイブリッド用)dayChecker.js(「2.ダウンロード」にある dayChecker.js をクリック)
ダウンロードした ajaxCalendar.js と dayChecker.js はメインページと同じディレクトリにアップロードしてください。
また prototype.js も、ダウンロードしたスクリプトをメインページと同じディレクトリにアップロードしてください。
2.プラグインのダウンロード・アップロード
下記のリンクをクリックして、GetQueryString プラグインをダウンロードします。このプラグインは、ダイナミックパブリッシングでカレンダーページを呼び出すときにクエリーを取得するためのものです。
ダウンロードしたアーカイブを展開し、中にある GetQueryString フォルダを plugins ディレクトリにアップロードします。
アップロード後、システム管理画面の「ツール」→「プラグイン」で GetQueryString が表示されていればOKです。

3.日別アーカイブの追加
この設定は、カレンダーに表示された日付のリンク先のページとして日別アーカイブを生成するためのものです。
「デザイン」→「テンプレート」→「アーカイブテンプレート」→「ブログ記事リスト」を選択。

アーカイブマッピングの「新しいアーカイブマッピングを作成」をクリック。

「日別」を選択して「追加」をクリック。

これで日別アーカイブが追加されました。

再構築アイコンをクリックして、日別アーカイブページを生成してください。
4.カレンダーテンプレート作成(ダイナミックパブリッシング用)
ダイナミックパブリッシング対応のカレンダーを作成します。管理メニューの「デザイン」→「テンプレート」→「インデックステンプレート」→「インデックステンプレートを作成」をクリック。

次画面で下記を設定してください。
- テンプレート名(一番上のテキストフィールド):カレンダー
- 出力ファイル名:calendar.php
- テンプレートの種類:カスタムインデックステンプレート
- ファイルへのリンク:(設定不要)
- 公開:ダイナミック
- テンプレートの内容(テキストエリア):下記
<mt:GetQueryString name="date" setvar="yearmonth" />
<mt:GetQueryString name="date" regex_replace="/^(\d\d\d\d).*/","\$1" setvar="year" />
<mt:GetQueryString name="date" regex_replace="/.*(\d\d)$/","\$1" setvar="month"/>
<mt:GetVar name="month" op="--" setvar="prev_month" />
<mt:GetVar name="year" setvar="prev_year" />
<mt:if name="prev_month" eq="0">
<mt:SetVar name="prev_month" value="12" />
<mt:SetVar name="prev_year" op="--" />
</mt:if>
<mt:if name="prev_month" lt="10">
<mt:GetVar name="prev_month" regex_replace="/(.*)/","0\$1" setvar="prev_month" />
</mt:if>
<mt:GetVar name="month" op="++" setvar="next_month" />
<mt:GetVar name="year" setvar="next_year" />
<mt:if name="next_month" eq="13">
<mt:SetVar name="next_month" value="1" />
<mt:SetVar name="next_year" op="++" />
</mt:if>
<mt:if name="next_month" lt="10">
<mt:GetVar name="next_month" regex_replace="/(.*)/","0\$1" setvar="next_month" />
</mt:if>
<mt:setVarBlock name="current_prev_ym"><mt:getvar name="prev_year" /><mt:getvar name="prev_month"></mt:setVarBlock>
<mt:setVarBlock name="current_next_ym"><mt:getvar name="next_year" /><mt:getvar name="next_month"></mt:setVarBlock>
<mt:setVar name="prev_flag" value="0" />
<mt:setVar name="next_flag" value="0" />
<mt:ArchiveList archive_type="Monthly">
<mt:ArchiveDate format="%Y%m" setvar="ym" />
<mt:if name="ym" eq="$current_prev_ym">
<mt:setVar name="prev_flag" value="1" />
</mt:if>
<mt:if name="ym" eq="$current_next_ym">
<mt:setVar name="next_flag" value="1" />
</mt:if>
</mt:ArchiveList>
<table summary="<mt:GetVar name="year" />/<mt:GetVar name="month" />">
<caption class="calendarhead">
<mt:if name="prev_flag">
<a href="javascript:void(0);" onclick="getCalendar_static('<mt:BlogArchiveURL />calendar/<mt:getvar name="prev_year" />/<mt:getvar name="prev_month">/');"><</a>
<mt:else>
<a href="javascript:void(0);" onclick="getCalendar_dynamic('<mt:BlogURL />calendar.php?date=<mt:getvar name="prev_year" /><mt:getvar name="prev_month">');"><</a>
</mt:if>
<mt:GetVar name="year" />年<mt:GetVar name="month" />月
<mt:if name="next_flag">
<a href="javascript:void(0);" onclick="getCalendar_static('<mt:BlogArchiveURL />calendar/<mt:getvar name="next_year" />/<mt:getvar name="next_month">/');">></a>
<mt:else>
<a href="javascript:void(0);" onclick="getCalendar_dynamic('<mt:BlogURL />calendar.php?date=<mt:getvar name="next_year" /><mt:getvar name="next_month">');">></a>
</mt:if>
</caption>
<tr height="15">
<th abbr="Sunday" class="sunday">Sun</th>
<th abbr="Monday">Mon</th>
<th abbr="Tuesday">Tue</th>
<th abbr="Wednesday">Wed</th>
<th abbr="Thursday">Thu</th>
<th abbr="Friday">Fri</th>
<th abbr="Saturday" class="saturday">Sat</th>
</tr>
<mt:Calendar month="$yearmonth">
<mt:CalendarWeekHeader>
<tr>
</mt:CalendarWeekHeader>
<td><mt:CalendarIfBlank><mt:Else><span></mt:Else></mt:CalendarIfBlank><mt:CalendarIfEntries><mt:Entries lastn="1"><a href="<mt:EntryLink archive_type="Daily" />"><mt:CalendarDay /></a></mt:Entries></mt:CalendarIfEntries><mt:CalendarIfNoEntries><mt:CalendarDay /></mt:CalendarIfNoEntries><mt:CalendarIfBlank><mt:Else></span></mt:Else></mt:CalendarIfBlank></td>
<mt:CalendarWeekFooter>
</tr>
</mt:CalendarWeekFooter>
</mt:Calendar>
</table>
テンプレートの設定部分は次のようになります。

5.カレンダーテンプレート作成(スタティックパブリッシング用)
ブログ管理画面の「デザイン」→「テンプレート」→「アーカイブ」→「アーカイブテンプレートを作成:ブログ記事リスト」をクリックし、次画面で下記を設定してください。
- テンプレート名:カレンダー(名称は何でもOKです)
- このテンプレートにリンクするファイル:(設定不要)
- テンプレートの内容:下記
<mt:ArchiveDate format="%m" setvar="month">
<mt:GetVar name="month" op="--" setvar="prev_month" />
<mt:ArchiveDate format="%Y" setvar="prev_year" />
<mt:if name="prev_month" eq="0">
<mt:SetVar name="prev_month" value="12" />
<mt:SetVar name="prev_year" op="--" />
</mt:if>
<mt:if name="prev_month" lt="10">
<mt:GetVar name="prev_month" regex_replace="/(.*)/","0$1" setvar="prev_month" />
</mt:if>
<mt:GetVar name="month" op="++" setvar="next_month" />
<mt:ArchiveDate format="%Y" setvar="next_year" />
<mt:if name="next_month" eq="13">
<mt:SetVar name="next_month" value="1" />
<mt:SetVar name="next_year" op="++" />
</mt:if>
<mt:if name="next_month" lt="10">
<mt:GetVar name="next_month" regex_replace="/(.*)/","0$1" setvar="next_month" />
</mt:if>
<mt:setVarBlock name="current_prev_ym"><mt:getvar name="prev_year" /><mt:getvar name="prev_month"></mt:setVarBlock>
<mt:setVarBlock name="current_next_ym"><mt:getvar name="next_year" /><mt:getvar name="next_month"></mt:setVarBlock>
<mt:setVar name="prev_flag" value="0" />
<mt:setVar name="next_flag" value="0" />
<mt:ArchiveList archive_type="Monthly">
<mt:ArchiveDate format="%Y%m" setvar="ym" />
<mt:if name="ym" eq="$current_prev_ym">
<mt:setVar name="prev_flag" value="1" />
</mt:if>
<mt:if name="ym" eq="$current_next_ym">
<mt:setVar name="next_flag" value="1" />
</mt:if>
</mt:ArchiveList>
<table summary="<MTArchiveDate format="%Y/%m">">
<caption class="calendarhead">
<mt:if name="prev_flag">
<a href="javascript:void(0);" onclick="getCalendar_static('<mt:BlogArchiveURL />calendar/<mt:getvar name="prev_year" />/<mt:getvar name="prev_month">/');"><</a>
<mt:else>
<a href="javascript:void(0);" onclick="getCalendar_dynamic('<mt:BlogURL />calendar.php?date=<mt:getvar name="prev_year" /><mt:getvar name="prev_month">');"><</a>
</mt:if>
<mt:ArchiveDate format="%B %Y" />
<mt:if name="next_flag">
<a href="javascript:void(0);" onclick="getCalendar_static('<mt:BlogArchiveURL />calendar/<mt:getvar name="next_year" />/<mt:getvar name="next_month">/');">></a>
<mt:else>
<a href="javascript:void(0);" onclick="getCalendar_dynamic('<mt:BlogURL />calendar.php?date=<mt:getvar name="next_year" /><mt:getvar name="next_month">');">></a>
</mt:if>
</caption>
<tr height="15">
<th abbr="Sunday" class="sunday">Sun</th>
<th abbr="Monday">Mon</th>
<th abbr="Tuesday">Tue</th>
<th abbr="Wednesday">Wed</th>
<th abbr="Thursday">Thu</th>
<th abbr="Friday">Fri</th>
<th abbr="Saturday" class="saturday">Sat</th>
</tr>
<MTCalendar month="this">
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td><MTCalendarIfBlank><MTElse><span></MTElse></MTCalendarIfBlank><MTCalendarIfEntries>
<MTEntries lastn="1"><a href="<$MTEntryLink archive_type="Daily"$>"><$MTCalendarDay$></a></MTEntries>
</MTCalendarIfEntries><MTCalendarIfNoEntries><$MTCalendarDay$></MTCalendarIfNoEntries><MTCalendarIfBlank>
<MTElse></span></MTElse></MTCalendarIfBlank></td><MTCalendarWeekFooter></tr></MTCalendarWeekFooter></MTCalendar>
</table>
保存後、アーカイブマッピングに「月別」を追加し、アーカイブのパスから「カスタム...」を選択し、「calendar/%y/%m/%i」を設定してください。「公開」は「スタティック」のままにしてください。
6.テンプレート修正
6.1 外部ファイルのインクルード
ブログ管理画面の「デザイン」→「テンプレート」→「テンプレートモジュール」→「HTMLヘッダー(公開テンプレートの場合は「ヘッダー」)」をクリックし、下記の内容を追加して「保存」をクリック。
<script type="text/javascript" src="<$MTBlogURL$>prototype.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>ajaxCalendar.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>dayChecker.js"></script>
注:利用しているテンプレートによって設定位置が異なりますが、ブラウザでページを表示したときに <head>~</head> の間(</head> の直前を推奨)になるように設定します。
6.2 カレンダー表示部分の設定
「デザイン」→「ウィジェット」→ウィジェットテンプレートの「カレンダー」をクリックし、下記の内容に入れ替えたあと、「保存」をクリックします。「カレンダー」ウィジェットがない場合は、「ウィジェットテンプレートを作成」をクリックして以下の内容を設定してください。
<mt:Date format="%Y%m" setvar="current_month" />
<mt:setVar name="flag" value="0" />
<mt:ArchiveList archive_type="Monthly">
<mt:ArchiveDate format="%Y%m" setvar="month" />
<mt:if name="month" eq="$current_month">
<mt:setVar name="flag" value="1" />
</mt:if>
</mt:ArchiveList>
<div id="calendar"></div>
<script type="text/javascript">
<mt:if name="flag">
getCalendar_static("<$MTBlogArchiveURL$><MTEntries lastn="1" sort_order="descend"><$MTEntryDate format="calendar/%Y/%m/" $></MTEntries>");
<mt:else>
getCalendar_dynamic("<$MTBlogURL$>calendar.php?date=<MTDate format="%Y%m" $>");
</mt:if>
</script>
div は空要素ですが、Ajax によってこの部分にカレンダーが表示されます。
修正した「カレンダー」ウィジェットを利用していない場合は、ブログ管理画面の「デザイン」→「ウィジェット」をクリック、さらに利用しているウィジェットセットをクリックし、「インストール済み」にドラッグして「変更を保存」をクリックしてください。
7.CSS修正
「デザイン」→「テンプレート」→「スタイルシート」を選択し、下記の内容を追加して「保存および再構築」をクリックします。
#calendar {
margin: 5px 0 10px;;
color: #444444;
}
.calendarhead {
padding-bottom: 5px;
font-size: 9px;
letter-spacing: 0.2em;
}
#calendar table {
padding: 0;
border-collapse: collapse;
}
#calendar th {
padding-bottom: 3px;
text-align: center;
font-size: 9px;
width: 23px;
}
#calendar td {
padding: 2px 0;
text-align: center;
font-size: 10px;
line-height: 120%;
}
.today {
display: block;
border: 1px solid #444444;
}
.sunday,
.holiday,
.holiday a:link,
.holiday a:visited {
color: #e50003;
}
.saturday,
.saturday a:link,
.saturday a:visited {
color: #0000ff;
}
公開テンプレートの場合、すでにカレンダー関係のスタイル設定が行われており、設定の競合を避けるため、古い設定(下)を削除またはコメントアウトしてください。
/* カレンダー */
.calendarhead {
padding-bottom: 5px;
text-align: center;
color: #333;
font-size: 9px;
background: none;
letter-spacing: 0.2em;
}
#calendar table {
text-align: center;
padding: 0px;
border-collapse: collapse;
}
#calendar th {
padding-bottom: 3px;
font-size: 8px;
width: 23px;
}
#calendar td {
padding: 2px 0;
font-size: 9px;
line-height: 120%;
}
span.day {
text-align: center;
font-size: 9px;
}
span.saturday {
color: blue;
}
span.sunday {
color: #e50003;
}
td.today {
display: block;
border: 1px solid #333;
}
8.再構築
全てのページを再構築します。これでメインページ等を表示してカレンダーが表示されれば完成です。
9.注意事項
日別アーカイブは先に再構築しておいてください。日別アーカイブがなくても再構築エラーにはなりませんが、日付のリンクから日別アーカイブに移動できません。
2010.01.27
5項にアーカイブマッピングの説明を追加しました。
2010.09.24
5項にアーカイブマッピングの画像を追加しました。
2011.02.04
GetQueryStringのバージョンを0.02にアップしました。
![Movable Type逆引きデザイン事典[4.2/4.1対応]](http://ecx.images-amazon.com/images/I/51p0cmzoLLL._SL160_.jpg)




