Movable Type 4.24 リリース
Movable Type 4.24 がリリースされました。セキュリティアップデートです。
[重要] セキュリティアップデート Movable Type 4.24 の提供を開始
Community.pack を含む Movable Type において確認されたセキュリティ問題を解決した、バージョン Movable Type 4.24 の提供を開始いたします。
問題点は、通常、アクセスユーザーは、別のユーザーのプロフィールを編集することはできませんが、特殊な操作を行うと、サインインしていないユーザーが特定のユーザーのプロフィール編集画面にアクセスできてしまうようです。
次のバージョンが修正版としてリリースされています。バージョンアップに伴い、パスワードの再設定を行う方法が変更されています。
- Movable Type 4.24 (Open Source)
- Movable Type 4.24 (Professional Pack, Community Pack を同梱)
- Movable Type Commercial 4.24 (Professional Pack を同梱)
- Movable Type Enterprise 4.24
それぞれの最新版は下記のリンクからダウンロードできます。
Movable Type Pro の 4.23-ja と 4.24-ja の差分ファイルは次の通りです。ファイルの差し替えではなく、通常の手順にもとづいた Movable Type のアップグレードを推奨します。
- addons/Commercial.pack/templates/professional/recover-password.mtml
- addons/Community.pack/config.yaml
- addons/Community.pack/lib/MT/App/Community.pm
- addons/Community.pack/lib/MT/Community/L10N/ja.pm
- default_templates/recover-password.mtml
- lib/MT/App/ActivityFeeds.pm
- lib/MT/App/Comments.pm
- lib/MT/Author.pm
- lib/MT/CMS/Tools.pm
- lib/MT/L10N/de.pm
- lib/MT/L10N/es.pm
- lib/MT/L10N/fr.pm
- lib/MT/L10N/ja.pm
- lib/MT/L10N/nl.pm
- lib/MT/Upgrade.pm
- lib/MT.pm
- mt-check.cgi
- php/mt.php
- tmpl/cms/dialog/recover.tmpl
- tmpl/comment/login.tmpl
- 【追加】tmpl/cms/dialog: new_password.tmpl
特定のランクのタグだけを表示する
Movable Type で特定のランクのタグだけを表示するカスタマイズです。ご質問を頂きましたので、情報展開します。
1.特定のランクのタグだけを表示
デフォルトテンプレートの「タグクラウド」に対し、青色部分を追加し、赤色部分には1~10の値を設定します。なお、MTTags タグの top モディファイアは削除してください。
<mt:If tag="Tags">
<div class="widget-tag-cloud widget">
<h3 class="widget-header">タグクラウド</h3>
<div class="widget-content">
<ul>
<mt:Tags>
<mt:TagRank max="10" setvar="tag_rank" />
<mt:If name="tag_rank" eq="値">
<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>
</mt:Tags>
</ul>
</div>
</div>
</mt:If>
2.複数のランクのタグを表示
1項のサブテンプレートに追加した MTIf タグの eq モディファイアを変更します。例えば8以上のランクを取得したい場合は次のようにします。
<mt:If tag="Tags">
<div class="widget-tag-cloud widget">
<h3 class="widget-header">タグクラウド</h3>
<div class="widget-content">
<ul>
<mt:Tags>
<mt:TagRank max="10" setvar="tag_rank" />
<mt:If name="tag_rank" ge="8">
<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>
</mt:Tags>
</ul>
</div>
</div>
</mt:If>
MTMultiBlog タグブロック内での MTInclude タグの入れ子について(続き)
以前、「MTMultiBlog タグブロック内での MTInclude タグの入れ子について」という記事で、「MultiBlog タグと Include タグを入れ子にすると再構築エラーが発生する」という旨の内容を書いたのですが、コメントで対処方法を教えて頂きました。ありがとうございました。
また前回は、事象の詳細まで記していませんでしたので、今回は図で説明します。
1.現状の動作
まず前提として、図の一番上の「ポータルブログ(blog_id1)」では、その下にある2つのブログ(blog_id2/blog_id3)を、MultiBlog プラグインの設定で収集対象にしています。

この状態で、ポータルブログのメインページを再構築すると、メインページからインクルードしている2つのテンプレートモジュールは①のルートでインクルードされることを期待するのですが、現状の動作では、
- 「記事の概要」テンプレートモジュール:ポータルブログのテンプレートモジュールをインクルード
- 「記事のメタデータ」テンプレートモジュール:MultiBlog タグで処理しているブログのテンプレートモジュール(②③)をインクルード
となります。
blog_id2 のブログの処理では、ポータルブログと同じテンプレートモジュールがあるので再構築エラーにならないのですが、blog_id3 のブログの処理では、該当のテンプレートモジュールがみつからないため、再構築エラーになります(前回記事の事象)。

つまり、入れ子になっているテンプレートモジュールは、ポータルブログのテンプレートモジュールが使われません。
MultiBlog プラグインの設定で収集するブログを指定する代わりに、include_blogs モディファイアで収集するブログを指定しても、同様の事象でした。
ちなみに、テンプレートモジュールがないブログに同じ名前のテンプレートモジュール(内容は適当)を作れば、正常に再構築が完了します。
2.対処方法
各 Include タグに blog_id モディファイアを記述し、モディファイアの値に自ブログの番号を設定します。
先の図の場合、ポータルブログの「記事の概要」テンプレートモジュールからインクルードしている「記事のメタデータ」の MTInclude タグに、自分のブログID「blog_id="1"」を設定します。
対処前
<mt:include module="記事のメタデータ" />
対処後
<mt:include module="記事のメタデータ" blog_id="1" />
3.参考記事
参考記事は下記です。ありがとうございました。
Movable Type のテンプレートタグでよくある5つの書き間違い
Movable Type でテンプレートタグやテンプレートの実験をするとき、私はいつも手入力で作るため、頻繁に文法誤りをしています。
ここでは、よくありがちな5つの書き間違いを紹介します。
中には、保存や再構築でエラーにならないパターンもあるので、きちんと書いたつもりなのにうまく動かないときなど、参考になれば幸いです。
1.終了タグのスラッシュ抜け
終了タグにスラッシュがありません。終了タグは開始タグをコピー&ペーストして書くので、個人的にはこのパターンが一番多いです。
【誤】
<mt:Entries>
<$mt:EntryTitle$>
<mt:Entries>
【正】
<mt:Entries>
<$mt:EntryTitle$>
</mt:Entries>
これは再構築でエラーになるのですぐに分かります。
2.変数の「$」抜け
変数を name モディファイア以外で使うときは、大抵先頭に「$」をつけないといけないのですが、ときどき忘れます。「$」をつけ忘れると、当然、期待した動作になりません。
【誤】
<$mt:BlogEntryCount setvar="foo"$>
<mt:Entries lastn="foo">
:
</mt:Entries>
【正】
<$mt:BlogEntryCount setvar="foo"$>
<mt:Entries lastn="$foo">
:
</mt:Entries>
配列変数のインデックスやハッシュ変数のキー、関数、特殊変数で「$」の有無がわけがわからなくなります。下は多分合ってます。
<mt:SetVar name="list{$foo}" value="var" />
<mt:SetVar name="push(list)" value="foo" />
<mt:GetVar name="list[$__counter__]" />
変数の「$」抜けは再構築エラーになりません。
3.空要素のブロックタグ
最後がスラッシュで閉じている、いわゆる空要素のブロックタグは、再構築エラーになりません。
【誤】
<mt:SetVarBlock name="foo" value="var" />
【正】
<mt:SetVar name="foo" value="var" />
または
<mt:SetVarBlock name="foo">var</mt:SetVarBlock>
余談ですが、
<mt:Entires />
も正常に再構築できます。
4.ダブルクォーテーション抜け
正常に再構築できて、正常な結果になりません。気がつかないと、「MTのバグ」で済ませてしまいます。
【誤】
<$mt:SetVar name="foo" value="var$>
<$mt:GetVar name="foo"$>
【正】
<$mt:SetVar name="foo" value="var"$>
<$mt:GetVar name="foo"$>
5.接頭辞(mt:)抜け
もはや、MTMLですらありません。
【誤】
<if>
<div>XXXXX</div>
</if>
【正】
<mt:if>
<div>XXXXX</div>
</mt:if>
あと、長い名前のテンプレートタグを使っていると「mt:」を抜きがちです。EntriesHeader や TopLevelCategories とか。意外に、For や Loop もそのまま書いてしまいます。私だけ?
バッファローコクヨサプライ BUFFALO カードリーダー/ライター microSD対応 超コンパクト ブラック BSCRMSDCBK
携帯のデータをPCに移動しようと思い、microSD 専用のカードリーダーを探していて、これを見つけました。
![]() | バッファローコクヨサプライ BUFFALO カードリーダー/ライター microSD対応 超コンパクト ブラック BSCRMSDCBK バッファローコクヨサプライ 2008-12-02 売り上げランキング : 399 Amazonで詳しく見る by G-Tools |
パッとみると、USBの本体部分が欠落しているように見えますが、本当にありません。
大きさはこんなもんです。

microSD はUSB のコネクタから差し込むという、斬新なアイデア。

とびださないように最後までしっかり差し込めば装填完了です。

ノートPCに装着したところです。ほとんど出っぱりがなくスマートに収まります。

対応メディアは、microSD(最大2GB)/microSDHC class2(最大8GB)/microSDHC class4(最大8GB)/microSDHC class6(最大8GB)です。
また、本体にはストラップがついているので、携帯と一緒に持ち運ぶのに便利です。Amazon の評価もかなりいいみたいです。
普通のカードリーダーは形が大きかったり、USBコネクタがあったりと、ちょっとかさばるのが欠点ですが、このサイズはおすすめです。
UserNameEditController プラグイン
Category:[管理画面]
Tag:[MovableType, Plugin, UserNameEditController]
Permalink
Movable Type 4およびMovable Type 5 で、一般ユーザーがユーザー情報を編集するとき、「ユーザー名」や「表示する名前」の変更を禁止するプラグインです。ご要望を頂きましたので作成してみました。
1.ユーザー情報変更について
一般ユーザーは、ログイン後のブログ管理画面で右上にある「こんにちはXXさん」のリンクからユーザー情報の編集画面に進むことができます。

ユーザー情報編集画面では、ユーザー名などの変更ができます。
MT4の画面

MT5の画面

通常、サービスに登録した後はユーザー名(ログイン名)は変更できないものが多いので、Movable Type の運用方法によっては、これに準じた動作にした方が好ましい場合があります。
エンタープライズ版では標準機能としてユーザー名の変更が禁止できるように思われますが、エンタープライズ版以外では機能の差別化で提供されていないようです。
2.UserNameEditController プラグインの機能
一般ユーザーのユーザー情報変更時、「ユーザー名」の入力フィールドを disabled にします。
MT4の画面

MT5の画面

また、オプションによって「表示する名前」「電子メール」「URL」の入力フィールドを disabled にします。
MT4の画面

MT5の画面

3.価格
本プラグインの価格は次の通りです。
- 有償ライセンス:30000円/1サーバ
- 個人ライセンス(無償):無償
有償ライセンスでご利用の場合、プラグインの動作確認後、下記から指定の金額をお支払いください。お支払い後に不具合が発覚しても払い戻しは致しかねますのでご注意ください。なお、銀行振り込みをご希望の場合は、大変ご面倒ですが、お問い合わせからご連絡ください。折り返し振り込み口座をご連絡致します。
なお、個人ライセンスの方も、プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
4.UserNameEditController プラグインのダウンロード
下記の UserNameEditController.zip をクリックして、プラグインアーカイブをダウンロードします。
2009.02.23 初版 2009.03.28 v0.02 電子メール・ウェブサイトURLの編集禁止を追加 2009.04.05 v0.03 電子メール情報が送信されない不具合を修正 2010.12.07 v0.10 Movable Type 5対応版をリリース(プラグイン名変更)
5.プラグインのアップロード・インストール
プラグインアーカイブを展開し、中にある UserNameEditController フォルダ、またはAuthorInformationEditControllerフォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロード。
システム管理画面のプラグイン一覧で、「UserNameEditController ~」または「AuthorInformationEditController~」が表示されればインストール完了です。
MT4版の場合

これでインストールは完了です。インストール直後から、一般ユーザーが開いたユーザー情報編集画面で「ユーザー名」は編集できなくなります。なお、システム管理者はインストールに関わらずユーザー名の編集が可能です。
6.設定項目のカスタマイズ
プラグイン一覧の「UserNameEditController ~」または「AuthorInformationEditController~」をクリックし、さらに「設定」をクリックすれば、次の設定項目をカスタマイズできます。画面はMT5のものです。

- ユーザー情報へのリンク:チェックすれば、システム権限のないユーザーについて、管理画面右上にあるユーザー情報へのリンクを無効にします。
- 編集禁止にするフィールド
- 表示名:チェックすれば、システム権限のないユーザーについてユーザー情報の「表示名」のフィールドを編集不可にします。
- 電子メール:チェックすれば、システム権限のないユーザーについてユーザー情報の「電子メール」のフィールドを編集不可にします。
- ウェブサイトURL:チェックすれば、システム権限のないユーザーについてユーザー情報の「ウェブサイトURL」のフィールドを編集不可にします。
注:MT4版には「ユーザー情報へのリンク」を無効にする機能はありません。
7.注意事項
本プラグインによって、管理画面ではユーザー名を編集できなくなりますが、コミュニティソリューションでは、ユーザー名はブログの「ユーザー情報の編集」から変更することができます。変更はできないので問題ありません。
ミシュランの
ガイドブックで、
![]() | ミシュランガイド東京2009 日本語版 日本ミシュランタイヤ株式会社 2008-11-21 売り上げランキング : 5627 Amazonで詳しく見る by G-Tools |
iPod / iPod nano で高音質なステレオ録音ができる GriffinTechnology iTalk Pro GRI-IP-000063 が 76% オフ
以前紹介した「GriffinTechnology iTalk Pro GRI-IP-000063」が、最近の当サイトの Amazon 売り上げランキングで常にランクインしています。
- 2009年1月:1位
- 2008年12月:4位
- 2008年11月:1位
- 2008年10月:1位
- 2008年9月:7位
- 2008年8月:7位
- 2008年7月:5位
- 2008年6月:1位
- 2008年5月:2位
ここ数ヶ月は上位に食い込んでいます。理由は簡単で、定価の7480円からかなり安くなっているからです。
過去のブログの記録を確認すると、次のような価格になっていました。
- 2008年11月:3,430円(54%オフ)
- 2008年10月:2,980円(60%オフ)
で、2009年2月現在、ついに76%オフの1800円まで価格が下がりました。3000円前後でためらっていた方も購入意欲をそそられるのではないでしょうか。
個人的にも良い音質を手軽に楽しめることは経験済みなので、おすすめです。
![]() | GriffinTechnology iTalk Pro GRI-IP-000063 Griffin Technology 2006-11-10 売り上げランキング : 423 Amazonで詳しく見る by G-Tools |
プロフィールページにタブを追加する
Movable Type コミュニティソリューションのプロフィールページに、任意のタブを追加する方法です。
変更前

変更後

1.テンプレートの修正
グローバルテンプレートの「プロフィール」に下記の青色部分を追加します。
...前略...
<ul id="tabs">
<li><a href="#profile-recent-actions" class="active" onclick="switchTabs('tabs',this)">最近のアクション</a></li>
<li><a href="#profile-comment-threads" class="" onclick="switchTabs('tabs',this)">コメントスレッド</a></li>
<li><a href="#profile-hoge" class="" onclick="switchTabs('tabs',this)">ほげほげ</a></li>
</ul>
<div id="profile-recent-actions" class="tab_content">
<h3 class="tab_content_label">最近のアクション</h3>
...中略...
</div>
<div id="profile-hoge" class="tab_content hidden">
<h3 class="tab_content_label">コメントスレッド</h3>
<p class="note">追加したタブメニューです。</p>
</div>
<mt:SetVarBlock name="profile_widgets">
...後略...
赤字の部分は他のタブメニューと異なる名称を設定して、a 要素の href 属性で設定したフラグメントが、div 要素のid 属性値と同じ内容になるようにします。
この規則を守れば、さらに複数のタブを追加することができます。
2.タブの初期動作を変更する
ページを表示したときに追加したタブを開きたい場合は、他のタブメニューに設定されている class 属性値 active(赤色)を削除し、追加したタブメニューの class 属性にactive(青色)を設定します。
さらに、他のタブコンテンツの div 要素の class 属性に hidden(青色)を追加し、追加したタブに対応するコンテンツの div 要素の class 属性には tab_content(青色)だけを設定します(前述のサブテンプレートでは追加したタブのコンテンツに hidden を設定しています)。
...前略...
<ul id="tabs">
<li><a href="#profile-recent-actions" class="active" onclick="switchTabs('tabs',this)">最近のアクション</a></li>
<li><a href="#profile-comment-threads" class="" onclick="switchTabs('tabs',this)">コメントスレッド</a></li>
<li><a href="#profile-hoge" class="active" onclick="switchTabs('tabs',this)">ほげほげ</a></li>
</ul>
<div id="profile-recent-actions" class="tab_content hidden">
<h3 class="tab_content_label">最近のアクション</h3>
...中略...
</div>
<div id="profile-comment-threads" class="tab_content hidden">
<h3 class="tab_content_label">コメントスレッド</h3>
...中略...
</div>
<div id="profile-hoge" class="tab_content">
<h3 class="tab_content_label">コメントスレッド</h3>
<p class="note">追加したタブメニューです。</p>
</div>
...後略...
コミュニティソリューションのプロフィールページに関する Tips
Movable Type 4.2(コミュニティソリューション)のプロフィールページに関する Tips です。
![]()
プロフィールページはコミュニティソリューションで欠かせないページで、サインアップユーザーの「最近のアクション」や「注目」「被注目」などの情報をダイナミックに表示してくれます。全く同じ機能ではありませんが、mixi にログインしたときに表示されるご自身のページを想像してもらえれば分かりやすいと思います。
プロフィールページはグローバルテンプレートの「プロフィール」が該当します。

1.プロフィールページの判定方法
プロフィールページと、それ以外のページを振り分けるには、次の If タグでくくります。変数 page_title には、「プロフィール」テンプレートで「ユーザーのプロフィール」が設定されているので、これを利用します。
<mt:if name="page_title" eq="ユーザーのプロフィール">
...略...
</mt:if>
2.プロフィールページの body 要素の class 属性値
body 要素の class 属性値には「mt-profile-view」が設定されます。これは、「プロフィール」テンプレートで次の処理があるためです。
<$mt:Include module="ヘッダー" body_class="mt-profile-view"$>
プロフィールページのスタイルを変更したい場合は、この class 属性値を利用すると良いでしょう。
3.利用中のヘッダーに追加する内容1
ヘッダーの先頭に下記のSetVarBlock タグを追加します。
<mt:SetVarBlock name="html_head" prepend="1">
<mt:SetVarBlock name="blog_id"><$mt:BlogID$></mt:SetVarBlock>
<mt:SetVarBlock name="profile_view_url"><$mt:CGIPath$><$mt:CommunityScript$>?__mode=view&blog_id=<$mt:BlogID$>&id=</mt:SetVarBlock>
</mt:SetVarBlock>
変数 html_head はhead 要素に各種データを追加するためのものでです。
変数 blog_id は、プロフィールページの title 要素にブログ名を表示するための判定用に使います。
変数 profile_view_url は、ユーザーのプロフィールページへのリンクになります。次のように、他のユーザーのリンクにジャンプするときの a 要素の href 属性にこの変数とユーザーIDを設定します。
<a href="<mt:GetVar name="profile_view_url" encode_html="1" /><mt:AuthorID />"><mt:AuthorDisplayName /></a>
以上です。
タブの追加方法は別エントリーします。
チャレンジ! Movable TypeをCMSとして使ってみよう!(第11回 個別のブログ記事テンプレートに着手する)
フリーランスWebデザイナー・黒野明子さんの gihyo.jp で Movable Type の連載第11回が公開されています。
チャレンジ! Movable TypeをCMSとして使ってみよう!- 第11回 個別のブログ記事テンプレートに着手する
第11回の「個別のブログ記事テンプレートに着手する」は、ブログ記事テンプレートの中で、IfCategoryタグを使ったカテゴリ名の判定で「最新情報カテゴリ」ページと「それ以外の」ページの再構築処理を振り分ける方法が紹介されています。
また、画像出力では、MTAssetProperty タグと property モディファイアを用いて、元画像の幅と高さを、img 要素の width 属性と height 属性に設定する方法も紹介されています。
JavaScript カレンダー修正(シルバーウィーク対応)
現在公開中の「JavaScript カレンダー」をバージョンアップし、2009年9月のシルバーウィークに対応しました。
次のように、9月22日が休日表示になります。9月の表示はとりあえず2015年まで確認しています。

当サイトで公開している「Ajax 月送りカレンダー」や「休日表示付きリアルタイムカレンダー」など、カレンダーの休日の色を変えるカスタマイズをご利用の方は、下記のリンクから dayChecker.js をダウンロードして、現在ご利用の dayChecker.js と入れ替えてください。
WordPress の場合はプラグインファイルに同梱していますので、プラグインファイルの中にある dayChecker.js の内容を一部入れ替えてください。
Ajax 月送りカレンダー(jQuery・MT4版)
jQuery を使った Movable Type 4 版の Ajax 月送りカレンダーのカスタマイズです。リアルタイムカレンダー(本日の日付の装飾)および土・日・休日表示も盛り込まれています。
これまでは prototype.js を用いたカスタマイズを公開していましたが、「jQuery版を作ってほしい」というリクエストを頂きましたので、本エントリーにて説明致します。
Ajax 月送りカレンダーの概要は「Ajax 月送りカレンダー」をご覧ください)。
ここではデフォルトテンプレートおよび公開テンプレートをサンプルにしますが、Ajax の動作はテンプレートに依存するものではありませんので、CSS を変更すれば他のテンプレートでもお使いになれます。
1.スクリプトのダウンロード・アップロード
下記のスクリプトをダウンロードします。
jquery.js("Download" のリンクをクリックし、次のページの「jquery-1.x.x.min.js」のリンクをクリックして、jquery.js というファイル名で保存、または保存後に jquery.js にリネーム)ajaxCalendar_jquery.jsdayChecker.js(「2.ダウンロード」にある dayChecker.js をクリック)
ダウンロードした ajaxCalendar_jquery.js と dayChecker.js はメインページと同じディレクトリにアップロードしてください。
また jquery.js も、ダウンロードしたスクリプトをメインページと同じディレクトリにアップロードしてください。
2.カレンダーテンプレート作成
注:ブログの文字コードが UTF-8 以外で運用されている場合は、2.1項のカスタマイズも併せて行ってください。
管理メニューの「デザイン」→「テンプレート」→「アーカイブテンプレート」→「アーカイブテンプレートを作成」の「ブログ記事リスト」をクリック。

次画面で下記を設定してください。
- テンプレート名(一番上のテキストフィールド):カレンダー
- ファイルへのリンク:(設定不要)
- テンプレートの内容(テキストエリア):下記のいずれか
デフォルトテンプレートの場合
<div class="widget-calendar widget">
<h3 class="widget-header"><MTArchivePrevious><a href="javascript:void(0);" onclick="changeMonth('<$MTBlogArchiveURL$><MTArchiveDate format="calendar/%Y/%m/%i">');"><</a> </MTArchivePrevious><$MTArchiveDate format="%B %Y"$><MTArchiveNext> <a href="javascript:void(0);" onclick="changeMonth('<$MTBlogArchiveURL$><MTArchiveDate format="calendar/%Y/%m/%i">');" >></a></MTArchiveNext></h3>
<div class="widget-content">
<table summary="<MTArchiveDate format="%Y/%m">">
<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>
</div>
</div>
公開テンプレートの場合
<table summary="<MTArchiveDate format="%Y/%m">">
<caption class="calendarhead">
<MTArchivePrevious>
<a href="javascript:void(0);" onclick="changeMonth('<$MTBlogArchiveURL$><MTArchiveDate format="calendar/%Y/%m/%i">');"><</a>
</MTArchivePrevious>
<$MTArchiveDate format="%B %Y"$>
<MTArchiveNext>
<a href="javascript:void(0);" onclick="changeMonth('<$MTBlogArchiveURL$><MTArchiveDate format="calendar/%Y/%m/%i">');" >></a>
</MTArchiveNext>
</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>
設定後は次のような感じになります。

設定が終わったら「保存」をクリックしてください。
2.1 ブログの文字コードがUTF-8以外の場合
Ajax(XMLHttpRequest)は UTF-8 で動作することを前提としています。他の文字コードでブログを運用している場合、本カスタマイズが正常に動作しない可能性があります。*1
ここではひとつの解決方法として Ogawa::memoranda さんの MT-I18N プラグインを利用する方法を紹介します。つまりブログの文字コードが UTF-8 以外の場合、プラグインを利用してカレンダーアーカイブの文字コードだけ UTF-8 で出力するという作戦です。
まず、MT-I18N Plugin.ja JP をダウンロードして、プラグイン mt-i18n.pl を plugins フォルダにアップロードします。
そして、2項で示したカレンダーテンプレート全体を下記の青色のタグで括ってください。
<MTEncodeText to="utf8">
:
(カレンダーテンプレート)
:
</MTEncodeText>
本プラグインを利用し、EUC-JP、Shith_JIS で作成した Movable Type のサイトで、カレンダー動作と日本語表示の正常性は確認済です。ただし、.htaccess 等で文字コードを強制的に指定している場合は未確認です。
3.カレンダーテンプレートを月別アーカイブに関連付け
テンプレートを保存すると、同じページの下に「アーカイブマッピング」の項目が表示されるので、「新しいアーカイブマッピングを作成」をクリック。

「種類」から「月別」を選択して「追加」をクリック。

これでカレンダーテンプレートが月別アーカイブとして定義され、カレンダー用の「パス」が表示されます。
注:「月別」欄の右側にあるチェックボックスは絶対にチェックしないでください。

次に「パス」欄の右にあるセレクトボックスより「カスタム」を選択。

「パス」欄に下記の内容を設定して、「保存」をクリックしてください。
calendar/%y/%m/%i

下のようになればアーカイブマッピングの設定完了です。

4.日別アーカイブの追加
この設定は、カレンダーに表示された日付のリンク先のページとして日別アーカイブを生成するためのものです。
注:この設定を行わないと月別アーカイブの再構築で下記のエラーが表示されます。

「デザイン」→「テンプレート」→「アーカイブテンプレート」→「ブログ記事リスト」を選択し、アーカイブマッピングの「新しいアーカイブマッピングを作成」をクリック。

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

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

5.テンプレート修正
5.1 script 要素の追加
head 要素の内容が記述されているテンプレートモジュールを編集し、1項でダウンロードした外部ファイルの呼び出すための script 要素を追加します。利用中のテンプレートによって編集するテンプレートモジュールが異なるので、下記を参考にしてください。
- MT4.0x/MT4.1x デフォルトテンプレート:「デザイン」→「テンプレート」→「テンプレートモジュール」→「ヘッダー」
- MT4.2x デフォルトテンプレート:「デザイン」→「テンプレート」→「テンプレートモジュール」→「HTMLヘッダー」
- 公開テンプレート:「デザイン」→「テンプレート」→「テンプレートモジュール」→「ヘッダー」
MT 4.0x/MT4.1xのデフォルトテンプレート、または公開テンプレートの場合、編集画面にある、</head> の直前に下記を追加します。MT 4.2デフォルトテンプレートの場合、編集画面にある <$mt:CCLicenseRDF$> の直前に下記を追加し、「保存」をクリックします。
<script type="text/javascript" src="<$MTBlogURL$>jquery.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>ajaxCalendar_jquery.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>dayChecker.js"></script>
Movable Type 4.2x のデフォルトテンプレートでは、head 要素自体はメインページインデックステンプレートやアーカイブテンプレートに記述されています。
5.2 カレンダー表示部分の設定
「デザイン」→「ウィジェット」→「カレンダー」をクリックし、ウィジェットの内容を下記と入れ替え、「保存」をクリック。MT4.0x をお使いの場合は、「デザイン」→「テンプレート」→「サイドバー(2カラム)」または「サイドバー(3カラム)」をクリックして、カレンダーを表示したい位置に貼り付けてください。
<div id="calendar"></div>
<script type="text/javascript">
getCalendar("<$MTBlogArchiveURL$>", "<$MTBlogID$>", "<$MTBlogArchiveURL$><MTEntries lastn="1" sort_order="descend"><$MTEntryDate format="calendar/%Y/%m/" $></MTEntries>");
</script>
div は空要素ですが、Ajax によってこの部分にカレンダーが表示されます。
5.3 「カレンダー」ウィジェットの有効化
この作業は、「カレンダー」ウィジェットをブログに表示する設定になっていない場合のみ、行なってください。また、MT4.0x をお使いの方は、この作業をスキップしてください。
「デザイン」→「ウィジェット」→「3カラムのサイドバー(サブ)」または「3カラムのサイドバー(メイン)」をクリックし、5.2項で内容を変更した「カレンダー」ウィジェットを、ウィジェットセットを使って有効にします。デフォルトテンプレートを2カラムで使っている場合は、「2カラムのサイドバー」を選択してください。
選択したウィジェットセットで「カレンダー」が「利用可能」の一覧にある場合、「カレンダー」をドラッグして「インストール済み」に移動して「変更を保存」をクリックします(下)。「カレンダー」がすでに「インストール済み」にある場合は何もしなくて大丈夫です。

6.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;
}
7.再構築
全てのページを再構築します。これでメインページ等を表示してカレンダーが表示されれば完成です。
8.ページ表示時にローディング状態を表示する場合
インチキっぽいですが、4.2項で設定した
<div id="calendar"></div>
に、例えば青色の
<div id="calendar">loading ...</div>
を追加することで、ページ描画でカレンダーが表示されるまでローディング状態を示すことができます。img タグを設定すれば画像を表示することも可能です。
月送り時は挿入した文字は表示されません。またカレンダー取得失敗の場合は表示が消えます(これは7項の設定と関連します)。
9.カレンダー取得失敗時にメッセージ等を表示する
Ajax 月送りカレンダーは HTTP 非同期通信でカレンダーファイルを取得・表示しますが、何らかの原因で通信に失敗し、正常に取得できない可能性があります。当サイトで運用していた時も 503 エラーが多発すると取得に失敗するようです。
このカスタマイズではカレンダーの取得に失敗した場合、カレンダー表示エリアに正常に取得できなかったメッセージ
File Not Found
を表示するようにしています。このメッセージは ajaxCalendar.js の下記の青色部分が対応します。
function errorProcess() {
$("#calendar").html() = 'File Not Found';
}
メッセージを変更したい場合はこの青色部分を修正してください。またこの1行を丸ごと削除すれば、HTTP 非同期通信に失敗した場合にカレンダー表示エリアの書き換えが行われなくなりますが、6項の表示がそのまま残りますのでご注意ください。
「失敗してもカレンダーを表示させたい」という場合は、上記メッセージ出力の1行を削除して、6項の「loading ...」というメッセージの代わりに、カレンダータグ(通常のカレンダータグ)を埋め込んでおくという手もあります。通信が成功すれば Ajax 月送りカレンダーに切り替わり、失敗すれば通常のカレンダーがそのまま表示されます。
10.トラブルシューティング
10.1 一度も表示されない場合
カレンダーが正常に表示されない場合、つまり上記のカスタマイズをそのまま行って、カレンダーが表示される位置に "File Not Found" が表示された場合、以下の問題が考えられます(全てではありませんが思いついたものを挙げておきます)。
- カレンダーアーカイブの再構築ができていない
- カレンダーアーカイブページへのパス設定が誤っている
- テンプレートに設定したカレンダーアーカイブページの拡張子が不一致
- カレンダーアーカイブが UTF-8 で出力されていない
ご質問の前に確認していただきたいのは、
- ブラウザの[表示]-[ソース](あるいは「ソースの表示」)で、カレンダーを設定しているページのソースを表示
- 表示されたソースから下記のタグをみつけ、
getCalendar()の3番目のパラメータに設定されている URL(赤色)をブラウザに設定して実行
<div id="calendar"></div>
<script type="text/javascript">
getCalendar("http://user-domain/", "1", "http://user-domain/calendar/yyyy/mm/");
</script>
何も表示されない場合(404 Not Found)はカレンダーアーカイブへのパスの設定が誤っているか、アーカイブが生成されていない可能性があります。
逆に、カレンダーが表示されてブラウザにそのカレンダーが表示されない場合は、ブラウザの再起動や、ブラウザのキャッシュ・一時ファイルの削除等を行ってみてください。また UTF-8 以外で運用されている方は、カレンダーが表示されている状態で、ブラウザの[表示]-[エンコード]でカレンダーのページの文字コードが UTF-8 になっていることを確認してください。
10.2 一度表示され、リロードすると表示されなくなる場合
クッキーを削除した直後のカレンダーは表示されるけれども、月送りのリンクをクリックすると File Not Found が表示されるという場合は、2項のテンプレートに埋め込んでいるアーカイブパスが誤っている可能性があります。よくあるのは次のように最後の"/"が抜けているケースです。
<div id="calendar"></div>
<script type="text/javascript">
getCalendar("http://user-domain/archives", "1", "http://user-domain/archives/calendar/yyyy/mm/");
</script>
これは、管理画面の [設定] - [公開] で「アーカイブの設定」にチェックをつけていて、 [アーカイブURL] の最後に "/" がない場合に発生します。
2009.05.05
記事の内容をMT4.xのテンプレート名にあわせました。
*1:文字コードの設定を行わずに Movable Type をインストールした場合の文字コードは UTF-8 です。
基本からしっかりわかる WordPress 2.7 カスタマイズブック
「基本からしっかりわかる Movable Type 4.2 カスタマイズブック」の姉妹本で、WordPress 版が発売されます。
![]() | 基本からしっかりわかる WordPress 2.7 カスタマイズブック 大藤 幹 毎日コミュニケーションズ 2009-02-17 売り上げランキング : 13021 Amazonで詳しく見る by G-Tools |
この本の特徴は、PHP の基本的な解説が掲載されていることと、WordPress 2.7 のデフォルトテンプレートである「WordPress Default」と「WordPress Classic」のすべてのテンプレートの解説が行なわれていることの2点でしょう。
またリファレンスも掲載されているので、初めて WordPress を始める方や、テンプレートのカスタマイズを行いたい方にお勧めと思われます。
- 第1章 カスタマイズの前準備
- 1-1 ローカル環境の構築
- 1-2 データベースの作成
- 1-3 WordPressのインストール
- 第2章 テーマの仕組み
- 2-1 WordPressのテーマとは?
- 2-2 テーマのインストール
- 2-3 CSSだけのテーマ
- 2-4 テーマを構成するファイル
- 第3章 PHPとWordPressのタグ
- 3-1 PHPの基礎知識
- 3-2 PHPの制御構造
- 3-3 WordPressループ
- 3-4 英語を日本語に変換する関数
- 第4章 WordPress Classic徹底解剖
- 4-1 WordPress Classicのファイル構成
- 4-2 基本的なページ構造
- 4-3 トップページのXHTML
- 4-4 記事別ページのXHTML
- 4-5 style.css(スタイルシート)
- 4-6 index.php(テンプレート)
- 4-7 header.php(モジュールテンプレート)
- 4-8 comments.php(モジュールテンプレート)
- 4-9 footer.php(モジュールテンプレート)
- 4-10 sidebar.php(モジュールテンプレート)
- 4-11 comments-popup.php(モジュールテンプレート)
- 第5章 WordPress Default徹底解剖
- 5-1 WordPress Defaultのファイル構成
- 5-2 基本的なページ構造
- 5-3 トップページのXHTML
- 5-4 記事別ページのXHTML
- 5-5 style.css(スタイルシート)
- 5-6 index.php
- 5-7 header.php(モジュールテンプレート)
- 5-8 searchform.php(モジュールテンプレート)
- 5-9 sidebar.php(モジュールテンプレート)
- 5-10 footer.php(モジュールテンプレート)
- 5-11 single.php
- 5-12 comments.php(モジュールテンプレート)
- 5-13 page.php
- 5-14 archive.php
- 5-15 search.php
- 5-16 404.php
- 5-17 comments-popup.php(モジュールテンプレート)
- 5-18 image.php
- 5-19 archives.php
- 5-20 links.php
- 第6章 カスタマイズ・サンプル
- 6-1 ヘッダの背景画像を変更する1(Default)
- 6-2 ヘッダの背景画像を変更する2(Default)
- 6-3 サイドバーの余白を調整する(Classic)
- 6-4 サイドバーの見出しに背景をつける(Default)
- 6-5 コメントをポップアップ・ウインドウに表示させる(Classic)
- 6-6 不要な部分を削除する(Default)
- 6-7 テキストを書き換える(Default)
- 6-8 日付・時刻の表示形式を変更する(Default)
- 6-9 トラックバックURLを表示させる(Default)
- 6-10 グローバル・ナビゲーションを追加する(Default)
- 6-11 IE対策用の専用外部スタイルシートを読み込ませる
- 付録 タグ・フック・関数リファレンス
ぎくっとする
Movable Type サイトデザイン&レシピ事典 Movable Type4.2対応
2月17日に Movable Type 4.2 の本「Movable Type サイトデザイン&レシピ事典 Movable Type4.2対応」が発売されます。
![]() | Movable Type サイトデザイン&レシピ事典 Movable Type4.2対応 エ・ビスコム・テック・ラボ 毎日コミュニケーションズ 2009-02-17 売り上げランキング : 146205 Amazonで詳しく見る by G-Tools |
この本は、「パーツ集」と「レシピ集」の2部構成になっています。
「パーツ集」は「ヘッダー」「ブログ記事の一覧」といった、主要なサブテンプレートを、最小限のXHTMLマークアップを行なっただけのシンプルなパーツとして提供しているようです。
「レシピ集」は「パーツ集」を組み合わせて、ブログやWebサイトの構築方法を紹介しています。ここでは、デフォルトテンプレートからカスタマイズする方法と、オリジナルのテンプレートを1から作成する方法の2つを紹介しています。
料理にたとえれば、食材の紹介が「パーツ」、食材を使った調理法が「レシピ」といったところでしょうか。
以下、Amazon に掲載されている目次一覧です。
- Chapter 1 基本情報
- Chapter 2 ヘッダー
- Chapter 3 記事一覧
- Chapter 4 記事
- Chapter 5 カテゴリー
- Chapter 6 日付アーカイブ
- Chapter 7 画像
- Chapter 8 ウェブページ
- Chapter 9 コメント/トラックバック
- Chapter 10 検索/タグ検索
- Chapter 11 マルチブログ
- Chapter 12 レシピ:デフォルトテンプレートのカスタマイズ
- Chapter 13 レシピ:オリジナルテンプレートの作成
Movable Type 4.2 テンプレートセット(コミュニティブログ対応版)修正
Category:[テンプレート, テンプレートセット]
Tag:[MovableType, Template, TemplateSet]
Permalink
先日配布を開始した、「Movable Type 4.2 用のテンプレートセット(コミュニティブログ対応版)」を修正しました。修正内容は次の通りです。
- プロフィールページにサイドバー追加
- プロフィールページのレイアウト修正
修正後のプロフィールページは、次のようになります。
テンプレートセットは下記のページからダウンロードしてください。このテンプレートセットは「スタイル対応版(フッタ付きリキッドレイアウト対応)」にコミュニティ用のテンプレートを追加したものです。
RecommendedEntry プラグイン
Category:[拡張テンプレートタグ]
Tag:[MovableType, Plugin, RecommendedEntry]
Permalink
Open MagicVox.net のぴろりさんが配布している RecommendedEntry プラグインを導入してみました。
各ブログ記事ページの下にある、「この記事を読んだ人はこんな記事も読んでいます」のリンクはこのプラグインで生成しています。

このプラグインを利用するには、ページの PHP 化が必要です。
以下、プラグイン設定方法です。
1.プラグインのダウンロード
「オススメ記事を紹介するMovableTypeプラグイン:RecommendedEntry」の「ダウンロード」にある「」をクリックして、プラグインアーカイブをダウンロードします。

2.プラグインのインストール
アーカイブを展開して、中にある RecommendedEntry.pl を plugis ディレクトリにアップロードします。
ブログ管理画面の「システムメニュー」→「プラグイン」でプラグイン一覧画面に進み、「RecommendedEntry 1.00」が表示されればインストール完了です。

3.インデックステンプレートの作成
ブログ管理画面の「デザイン」→「テンプレート」→「インデックステンプレートを作成」をクリックし、新しいインデックステンプレートを作成します。各設定内容は次のとおりです。
- テンプレート名:recommended
- テンプレートの内容:「オススメ記事を紹介するMovableTypeプラグイン:RecommendedEntry」の「2.エントリ一覧用インデックステンプレートの作成」にある内容をコピー
- 出力ファイル名:recommended.php
設定が完了したら保存・再構築してください。なお、このインデックステンプレートはすべてのブログ記事の情報を作成するので、ブログ記事数が多い場合は「RebuildIndexFilter プラグイン」と併用するとよいでしょう。
4.データファイル保存用ディレクトリの作成
RecommendeEntry プラグインでは、あるブログ記事から他のブログ記事へアクセスした時に、ブログ記事ページ単位にデータファイルを作成・更新します(5項で追加するサブテンプレートでその動作を行ないます)。
そのデータファイルを保存するためのディレクトリを作成します。ここでは仮に「hoge」というディレクトリを作成します。ブログ記事アクセス時に書き込みできるよう、ディレクトリのパーミッションは適宜変更してください。
データファイル名は、「ブログ記事ID.txt」になります。下は、FFFTPで見た、当サイトのデータファイルディレクトリです。

5.ブログ記事テンプレートの修正1
ブログ管理画面の「デザイン」→「テンプレート」→「ブログ記事」をクリックし、ブログ記事テンプレートの一番先頭に下記の内容を追加します。
<mt:UseRecommendedEntry template="recommended" datapath="/home/user/public_html/hoge" />
赤色部分はそれぞれ、
- template モディファイア:3項で作成したインデックステンプレートのテンプレート名
- datapath モディファイア:4項で作成したデータファイル保存用ディレクトリ(フルパス)
を設定します。
なお、当サイトでは、PHPファイルで条件付きGETの設定を行なっているので、どちらを先に設定すればいいのか悩みましたが、とりあえず、条件付きGETを先頭にして、その直後に前述のコードを設定しました。
設定に失敗している場合は、ページを表示したときにエラーメッセージが出るので、「RecommendedEntry プラグイン」の「困った時は」を参照すると良いでしょう。
6.ブログ記事テンプレートの修正2
ブログ記事テンプレートに対し、記事冒頭の「この記事を読んだ人はこんな記事も読んでいます」というリストを出力したい場所に、次のようなサブテンプレートを追加します。
<h2>この記事を読んだ人はこんな記事も読んでいます</h2>
<ul>
<mt:RecommendedEntries count="10">
<li><a href="<mt:RecommendedEntryParam name="permalink" />"><mt:RecommendedEntryParam name="title" /></a></li>
</mt:RecommendedEntries>
</ul>
プラグイン導入直後は見出し以外表示されませんが、ブログ記事を渡り歩けば、次第に表示内容が充実していきます。
カテゴリーアーカイブページの最後に「続きを読む」のリンクを表示する
カテゴリーアーカイブページで表示するブログ記事数を制限している場合、ページの最後に「続きを読む」のリンクを表示し、そのリンクをクリックすれば、月別カテゴリーアーカイブページにジャンプするカスタマイズです。
例えば、カテゴリーアーカイブページで新着5件のブログ記事を表示している場合、「続きを読む」のリンクをクリックすれば、新着6件目のブログ記事のある月別カテゴリーアーカイブページの該当記事の位置までジャンプします。
図にすると次のような感じです。

1.カスタマイズ
当サイトの配布テンプレートの場合、「ブログ記事リスト」を次のように変更します。他のテンプレートでも構造はそれほど大きく変わらないので利用できると思います。
変更前
...前略...
<mt:if name="datebased_archive">
<mt:entries>
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
</mt:entries>
<mt:else>
<mt:entries limit="auto">
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
</mt:entries>
</mt:if>
</div>
</div>
...後略...
変更後
...前略...
<mt:if name="datebased_archive">
<mt:entries>
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
</mt:entries>
<mt:else>
<mt:entries lastn="6">
<mt:unless name="__last__">
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
<mt:else>
<mt:entryDate format="/%Y/%m/" setvar="year_month" />
<mt:entryID setvar="entry_id" pad="1" />
</mt:unless>
</mt:entries>
</mt:if>
<mt:if name="archive_class" eq="category-archive">
<mt:ifArchiveTypeEnabled archive_type="Category-Monthly">
<div class="content-nav">
<a href="<mt:blogURL /><mt:subCategoryPath separator="-" /><mt:getVar name="year_month" />#a<mt:getVar name="entry_id" />">続きを読む</a>
</div>
</mt:ifArchiveTypeEnabled>
</mt:if>
</div>
</div>
limit モディファイアを lastn モディファイアに変更し、lastn モディファイアの値に、「カテゴリーアーカイブページに表示したい件数+1」を設定します(ここでは「6」)。
最後の1件はカテゴリーアーカイブページに表示せず、ブログ記事情報(投稿月日とブログ記事ID)だけを取得し、変数に保持します。
そのあと、カテゴリーアーカイブで、月別カテゴリーアーカイブのアーカイブマッピングがある場合
のみ、ブログURL・サブカテゴリーパスと変数の情報を使って、月別カテゴリーページの該当記事へのアンカーを生成します。
2.注意事項
余談です。
元テンプレートが limit モディファイア「auto」を使っているので、当初は次のように、limit モディファイアと unique モディファイアを組み合わせ、新着1件のブログ記事情報を取得しようと思いましたが、正常に動作しません(情報が取得できず)でした。
...前略...
<mt:if name="datebased_archive">
<mt:entries>
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
</mt:entries>
<mt:else>
<mt:entries limit="auto">
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
</mt:entries>
</mt:if>
<mt:if name="archive_class" eq="category-archive">
<mt:ifArchiveTypeEnabled archive_type="Category-Monthly">
<mt:entries unique="1" limit="1">
<mt:entryDate format="/%Y/%m/" setvar="year_month" />
<mt:entryID setvar="entry_id" pad="1" />
</mt:entries>
<div class="content-nav">
<a href="<mt:blogURL /><mt:subCategoryPath separator="-" /><mt:getVar name="year_month" />#a<mt:getVar name="entry_id" />">続きを読む</a>
</div>
</mt:ifArchiveTypeEnabled>
</mt:if>
</div>
</div>
...後略...
3.関連記事
Movable Type 4.2 テンプレートセット(コミュニティブログ対応版)
Category:[テンプレート, テンプレートセット]
Tag:[MovableType, Template, TemplateSet]
Permalink
Movable Type 4.2 用のテンプレートセット(コミュニティブログ対応版)の配布を開始します。現状はα版という位置づけでお試しください。
テンプレートセットは下記のページからダウンロードしてください。このテンプレートセットは「スタイル対応版(フッタ付きリキッドレイアウト対応)」にコミュニティ用のテンプレートを追加したものです。
追加機能は次の通りです。
1.サインアップ・サインイン
ブログのページからサインアップやサインインが行なえます。
サインイン前

サインイン後

2.ブログ記事の投稿
メインページ下にある「新しいブログ記事を作成」をクリックすれば、ブログのページからブログ記事の投稿が行なえます。

3.プロフールページ
ユーザー名をクリックすれば、ユーザーのプロフィールページを表示します(サイドバー部分は未作成です)。

過去の
Movable Type 4.2 配布テンプレートセット修正(カテゴリーアーカイブ・コメント完了)
配布中の Movable Type 4.2 テンプレートを修正しました。修正内容は次の2点です。
- カテゴリーアーカイブに月別カテゴリーリストが表示されない不具合を修正
- 「スタイル」機能で、コメント完了ページのカラムレイアウトが変更されるよう改善
カテゴリーアーカイブに月別カテゴリーリストが表示されない原因は、カテゴリアーカイブでのカテゴリ月別リスト表示の判定に使用していた予約変数 module_category-monthly_archives が、4.2 ではカテゴリアーカイブで「1」が設定されなくなったためです(4.1からの動作変更)。
テンプレートをご利用中で不具合を修正したい場合は、下記のリンクから最新版のテンプレートセットをダウンロードしてください。
ダウンロードしたテンプレートセットを plugins ディレクトリにアップロードして、下記のテンプレートを個別に初期化すればOKです。
- システムテンプレート:コメント完了
- ウィジェット:カテゴリ月別アーカイブ
テンプレートを初期化したくない場合は、次に示す内容にしたがって変更してください。
1.システムテンプレート:コメント完了
赤色部分を削除して青色部分を追加してください。
<__trans_section component="koikikukantemplateset">
<mt:setVar name="page_layout" value="layout-one-column" />
<mt:if name="body_class" eq="mt-comment-confirmation">
...中略...
<mt:include module="ヘッダー" />
<mt:unless name="page_layout" eq="layout-three-column-right">
<mt:if name="page_layout" like="three|left">
<div id="links-left-box">
<dl id="links-left">
<mt:include module="サイドバー2" />
<mt:if name="page_layout" like="two">
<mt:include module="サイドバー" />
</mt:if>
</dl>
</div>
</mt:if>
</mt:unless>
<div id="content">
<div class="blog">
...後略...
2.ウィジェット:カテゴリ月別アーカイブ
赤色部分を削除して青色部分を追加してください。
<mt:if name="module_category-monthly_archives">
<mt:if name="archive_class" like="category-archive|category-monthly-archive">
<mt:ifArchiveTypeEnabled archive_type="Category-Monthly">
<dt class="sidetitle">
Monthly <mt:categoryLabel />
</dt>
<dd class="side">
<mt:archiveList archive_type="Category-Monthly">
<mt:archiveListHeader>
<ul>
</mt:archiveListHeader>
<li><a href="<mt:archiveLink />"><mt:archiveTitle /></a> [<mt:archiveCount />]</li>
<mt:archiveListFooter>
</ul>
</mt:archiveListFooter>
</mt:ArchiveList>
</dd>
</mt:ifArchiveTypeEnabled>
</mt:if>
Movable Type で複数ブログを検索する
Movable Type で複数ブログを作成している場合、複数のブログをまとめて検索することができます。
1.すべてのブログを検索する
デフォルトテンプレートを例にすると、「ウィジェットテンプレート」にある「検索」の中の、次の1行(赤色部分)を削除します。
<div class="widget-search widget">
<h3 class="widget-header">検索</h3>
<div class="widget-content">
<form method="get" action="<$mt:CGIPath$><$mt:SearchScript$>">
<input type="text" id="search" class="ti" name="search" value="<$mt:SearchString$>" />
<mt:If name="search_results">
<input type="hidden" name="IncludeBlogs" value="<$mt:SearchIncludeBlogs$>" />
<mt:Ignore>
<!-- use these options only with MT::App::Search::Legacy -->
<ul class="search-options">
<li><input type="checkbox" name="CaseSearch" /> 大文字/小文字を区別する</li>
<li><input type="checkbox" name="RegexSearch" /> 正規表現</li>
</ul>
</mt:Ignore>
<mt:Else>
<input type="hidden" name="IncludeBlogs" value="<$mt:BlogID$>" />
</mt:If>
<input type="hidden" name="limit" value="<$mt:SearchMaxResults$>" />
<input type="submit" accesskey="4" value="検索" />
</form>
</div>
</div>
...後略...
2.指定したブログを検索する
2番目のブログと3番目のブログを検索する場合、1項で削除した行を復活させ、value属性にブログIDをカンマ区切りで記述します。
<input type="hidden" name="IncludeBlogs" value="2,3" />
すべてのブログIDを指定すれば、1項と同じ効果があります。
3.注意事項
1項の方法では、検索結果テンプレートが使われず、アプリケーションディレクトリの search_templates ディレクトリにある、default.tmpl が読み込まれます(下)。

このテンプレートの代替テンプレートを、環境変数 SearchAltTemplate で設定することもできます。
2項の方法であれば本来のテンプレートが使われますが、検索結果テンプレートからインクルードするテンプレートが、検索対象のブログですべて揃っていないと、テンプレートが見つからない旨のエラーが発生します。
細かい部分まで動作を確認できていないので、いろいろ試してみてください。
ユーザー一覧に最新のブログ記事を表示する
ユーザー一覧に最新のブログ記事を表示するカスタマイズです。コミュニティ・ソリューションの利用を想定して、ユーザー名をクリックすれば、ユーザーのプロフィールページにジャンプするようにしています。

MTAuthorsタグでMTEntriesタグを使っても該当のユーザーコンテキストにならないようなので、
<mt:AuthorName setvar="author_name" />
<mt:Entries author="$author_name" lastn="1">
:
と、MTEntriesタグにauthorモディファイアを与え、ユーザー名を設定しているのがこのサブテンプレートのキモです。
当サイトで配布しているテンプレート用のサブテンプレートは、次のようになります。これをウィジェットやテンプレートモジュールに設定すれば、冒頭のキャプチャ画像のような表示になります。
<mt:Authors>
<mt:If name="__first__">
<dt class="sidetitle">ユーザー一覧</dt>
<dd class="side">
</mt:If>
<ul>
<mt:If tag="AuthorDisplayName">
<li><a href="<mt:CGIPath />mt-cp.cgi?__mode=view&blog_id=<mt:BlogID />&id=<mt:AuthorID />"><$mt:AuthorDisplayName$></a>
</mt:If>
<mt:AuthorName setvar="author_name" />
<mt:Entries author="$author_name" lastn="1">
<mt:EntriesHeader>
<ul>
</mt:EntriesHeader>
<li><a href="<mt:EntryPermalink>"><mt:EntryTitle /></a></li>
<mt:EntriesFooter>
</ul>
</mt:EntriesFooter>
</mt:Entries>
</li>
</ul>
<mt:If name="__last__">
</dd>
</mt:If>
</mt:Authors>
MTEntriesタグのlastnモディファイアの値を変更すれば表示するブログ記事数を変更できます。
ユーザーへのプロフィールページへのリンクを外したい場合は、
<li><a href="<$mt:Var name="profile_view_url" encode_html="1"$><$mt:AuthorID$>"><$mt:AuthorDisplayName$></a>
を
<li><$mt:AuthorDisplayName$>
に変更してください。
なお、テンプレートセットでコミュニティブログやコミュニティ掲示板を使用している場合は、
<li><a href="<$mt:Var name="profile_view_url" encode_html="1"$><$mt:AuthorID$>"><$mt:AuthorDisplayName$></a>
の部分は、
<li><a href="<$mt:Var name="profile_view_url" encode_html="1"$><$mt:AuthorID$>"><$mt:AuthorDisplayName$></a>
でOKで、変数profile_view_urlにプロフィールページへのURLが設定されています。
実験!Movable Typeラボラトリー
2009年2月17日(火)に、ロクナナワークショップさん主催のクリエイター向けイベント企画、「実験!Movable Typeラボラトリー」が開催されます。
「実験!Movable Typeラボラトリー」開催決定!
~最強のパブリッシングプラットフォーム・MTテンプレート徹底活用~
![]()
日時:2月17日(火)18:00~21:00(開場 17:30)
定員:70名
料金:4,000円(税込)※学生料金 2,000円(税込)
会場:東京・渋谷「ティーズサロン 2F」
ゲストには、シックス・アパートの上ノ郷谷太一さん、crema designの黒野明子さんという、Movable Type ではお馴染みのお二人が登場します。
このイベントでは、開発者側と制作者側の双方から、Movable Typeの新しい使い方を探っていくようで、事前に参加者の方から、Movable Type の使い方に関するアイデアを募集し、それらを取り上げて、ゲストのお二人にテンプレート作りに挑戦してもらうセッションもあります。Movable Type がブログツールや CMS にとどまらず、Publishing Platform としての新たな活用される方法が見出せるかもしれません。
まだ、チケットが残っているようなので、興味のある方は是非ご参加ください。
Movable Type のカテゴリーリストで特定のカテゴリーを非表示にする
Movable Type でカテゴリー一覧を表示するときに、特定のカテゴリーを非表示にするカスタマイズです。
1.基本
特定のカテゴリーを非表示にするには、次のように MTUnless タグと like モディファイアを組合わせて使用します。この例では、「cat1」「cat2」「cat3」のカテゴリーを、カテゴリー一覧に表示しません。
<mt:categories>
<mt:unless tag="CategoryLabel" like="cat1|cat2|cat3">
カテゴリーの処理
</mt:unless>
</mt:categories>
カテゴリーのフィルタリングでは、FilterCategories プラグインが有名で、上記のような書式でフィルタリングすることができますが、カテゴリー名が重複している場合は適正にフィルタリングできないという問題があります。
2.同名のカテゴリーが存在する場合
同名のカテゴリーが存在する場合は、tagモディファイア・like モディファイアとカテゴリーIDを組合わせてフィルタリングします。
<mt:categories>
<mt:unless tag="CategoryID" like="^3$||^5$|^7$">
カテゴリーの処理
</mt:unless>
</mt:categories>
likeモディファイアを使用する場合の注意点ですが、前述のサブテンプレートを、
<mt:categories>
<mt:unless tag="CategoryID" like="3|5|7">
カテゴリーの処理
</mt:unless>
</mt:categories>
と書くと、カテゴリーIDの番号が「3」「5」「7」を含むものすべてのID(「13」とか)が対象になってしまうため、正規表現の「^」と「$」を付与しています。
3.似たようなカテゴリー名が存在する場合
1項のようにカテゴリー名で判定するときも、冒頭の例では「cat1-1」なども含まれてしまうので、正規表現の「$」を付与して、
<mt:categories>
<mt:unless tag="CategoryLabel" like="cat1$|cat2$|cat3$">
カテゴリーの処理
</mt:unless>
</mt:categories>
とすると良いでしょう。
Amazon 2009年1月の注文ランキング
2009 年 1 月の Amazon 注文ランキングです。
1位の「基本からしっかりわかる Movable Type 4.2 カスタマイズブック(Web Designing Books)」は、多くの Movable Type 4.2 本の中でコンスタントに結構売れている1冊です。この本は、デフォルトテンプレートの構造の解説と基本的なカスタマイズに注力しており、Movable Type 4 を始めるビギナー(PCの操作がある程度できる人)の方にマッチしているのがその理由ではないかと勝手に推測しています。
1位:基本からしっかりわかる Movable Type 4.2 カスタマイズブック(Web Designing Books)
![]() | 基本からしっかりわかる Movable Type 4.2 カスタマイズブック(Web Designing Books) 大藤 幹 毎日コミュニケーションズ 2008-09-20 売り上げランキング : 6281 Amazonで詳しく見る by G-Tools |
1位:Movable Type 4.2 パーフェクトガイド
![]() | Movable Type 4.2 パーフェクトガイド 荒木 勇次郎 毎日コミュニケーションズ 2008-07-31 売り上げランキング : 1457 Amazonで詳しく見る by G-Tools |
1位:GriffinTechnology iTalk Pro GRI-IP-000063
![]() | GriffinTechnology iTalk Pro GRI-IP-000063 Griffin Technology 2006-11-10 売り上げランキング : 314 Amazonで詳しく見る by G-Tools |
4位:CMSとして使うMovable Typeガイドブック
![]() | CMSとして使うMovable Typeガイドブック 黒野 明子 翔泳社 2008-03-14 売り上げランキング : 6429 Amazonで詳しく見る by G-Tools |
5位:起きていることはすべて正しい―運を戦略的につかむ勝間式4つの技術
![]() | 起きていることはすべて正しい―運を戦略的につかむ勝間式4つの技術 勝間 和代 ダイヤモンド社 2008-11-29 売り上げランキング : 34 Amazonで詳しく見る by G-Tools |
5位:実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~
![]() | 実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~ 市瀬 裕哉 技術評論社 2008-11-29 売り上げランキング : 12228 Amazonで詳しく見る by G-Tools |
5位:努力はいらない! 「夢」実現脳の作り方
![]() | 努力はいらない! 「夢」実現脳の作り方 苫米地英人 マキノ出版 2008-09-16 売り上げランキング : 825 Amazonで詳しく見る by G-Tools |
5位:さあ、才能(じぶん)に目覚めよう―あなたの5つの強みを見出し、活かす
![]() | さあ、才能(じぶん)に目覚めよう―あなたの5つの強みを見出し、活かす 田口 俊樹 日本経済新聞出版社 2001-12-01 売り上げランキング : 39 Amazonで詳しく見る by G-Tools |
5位:デザインカスタマイズブック MT4.2対応 クリエイターのためのValue Design
![]() | Movable Typeデザインカスタマイズブック MT4.2対応 クリエイターのためのValue Design 下野 宏 ソフトバンククリエイティブ 2008-09-27 売り上げランキング : 14999 Amazonで詳しく見る by G-Tools |
5位:Movable Type 4でつくる![最強のブログサイト]
![]() | Movable Type 4でつくる![最強のブログサイト] 小川晃夫&南大沢ブロードバンド研究会 ソーテック社 2008-05-22 売り上げランキング : 89111 Amazonで詳しく見る by G-Tools |













![Movable Type 4でつくる![最強のブログサイト]](http://ecx.images-amazon.com/images/I/51ZmY72JOZL._SL160_.jpg)
