環境変数EntriesPerRebuildでMovable Typeの再構築時間を短縮する
Movable Typeのスタティックパブリッシング(静的生成)の再構築時間は、環境変数EntriesPerRebuildを設定することで短縮できる場合があります。
移転先のサーバで実験してみましたので、報告します。ただし、共有型のレンタルサーバでは500エラーになる可能性もありますのでご注意ください。
1.EntriesPerRebuildについて
環境変数EntriesPerRebuildは、1回のプロセスでブログ記事アーカイブを再構築するブログ記事数を設定します。デフォルトは「40」です。
この値を変更するには、mt-config.cgiにEntriesPerRebuildを設定します。「100」にする場合は次のように記述します。
EntriesPerRebuild 100
2.EntriesPerRebuildと月別アーカイブの関係
環境変数EntriesPerRebuildは、ブログ記事アーカイブだけでなく、月別アーカイブ(月別ブログ記事リスト)にも関係します。具体的には、指定した値のブログ記事に対応する月別アーカイブページを生成します。
この件については、小川さんの以下のページが参考になるでしょう。
3.再構築時間測定
EntriesPerRebuildの値を振って、ブログ記事アーカイブと月別アーカイブの再構築時間を測定しました。占有型のマネージドサーバなので、ブレのない値がとれていると思います。再構築対象データの条件は次の通りです。
- ブログ記事数:約3000件
- 月数:82ヶ月
ブログ記事アーカイブの再構築時間は次の通りです。100あたりで頭打ちになっています。

月別アーカイブの再構築時間は次の通りです。再構築時間の単位は秒です。

こちらは400~500あたりで頭打ちになっています。
ということで、月別アーカイブの再構築時間を考えると、EntriesPerRebuildには400~500を設定すると良いようです。
Movable Typeの復元時に「Malformed UTF-8 character~」エラーとなる対処について
先日、Movable Type のバックアップと復元を利用して、当サイトのサーバの移転を行ったのですが、復元時にエラーが発生する事象がありましたので、情報展開しておきます。
1.問題
復元時に次のようなエラーが発生し、復元が正常に完了しません。
ログには次のようなメッセージが表示されていました。
メッセージは次の通り、「Malformed UTF-8 character~」と出力されています。
Malformed UTF-8 character (fatal) at /usr/local/lib/perl5/site_perl/5.10.1/mach/XML/LibXML/Error.pm line 217.
at lib/MT/BackupRestore.pm line 431
このようなエラーが発生すると、エラーが発生する直前までのデータしか復元されません。
2.原因
エラーが発生する原因は、トラックバックに含まれるテキストの文字化けでした。FC2ブログからのトラックバックに含まれるサイト名やトラックバックの本文がすべて文字化けしていました。
3.対処
文字化けしているデータを修正します。すべて修正したあと、バックアップを再取得します。
修正方法ですが、まず文字化けしているデータを探します。データを探すには、バックアップ時に生成されるXMLファイルを、ブラウザ(Firefox)にドラッグします。
XMLが正常にパースできないときは、ブラウザに次のようなエラーが表示されます。
ドラッグするXMLファイルのファイル名は、概ね次のようなフォーマットになっています。バックアップファイルを圧縮して出力している場合は、展開した中にXMLファイルがあります。
- Movable_Type-yyyy-mm-dd-hh-mm-ss-Backup-1.xml
そして、エラーが表示されたトラックバックを探します。上記の例ではIDが「6891」なので、そのIDのトラックバックを探します。IDでは検索できないので、トラックバック一覧の「編集」というリンクをポイントして、そのURLに含まれるトラックバックIDから探します。
該当のトラックバックがみつかったら、削除するか、あるいは文字化けしているデータを修正します。
データを修正するには、トラックバック編集画面に表示されているトラックバック元のURLをブラウザで表示し、そのページのタイトルや本文をコピーして手入力で修正します。
アップルvs.グーグル
株式会社モディファイ代表取締役の小川 浩さんと、ITジャーナリスト&コンサルタントの林 信行さんによる、巨大企業・アップルとグーグルの2社を取り上げた共著です。
ソフトバンククリエイティブ
売り上げランキング: 3859
両氏は、2008年4月に「アップルとグーグル」という本を出版されており(下)、当時の売れ行きは芳しくなかったようですが、顧みると両社の現在の状況を鋭く見通していたようです。
インプレスR&D
売り上げランキング: 217446
また2008年9月に、ITmedia オルタナティブ・ブログに寄稿された「iPhoneバッシング?にもの申す」のコメント欄には多くの反対意見が寄せられているようですが、ここでも小川さんの予測が当たっています。以下、記事の一部引用です。
僕たちのスタンスはまるで変わらない。3-4年の間に、日本のケータイのプレイヤーの多くはiPhoneやAndroidがもたらす新しいモバイルインターネットに対応を迫られ、日本のケータイの生態系は大きく変わることになるだろう。
今回の書籍では、スマートフォン・タブレット・電子書籍などで対立するアップル・グーグル両社の事実や今後の動向などが記されています。
第1章 ポストiPhoneの世界で何が起こっているのか?
- 林:蜜月関係の果てに敵同士を「演じている」アップルとグーグル
- シュミットの参画とiPhoneの誕生
- iPhone vs. アンドロイド
- モバイルウェブ革命の同志
- 昨日の友は今日の敵
- アップルとグーグルは本当に敵同士なのか?
- 小川:PCの時代が終わり両社の思想の違いが浮き彫りになった
- iPadが変えるコンピューティングの世界
- PC時代の終焉
- 時代を読み切れないマイクロソフト
- オープンなグーグルとクローズドなアップル
- それでも両社は一つになる?
第2章 「戦争」はどこで起こっているのか?
- 小川:戦場は「デバイス」から「クラウド」へ
- 対アップル勢力図
- グーグルの世界観
- PC、携帯電話、テレビ、自動車を狙うグーグル
- 競合他社の動向
- 互いに干渉するビジネスモデル
- クラウド化するiTunes
- 林:モバイル時代のOS戦争は、互いに「敵」を必要とする
- 主戦場はてのひらへ
- 新スマートフォン市場はアップルの独壇場アンドロイドはメーカーの救世主!?
- ポストPC時代のOS戦争
- 優劣のない2つの選択肢
第3章 それぞれの戦略と戦術
- 小川:世界を変える2社の真逆のアプローチ
- アップルはソーシャルメディアのパートナー
- ソーシャルメディアを警戒するグーグル
- グーグル革命の前に立ちはだかるアップルの壁
- テクノロジーの間引きを続けてきたアップル
- モバイル事業では歩調が合うアップルとグーグル
- 「シンプル」という快感
- 枯れた技術を駆使して最新の製品を作る
- 林:「誰でも」と「上質な体験を誰でも」の違い
- インスタント革命
- 情報の民主化を広げるグーグル
- 人々の能力をレベルアップするアップル
- アップルは道具、グーグルは素材
- 次世代広告プラットフォーム
- ゴミをつくらない戦略 vs. 数打てば当たる戦略
第4章 戦いに割って入れなかった日本企業が学ぶべきこと
- 小川:「ユーザーの声を聞く」だけではイノベーションは生まれない
- グーグルを手を組んだソニー
- シリコンバレーの発想力は日本にはないか?
- アップルが革命的な製品を開発できる秘訣
- 林:今は真剣勝負の時代
- グローバルソフトウェア戦略
- 継続的な発展
- 本質的な成功を目指すには長期的展望が不可欠
- 長期戦略が失敗する3つのパターン
- 世界を変えられると本気で信じている人々
この基盤は
ブログ記事とコメントをひとつのフィードで配信する
Movable Typeで、ブログ記事とコメントをひとつのフィードにまとめて出力するカスタマイズを紹介します。
1.利用シーン
このフィードは、掲示板やFAQなどのような、コメント投稿の比重が高いサイトでの利用を想定しています。
例えばコミュニティ掲示板で、トピックに対するコメントをフィードで配信している場合、コメントしか購読できないと、元のトピックの内容が分かりません。元のトピックを読むには、表示されているコメントの元ページから辿るか、トピックを配信するフィードを別に購読する必要があります。次のキャプチャは、Firefox 3でフィードを表示したものです。
変更前

トピックとコメントをひとつのフィードにまとめて時系列に表示することで、掲示板全体の流れを購読することができます。
変更後

もちろん、通常のブログでも利用できます。
2.フィード用テンプレートの作成
フィード用のインデックステンプレートを作成します。
テンプレート名:トピックとコメント ※名前は何でも構いません
ファイル名:comments.xml
テンプレートの内容:以下
<$mt:HTTPContentType type="application/atom+xml"$><?xml version="1.0" encoding="<$mt:PublishCharset$>"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><$mt:BlogName remove_html="1" encode_xml="1"$></title>
<link rel="alternate" type="text/html" href="<$mt:BlogURL encode_xml="1"$>" />
<link rel="self" type="application/atom+xml" href="<$mt:Link template="feed_recent"$>" />
<id>tag:<$mt:BlogHost exclude_port="1" encode_xml="1"$>,<$mt:TemplateCreatedOn format="%Y-%m-%d"$>:<$mt:BlogRelativeURL encode_xml="1"$>/<$mt:BlogID$></id>
<updated><mt:Entries lastn="1"><$mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></mt:Entries></updated>
<mt:If tag="BlogDescription"><subtitle><$mt:BlogDescription remove_html="1" encode_xml="1"$></subtitle></mt:If>
<generator uri="http://www.sixapart.com/movabletype/"><$mt:ProductName version="1"$></generator>
<mt:SetVar name="number" value="5" />
<mt:Entries lastn="$number">
<mt:EntryDate format="%Y%m%d%H%M%S" setvar="date" />
<mt:SetVarBlock name="feed_data{$date}">
<entry>
<title><$mt:EntryTitle remove_html="1" encode_xml="1"$></title>
<link rel="alternate" type="text/html" href="<$mt:EntryPermalink encode_xml="1"$>" />
<id><$mt:EntryAtomID$></id>
<published><$mt:EntryDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
<updated><$mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>
<summary><$mt:EntryExcerpt remove_html="1" encode_xml="1"$></summary>
<author>
<name><$mt:EntryAuthorDisplayName encode_xml="1"$></name>
<uri><$mt:CGIPath encode_xml="1"$><$mt:CommunityScript encode_xml="1"$>?__mode=view&blog_id=<$mt:BlogID$>&id=<$mt:EntryAuthorID$></uri>
</author>
<mt:EntryCategories>
<category term="<$mt:CategoryLabel encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#category" />
</mt:EntryCategories>
<mt:EntryIfTagged><mt:EntryTags><category term="<$mt:TagName normalize="1" encode_xml="1"$>" label="<$mt:TagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" />
</mt:EntryTags></mt:EntryIfTagged>
<content type="html" xml:lang="<$mt:BlogLanguage ietf="1"$>" xml:base="<$mt:BlogURL encode_xml="1"$>">
<$mt:EntryBody encode_xml="1"$>
<$mt:EntryMore encode_xml="1"$>
</content>
</entry>
</mt:SetVarBlock>
</mt:Entries>
<mt:Comments lastn="$number">
<mt:CommentDate format="%Y%m%d%H%M%S" setvar="date" />
<mt:SetVarBlock name="feed_data{$date}">
<entry>
<mt:CommentEntry>
<title>「<$mt:EntryTitle remove_html="1" encode_xml="1"$>」へのコメント</title>
<link rel="alternate" type="text/html" href="<$mt:EntryPermalink encode_xml="1"$>" />
<id><$mt:EntryAtomID$><$mt:CommentID$></id>
<published><$mt:CommentDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
<updated><$mt:CommentDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>
<summary><$mt:CommentBody trim_to="60" remove_html="1" encode_xml="1"$>...</summary>
<author>
<name><$mt:CommenterUsername encode_xml="1"$></name>
<uri><$mt:CGIPath encode_xml="1"$><$mt:CommunityScript encode_xml="1"$>?__mode=view&blog_id=<$mt:BlogID$>&id=<$mt:CommenterID$></uri>
</author>
<mt:EntryCategories>
<category term="<$mt:CategoryLabel encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#category" />
</mt:EntryCategories>
<mt:EntryIfTagged><mt:EntryTags><category term="<$mt:TagName normalize="1" encode_xml="1"$>" label="<$mt:TagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" />
</mt:EntryTags></mt:EntryIfTagged>
<content type="html" xml:lang="<$mt:BlogLanguage ietf="1"$>" xml:base="<$mt:BlogURL encode_xml="1"$>">
<$mt:CommentBody encode_xml="1"$>
</content>
</mt:CommentEntry>
</entry>
</mt:SetVarBlock>
</mt:Comments>
<mt:loop name="feed_data" sort_by="key reverse">
<mt:if name="__counter__" le="$number">
<mt:GetVar name="__value__" />
</mt:if>
</mt:loop>
</feed>
3.テンプレートの解説
作成したインデックステンプレートでは、まず、最新のブログ記事について、指定件数分、ハッシュ変数に設定します。同じように、最新のコメントについて、指定件数分、先程と同じハッシュ変数に設定します。ハッシュのキーにはブログ記事投稿時間、またはコメント投稿時間を利用します。設定後、ハッシュのキーを降順にソートして出力します。
フィード出力数は、次のMTSetVarタグで設定します。
<mt:SetVar name="number" value="15" />
また、フィード出力数とMTEntriesタグ、MTComentsタグのlastnモディファイアの値は変数numberを使って、すべて同数にしています。
<mt:Entries lastn="$number">
…中略…
</mt:Entries>
<mt:Comments lastn="$number">
…中略…
</mt:Comments>
例えばフィード出力数が「15」であれば、MTEntriesタグ、MTComentsタグのlastnモディファイアの値も「15」になります。こうしておけば、フィードの出力内容がブログ記事のみ、またはコメントのみになった場合でも不足なく表示されます。
収集したデータはMTLoopタグで出力します。
<mt:loop name="feed_data" sort_by="key reverse">
<mt:if name="__counter__" le="$number">
<mt:GetVar name="__value__" />
</mt:if>
</mt:loop>
変数numberを「15」にしておけば、最大15回繰り返します。
4.フィード用リンクの作成
次のような、フィード用リンクのウィジェットテンプレートを作成します。
<ul>
<li><img src="<$mt:StaticWebPath$>images/status_icons/feed.gif" alt="購読する" width="9" height="9" /> <a href="<$mt:BlogURL$>comments.xml" title="購読する">すべての掲示板とコメント</a></li>
</ul>
WordPressのコメント連続投稿抑止時間を変更する「wp_throttle_comment_floodプラグイン」
WordPressのコメント連続投稿抑止時間を変更する「wp_throttle_comment_floodプラグイン」を公開します。
1.機能
WordPress では、同一ユーザからのコメント連続投稿を一定期間抑止します。抑止すると、コメント投稿者に次のようなメッセージを標示します。

デフォルトの抑止時間は15秒です。
「wp_throttle_comment_floodプラグイン」を利用することで、抑止時間を変更できるようになります。また、抑止を無効にすることもできます。
2.プラグインのダウンロード
github のwp_throttle_comment_floodプラグインのページに移動します。
「Download Source」のリンクをクリックして、プラグインアーカイブをダウンロードします。

3.プラグインのインストール
ダウンロードしたプラグインを展開し、中にあるwp_throttle_comment_floodフォルダをwp-content/pluginsディレクトリにアップロードしてください。
プラグインの一覧を開いて「Throttle Comment Flood」の有効化をクリック。

これでイントール完了です。

4.設定
プラグインを有効化すると、「設定」→「コメントスロットル」というサブメニューが追加されるのでクリックします。

次の画面で「コメント連続投稿抑止秒数」を設定します。

「0」を設定すれば連続投稿を抑止しません。空の値を設定すると「15秒」を設定します。
WordPress のカテゴリ別記事一覧に新着マークを表示する
WordPress のカテゴリ別記事一覧に新着マークを表示するカスタマイズです。ご質問を頂きましたので、本エントリーにて紹介致します。
このカスタマイズを行うことで、次のように、カテゴリ別記事一覧の記事タイトル右側に、新着マークを表示することができます。新着マークの表示期間は時間単位で指定できます。

カテゴリ別記事一覧に新着マークを表示するには、以下のコードを任意の位置に貼り付けてください。
<h3>「お知らせ」の最近の記事</h3>
<ul>
<?php query_posts("showposts=0&category_name=カテゴリ名"); ?>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a>
<?php
$hour = 24;
$html = '<span style="color:#e50003">New!!</span>';
$current_date = date('U');
$entry_date = get_the_time('U');
$min = ceil(date('U',($current_date - $entry_date))/3600);
if ($min+8 < $hour) {
echo $html;
}
?>
</li><?php endwhile; ?>
</ul>
赤字の部分は適宜書き換えてください。$hourは新着マーク表示時間、$htmlは新着マークの(X)HTMLになります。
指定した時間に新着マークが消えない場合、「$min+8」の「+8」を削除するか、数字を適宜書き換えてみてください。
カテゴリ別記事一覧ではありませんが、ウィジェット用のプラグインも用意しています。
Movable Type 5で「テンプレート「Create Entry」の再構築中にエラーが発生しました」というエラーが発生する件について
Category:[トラブルシューティング]
Tag:[Community, MovableType, MTInclude, TroubleShooting]
Permalink
MTQの「コミュニティ掲示板 初期作成でテンプレートエラーになる」で、タイトルの再構築エラーの件が話題になったので、情報展開します。
1.問題点
コミュニティブログまたはコミュニティ掲示板の再構築で次のようなエラーが発生する。
テンプレート「Create Entry」の再構築中にエラーが発生しました: <mtInclude>タグでエラーがありました: 「Header」というモジュールテンプレートが見つかりませんでした。

2.原因
MTのインストール時に選択した使用言語と、新たに作成するコミュニティブログまたはコミュニティ掲示板の「使用言語」の選択が異なっているため。
「使用言語」の選択(一番下の項目)

この事象は、上の画像のように、インストール時の使用言語が「日本語」で、ブログ作成時の言語が「English」、あるいはインストール時の使用言語が「English」で、ブログ作成時の言語が日本語の場合などに発生します。
3.対処1
コミュニティブログまたはコミュニティ掲示板作成時、誤った言語選択を行っていた場合は、作成したブログを削除し、「使用言語」をインストール時の言語に合わせてブログを再作成してください。次項の「対処2」を行う必要はありません。
4.対処2
MTインストール時の選択言語(日本語)と、新たに作成したコミュニティブログまたはコミュニティ掲示板の言語を異なるものにする必要がある場合、次に示す、ブログの各テンプレートの修正を行えば、再構築エラーを解消することができます。
ここでは、インストール時の言語が「日本語」で、新たに作成するコミュニティブログまたはコミュニティ掲示板の使用言語に「English」を選択した場合の対処方法を説明します。
「Create Entry」インデックステンプレート
対処前
…前略…
<$mt:Include module="Header"$>
…中略…
<$mt:Include module="Footer"$>
…後略…
対処後
…前略…
<$mt:Include module="ヘッダー"$>
…中略…
<$mt:Include module="フッター"$>
…後略…
「Archive Index」インデックステンプレート
対処前
…前略…
<$mt:Include module="Header" body_class="mt-archive-index"$>
…中略…
<$mt:Include module="Footer"$>
対処後
…前略…
<$mt:Include module="ヘッダー" body_class="mt-archive-index"$>
…中略…
<$mt:Include module="フッター"$>
「Main Index」インデックステンプレート
対処前
…前略…
<$mt:Include module="Header" body_class="mt-main-index"$>
…中略…
<$mt:Include module="Footer"$>
対処後
…前略…
<$mt:Include module="ヘッダー" body_class="mt-main-index"$>
…中略…
<$mt:Include module="フッター"$>
「Sidebar」テンプレートモジュール
テンプレート名を「サイドバー」に変更
「Entry Form」テンプレートモジュール
対処前
…前略…
<form method="post" action="<$mt:CGIPath$><$mt:CommunityScript$>" name="entry_form" id="create-entry-form" enctype="multipart/form-data">
<input type="hidden" name="__mode" value="post" />
<input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
<input type="hidden" id="magic_token" name="magic_token" value="" />
<mt:SetVarBlock name="field-content"><input id="entry-title" class="ti" name="title" /></mt:SetVarBlock>
<$mt:Include module="Form Field" id="entry-title" class="" label="Title"$>
<mt:SetVarBlock name="field-content"><textarea id="entry-body" class="ta" name="text" rows="15" cols="50"></textarea></mt:SetVarBlock>
<$mt:Include module="Form Field" id="entry-body" class="" label="Body"$>
<mt:If tag="BlogCategoryCount">
<mt:SetVarBlock name="field-content">
<select id="entry-category" name="category">
<option value="0">Select Category...</option>
<mt:TopLevelCategories>
<mt:SetVarBlock name="loop_to"><$mt:Var name="__depth__" _default="0"$></mt:SetVarBlock><mt:SetVarBlock name="spacer"><mt:For start="1" end="$loop_to"> </mt:For></mt:SetVarBlock><option value="<$mt:CategoryID$>"><$mt:Var name="spacer"$><$mt:CategoryLabel$></option>
<$mt:SubCatsRecurse$>
</mt:TopLevelCategories>
</select>
</mt:SetVarBlock>
<$mt:Include module="Form Field" id="entry-category" class="" label="Category"$>
</mt:If>
<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="Form Field" id="$custom_field_id" class="" label="$custom_field_name" required="$required"$>
</mt:EntryCustomFields>
<input type="submit" accesskey="s" name="post" id="entry-submit" value="Submit" />
</form>
…後略…
対処後(4ヶ所修正)
…前略…
<form method="post" action="<$mt:CGIPath$><$mt:CommunityScript$>" name="entry_form" id="create-entry-form" enctype="multipart/form-data">
<input type="hidden" name="__mode" value="post" />
<input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
<input type="hidden" id="magic_token" name="magic_token" value="" />
<mt:SetVarBlock name="field-content"><input id="entry-title" class="ti" name="title" /></mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="entry-title" class="" label="Title"$>
<mt:SetVarBlock name="field-content"><textarea id="entry-body" class="ta" name="text" rows="15" cols="50"></textarea></mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="entry-body" class="" label="Body"$>
<mt:If tag="BlogCategoryCount">
<mt:SetVarBlock name="field-content">
<select id="entry-category" name="category">
<option value="0">Select Category...</option>
<mt:TopLevelCategories>
<mt:SetVarBlock name="loop_to"><$mt:Var name="__depth__" _default="0"$></mt:SetVarBlock><mt:SetVarBlock name="spacer"><mt:For start="1" end="$loop_to"> </mt:For></mt:SetVarBlock><option value="<$mt:CategoryID$>"><$mt:Var name="spacer"$><$mt:CategoryLabel$></option>
<$mt:SubCatsRecurse$>
</mt:TopLevelCategories>
</select>
</mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="entry-category" class="" label="Category"$>
</mt:If>
<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>
<input type="submit" accesskey="s" name="post" id="entry-submit" value="Submit" />
</form>
…後略…
5.修正内容の解説
コミュニティブログまたはコミュニティ掲示板で使われているテンプレートから、グローバルテンプレートを呼び出しています。グローバルテンプレートのテンプレート名はインストール時の言語に依存します。日本語でインストールすれば日本語で表示されます。
以下はグローバルテンプレートの一覧画面です。

グローバルテンプレートを呼び出すには、MTIncludeタグを利用します。「ヘッダー」テンプレートモジュールを呼び出すには次のようにします。
<$mt:Include module="ヘッダー"$>
ところが、コミュニティブログまたはコミュニティ掲示板のテンプレートに含まれる、MTIncludeタグのmoduleモディファイアの値は、ブログ作成時に選択した言語に依存します。
「English」を選択した場合、ヘッダーテンプレート呼び出しのMTIncludeタグは、次のようになります。
<$mt:Include module="Header"$>
これはコミュニティブログまたはコミュニティ掲示板に限ったことではありませんが、この2つのテーマはグローバルテンプレートを呼び出すところが、クラシックブログなどの、他のテーマと異なっています。クラシックブログであれば、テンプレートモジュールの呼び出しが自テーマ内に閉じているので、言語選択は影響しません。
そして、このようなアンマッチな状態で再構築を行うと、「Header」というテンプレートモジュールは存在しないため、冒頭のような再構築エラーが発生します。
エラーを解消するには、MTIncludeタグで呼び出すテンプレートモジュールの名称と、呼び出されるテンプレートモジュール名を対応させます。
なお、ブログ作成画面の言語選択のプルダウンメニューに次のような説明がありますが、このエントリーで示す修正が必要であることを指しています。
グローバルなDefaultLanguage設定と異なる言語を選んだ場合、グローバルテンプレートの名称が異なるため、テンプレート内で読み込むモジュール名の変更が必要な場合があります。
ブログ記事の本文編集エリアを拡張する
Movable Type 5のブログ記事/ウェブページにある、本文編集エリアの縦幅を拡張する方法です。
編集エリアのスタイルは、mt-static/css/editor/editor.cssの以下のセレクタで設定しています。
.edit-entry #editor-content-enclosure {
height: 350px;
}
.edit-entry #editor-content-textarea {
height: 355px;
border: 0 ! important;
}
編集エリアの縦幅を550pxに変更したい場合、以下のように修正します。
.edit-entry #editor-content-enclosure {
height:550px;
}
.edit-entry #editor-content-textarea {
height:550px;
border: 0 ! important;
}
上記のように、直接editor.cssを編集しなくても、CMSHeadプラグインを利用して次のように設定すれば、サイズを簡単に変更することができます。

編集エリアの横幅は、ブラウザの横幅を広げれば拡張されます。
倉庫は
コメント投稿エラー解消のお知らせ
当サイトを新しいサーバに移転してからの間、コメント投稿でエラーが発生していました。
現在、エラーは解消しています。エラーに遭遇された方、申し訳ありません。
1.エラーの詳細
コメント投稿時に次のような「不正な要求です」というエラーが発生していました。

またはサインインなしのコメント投稿時、CAPTCHA画像が表示されていませんでした。

2.原因
JavaScriptインデックステンプレート(mt.js)について、旧サーバからコピーしていたものを使っていたのがコメント投稿エラーになる原因でした。
mt.jsでは、ブログIDなどをURLに含めて使っています。旧サーバの当サイトのブログIDは1、新サーバでは新規インストール+バックアップを行ったため、サイトのブログIDが2に変わっています。
また、フォームに含まれるarmorの値はMTBlogSitePathタグの内容を、SHA1でハッシュに変換しており、この値も異なっています。
インデックステンプレートは移行後、新サーバで一回再構築したのですが、mt.jsは再構築オプションが「手動」になっていたため、新サーバで再構築が実施されていませんでした。
3.対処
ということで、再構築後、テスト投稿を行ったところ、正常に投稿されることを確認致しました。CAPTCHA画像も次のように正常に表示されます。

トラックバックも正常に受信されることを確認しています。
「MTDDC Meetup FUKUSHIMA 2010」開催のお知らせ
Movable Type Developer & Designers Conference(MTDDC)の地方開催である、「MTDDC Meetup FUKUSHIMA 2010」が開催される運びとなりました。
世界中の1%の人々へ - MTDDC Meetup FUKUSHIMA 2010開催決定!
Movable Typeの地域コミュニティ作りをシックス・アパートに協力してもらいながら、仲間たちとやってるのですが、その第一弾として、福島県においてMTDDC地方版が正式にスタートし、イベント名称も「MTDDC Meetup FUKUSHIMA 2010」と決定しました。
開催日程・場所等は次の通りです。
- 日時:2010年11月6日(土) 12:30開場(予定)
- 会場:ビッグパレットふくしま ホールB
- 定員:100名
- 参加費:早割3,000円、当日3,500円(予定)
- 申込み:9月1日より専用サイトで受付開始予定
- 主催:MTDDC Meetup FUKUSHIMA 2010実行委員会(CSS Nite in Fukushima実行委員会)
- 協力:シックス・アパート株式会社
福島県のどのあたりかよく把握できていない方のために(私ですw)、Googleマップを載せておきます。マーカーが「ビッグパレットふくしま」です。
ゲストスピーカーには、シックスアパートの中の人達や、MT界でメジャーな方々が登場されます。
- 野田純生さん(アルファサード有限会社 代表取締役)
- 関 信浩さん(シックス・アパート株式会社 代表取締役)
- 金子順さん(シックス・アパート株式会社 執行役員)
- 藤本壱さん(テクカルライター/プラグイン制作者)
地方でのセミナー開催に向けて積極的に活動されている蒲生トシヒロさんも司会およびスピーカーとして登場されます。
ということで、福島ないし北関東・東北地方の方々、この機会にMTDDC Meetupに参加されてみてはいかがでしょうか。
PageExporter プラグイン v0.02
Movable Type(MT)5 でウェブページをテーマにエクスポートする「PageExporterプラグイン」をバージョンアップしました。
バージョンアップの理由は次のようなポストを頂いたためです。
同一ファイル名がインポートできない現象は、「WolaWola - バグらしきもののその後」で書かれている通り、MTの現状の仕様で、異なるフォルダであっても同一ファイル名のインポートを行うことができません。
そして、PageExporter プラグインのインポート機能も、MTのコア機能を利用しています(厳密にはプラグインに取り込んでいます)。プラグインはセミナー用に急いで作ったので、そのような細かい配慮が行えておりませんでした。
1.変更点
ということで、同一ファイル名に対応するよう変更しました。また、コードを読み直すとイケてない部分が何ヶ所かあったので、併せて修正しました。
まとめると以下の通りです。
- 同一ファイル名で異なるフォルダのエクスポート・インポートに対応
- MTに投稿されているウェブページがサブフォルダに属する場合、エクスポート時にトップフォルダ~サブフォルダを"/"で区切って出力し、インポート時のフォルダがない場合の生成に対応
- 同一ファイル名で同一フォルダ(またはルートフォルダ)のデータを除外する処理を追加
2.ダウンロード
バージョンアップしたプラグインは、github のPageExporter プラグインのページからダウンロードできます。
3.注意事項
今回の変更により、themes.yamlのフォーマットを一部変更しています。具体的には、旧バージョンではウェブページのidentifierにファイル名(赤色部分)を用いていましたが、バージョンアップ後はブログ記事ID(青色部分)を用いています。
変更前
author_link: ''
class: blog
description: ''
elements:
plugin_default_pages:
component: ~
data:
index:
title: test
…後略…
変更後
author_link: ''
class: blog
description: ''
elements:
plugin_default_pages:
component: ~
data:
100:
title: test
…後略…
手動でtheme.yamlを作成する場合、ブログ記事IDに該当する部分には、一意となる任意の数字を定義してください。重複している場合、どちらか一方しかインポートされません。
コメント一覧からウェブページのコメントを除外して表示する
Movable Type 4、Movable Type 5で、コメント一覧からウェブページのコメントを除外して表示するカスタマイズを紹介します。
変更前

変更後

1.基本
MTCommentsタグは、MTEntriesタグ内部で使った場合はブログ記事へのコメント、MTPagesタグ内部で使った場合はウェブページのコメントを出力しますが、単独(=MTEntriesタグやMTPagesタグで括らない)で利用した場合は、ブログ記事/ウェブページの両方のコメントを出力する仕様になっています。
MTCommentsタグには、ブログ記事/ウェブページのどちらへのコメントかを判定するモディファイアは用意されていません。
投稿コメントが、ブログ記事/ウェブページのどちらへのコメントかを判定するには、次のようにMTCommentsタグ、MTCommentEntryタグ、MTIfタグを組み合わせます。
<mt:Comments>
<mt:CommentEntry>
<mt:if tag="EntryClass" eq="entry">
[ここに出力内容を記述]
</mt:if>
</mt:CommentEntry>
</mt:Comments>
MTIfタグにはtagモディファイアを与え、MTEntryClassタグを判定します。MTEntryClassタグの内容が「entry」であればブログ記事への投稿、「page」であればウェブページへの投稿を示します。
2.ブログ記事のコメントのみを出力する
MTCommentsタグを単独で利用して、ブログ記事のコメントのみを出力するサブテンプレートを紹介します。
冒頭の画像のように、デフォルトの「最近のコメント」ウィジェットでブログ記事のコメントのみを出力するには、次のように変更します。青色が追加部分、赤色が変更部分です。
<mt:If tag="BlogCommentCount">
<mt:SetVar name="comment_counter" value="0" />
<mt:Comments lastn="0" sort_order="descend">
<mt:CommentsHeader>
<div class="widget-recent-comments widget">
<h3 class="widget-header">最近のコメント</h3>
<div class="widget-content">
<ul>
</mt:CommentsHeader>
<mt:CommentEntry>
<mt:if tag="EntryClass" eq="entry">
<mt:if name="comment_counter" lt="10">
<li><strong><$mt:CommentAuthor$>:</strong> <$mt:CommentBody remove_html="1" words="10"$> <a href="<$mt:CommentLink$>" title="<mt:CommentEntry><$mt:EntryTitle$></mt:CommentEntry>へのコメント">続きを読む</a></li>
<mt:SetVar name="comment_counter" op="++" />
</mt:if>
</mt:if>
</mt:CommentEntry>
<mt:CommentsFooter>
</ul>
</div>
</div>
</mt:CommentsFooter>
</mt:Comments>
</mt:If>
MTIfタグのeqモディファイアの値「entry」を「page」に変更すれば、ウェブページへのコメント一覧を表示できます。

「「最近のコメント」をネイティブタグのみで適正に表示する」で紹介しているサブテンプレートでブログ記事のみを出力する場合、次のように変更します。青色が追加部分、赤色が変更部分です。
MTCommentEntryの終了タグは位置を変更しています。これは、ウェブページの処理を行った場合に不要な処理が実行されないようにするための対処です。
<mt:SetVar name="comment_counter" value="0" />
<mt:Comments lastn="0" sort_order="descend">
<mt:CommentEntry>
<mt:if tag="EntryClass" eq="entry">
<mt:if name="comment_counter" lt="10">
<mt:SetVarBlock name="entry_title"><a href="<mt:EntryPermalink />"><mt:EntryTitle /></a></mt:SetVarBlock>
<mt:SetVarBlock name="entry_comment">
<li><a href="<mt:EntryPermalink />#c<mt:CommentID />"><mt:CommentAuthor default="Anonymous"></a> <mt:CommentDate format="%m/%d"></li>
</mt:SetVarBlock>
<mt:SetVar name="comment_list{$entry_title}" value="$entry_comment" prepend="1" />
<mt:SetVar name="comment_counter" op="++" />
</mt:if>
<mt:SetVar name="flag" value="0" />
<mt:loop name="title_list">
<mt:if name="__value__" eq="$entry_title">
<mt:SetVar name="flag" value="1" />
</mt:if>
</mt:loop>
<mt:unless name="flag">
<mt:SetVar name="push(title_list)" value="$entry_title" />
</mt:unless>
</mt:if>
</mt:CommentEntry>
</mt:Comments>
<dt class="sidetitle">
Recent Comments
</dt>
<dd class="side">
<ul>
<mt:loop name="title_list">
<li>
<mt:getVar name="__value__" />
<ul>
<mt:getVar name="comment_list{$__value__}" />
</ul>
</li>
</mt:loop>
</ul>
</dd>
MT DDC TOKYO(テーマ編)レポート
大変遅くなりましたが、2010年7月31日に行われた「MT DDC TOKYO(テーマ編)」のレポートです。
Movable Typeに関するスピーチは、2008年4月に行われたCSS Nite MT4LP5以来なので、実に2年ぶりです。
すでに、多くの方のレポートが公開されています。
- MovableType.jp - MTDDC TOKYO テーマ編 を開催しました
- WolaWola - やっとMTDDC Tokyo 2010 テーマ編レポート
- web daily life - MTDDC TOKYOを聞いてきました
- kurotango@blog - MTDDC TOKYOに参加してきました。
- KSKeの記録 - MTDDCに行ってきた! #mtddc
- どっかその辺。 - MTDDC テーマ編に行ってきました。
- vividで行くぜ - MTDDCに行ってきました #MTDDC
- KYOKUTYO NO BLOG. - MTDDC(7/31)行ってきました
- Technology Innovation - 「MT DDC Tokyo テーマ編」に参加しました
- @style - MT DDC Tokyo テーマ編へ行ってきました
- こもんせんす - MT DDC TOKYO テーマ編
- 世界中の1%の人々へ - MTDDC Tokyo テーマ編で 「仕事に役立てるテーマ」という話をしました
- 文型SEのプログラム備忘録 - MT DDC
- かたつむりくんのWWW - MTDDC Tokyo テーマ編でライトニングトークしました
- The blog of H.Fujimoto - MTDDC Tokyoテーマ編終了
- komacchi.com/blog - Movable Type Developers & Designers Conference テーマ編
また、当日の模様は以下です。
- flickr - MTDDC TOKYO テーマ編
- 2010/7/31に開催された『MTDDC Tokyo テーマ編 (Movable Type Developer & Designer Conference)』のツイートまとめ
会場等
会場は、マイクロソフト株式会社の新宿本社です。そのセミナールームをお借りしての開催でした。マイクロソフト社の社屋に入れる機会があるとは思ってもいませんでした。
会場となるセミナールームの前ではシックスアパートのスタッフの方が受付をされており、会場にはすでに多くの方が着席されていました。
Movable Type 5.1 成長するプラットフォーム
シックスアパートの金子さんよりMT5.1の最新機能とリリース時期についての発表などが行われました。MT5.1のベータが今秋、正式版のリリースが2011年初めになる予定で開発を進めているようです。
また、海外から日本で開発しているプラグインをもっと紹介してほしいという声があり、プラグインの国際化について提案されています。私もセミナーで紹介したプラグインを含め、公開中のプラグインを随時GitHubに移行し、「Plugins and Themes Directory」に登録しています。
テーマ機能を使って、便利にテンプレートを管理しよう
ここから外部講師によるセッションです。最初は森和恵さんによる、MTのテーマの利用方法と、Dreamweaverを使ったテンプレートの作成手順の紹介です。実際に操作を行いながら解説を進められ、またスライドを部分拡大しながらの説明で非常に分かりやすいセッションでした。
ウェブサイト/ブログを組み合わせたサイトのテーマ化
続いて藤本壱さんのセッションでは、ウェブサイトでブログの情報をできるだけ簡単に扱えるようにする方法、ウェブサイト/ブログでのテンプレートモジュールの共有方法、バックアップや復元を行ってブログIDが変わっても、それらに依存しなくてすむ方法などの解説がありました。テンプレートタグに精通していない方にはちょっと難しい内容だったかもしれませんが、勉強になりました。
仕事に役立てるテーマ
蒲生トシヒロさんのセッションでは、前半はテーマの可能性やテーマ配布時の注意点等について解説され、後半では書籍「Movable Type 5実践テクニック」に掲載されているサンプルを利用して、実際のエクスポート・インポートの手順を解説されました。
なお、テーマ機能で実現できていないこと(ウェブページのエクスポートなど)をスライドの一部で紹介されており、私のスライドでそれに対応するプラグインについて紹介してますので、蒲生さんのスライドと、後で登場する私のスライドを続けて読んで頂けると、流れが分かりやすいと思います。
Web制作・開発者の方々を対象としたマイクロソフトの支援施策
次はマイクロソフト株式会社の金尾さんのセッションです。ここでは、Web制作会社を支援するためのWebsiteSparkの紹介、写真共有サービスPhotosynthの紹介がありました。
テーマを使った手間いらずなサイト制作
最後に私のセッションで、テーマのカスタマイズ方法やプラグインの紹介を行いました。
本業でも基本的に何かくだらないことを話そうとしか考えてないので、今回はタイトルにもダジャレを入れましたが分かりにくかったようで、「テーマを使った手~間いらずなサイト制作」にしておけば良かったと反省しています(してません)。
また、スライド枚数が多かったため、最初に「スタッフの方に押さえつけられるまで話します!」と冗談で断言しましたが、本当オーバーしてしまって大変申し訳ありません。この場をお借りしてお詫び申し上げます。
サイトの感想などを拝見させて頂くと、「詳しい解説でした」ということを書いていただいており、ありがたく思います。ただ、theme.yamlの解説はビジュアル重視(管理画面と対応を強調)したので、各定義の解説は最小限にとどめてます。
theme.yamlを本格的にカスタマイズする場合は、スライドに掲載している書籍「Movable Type 5 プロフェッショナルガイド」を参考にしてください。
Lightning Talks
Lightning Talksでは、飛び入りを含めて8名の方が登場されました。
- linker 黒野明子さん:「Movable Type Community Solutionで作る最新最強のコミュニティサイト」の紹介
- 小山智久さん:ブログ記事とウェブページという区別を行わずシンプルな構造にしたい
- 天野卓さん:Movable Type in the cloud(Movable Typeのクラウド化)の紹介
- 柳 泰久さん:HTML5対応のテーマについての紹介
- 奥脇知宏さん:MTAppjQueryプラグインの紹介
- 小野崎直昭さん:MT5テーマのローカライズ対応
- シックス・アパート・柳下剛利さん:コミュニティサイトにおける再構築時間改善について(コミュニティサイト名は明かされませんでしたが、カテゴリアーカイブをバックグラウンド再構築に変更したことで、コメント投稿時間の再構築時間が劇的に改善したらしいです)
- シックス・アパート・高山裕司さん:TemplateImportプラグインの紹介(以前、小川宏高さんが開発されたTemplatesプラグインのテーマ版)
どの方も熱のこもったトークで、大変参考になりました。
懇親会
終了後の懇親会は、アサヒスーパードライ新宿で開催されました。参加者の方やシックスアパートのスタッフの方々と色々話しができて、大変楽しかったです。二次会も参加しました。
まとめ
ということで、テーマおよびMT5について理解を深められた1日でした。個人的にも、紹介したテーマ関連のプラグインを開発したのは講師の話を頂いてからだったので、テーマフレームワークについてかなり理解が深まりました。開発者にとってMovable Typeの面白いところは、このようなフレームワークが用意されていて、それを使って自由に拡張できることではないでしょうか。
今回のセミナーとは関係ありませんが、「都内で飲みに行きましょう」とか声をかけてもらえればいつでもかけつけますので、お気軽にご連絡ください。
最後に、参加された皆様、シックスアパートのスタッフの皆様、大変お疲れ様でした。
サーバ移転メモ
「サーバ移転のお知らせ」でお伝えした通り、CORESERVERからさくらインターネットへのサーバの移転が完了致しました。プラグインやサンプルページなどのリンク切れ等がありましたらご連絡ください。
これまでのサーバ移転では、ブログ記事のエクスポートを利用していましたが、カテゴリアーカイブのURLを復元させることが困難なため、今回はバックアップ→復元で移転を行いました。
今回のサーバ移転にあたって、主な作業内容を備忘録として記しておきます。
1.バックアップと復元
Movable Typeのバックアップ機能を使って、旧サーバで当サイトのバックアップをとり、新サーバ側で復元しました。本番環境で使ったのは初めてです。
確認したところ、完璧にバックアップをとり、元に戻してくれるので助かりました。この機能がなかったら、今回の移転はMySQLのインポートでやるしかなかったかもしれません。
ただし、XMLの読み込みでエラーが発生した件もあったので、これについては別途エントリーします。
2.全アーカイブページをコピー
移転先で復元したサイトを再構築すればいいのですが、万が一に備えて、旧サーバから全ページをそのまま新サーバにコピーしました。
が、そのページを新サーバで閲覧すると、ブログ記事ページが真っ白になる事象が発生して、かなり焦りました(原因は後述)。
3.新サーバにドメインの追加
新サーバとなるさくらインターネットにドメインを追加したときに、以下のエラーが発生しました。
原因は、さくらインターネットのレンタルサーバで(別アカウントで)運用していたときのドメインの削除を行っていなかったためでした。そちらを削除した後、正常に追加できました。
4.ネームサーバの変更
すべてのサイトを復元した後、CORESERVERのメニュー画面でネームサーバの変更を行いました。

変更はすぐに反映され、新サーバにアクセスが移行しました。
5.プラグイン
RecommendedEntryプラグイン関係で、ブログ記事に記述していた以下の記述を変更。datapathモディファイアには旧サーバの絶対パスを記述していたので、新サーバの絶対パスに修正しました。このパスを修正しないと再構築が完了しません。
<mt:UseRecommendedEntry template="recommended" datapath="~" />
ブログ記事ページが真っ白になったのは、この部分の未修正が原因だったようです。
また、関連する情報がrecommendedディレクトリに保持しているので、これらをフォルダごと移動しました。
あと、MailFormプラグイン・FolderLinkプラグインをMT5対応版に入れ替えました。
その他、不要と思われるプラグインやMT4でしか動作しない管理画面系のプラグインはとりあえずはずして、整理しました。
6.mt-config.cgi
プラグインをデフォルトのpluginsディレクトリとは別のディレクトリに配置しているので、次の2行のPluginPath環境変数を追加しました。
PluginPath plugins
PluginPath /home/[ユーザ名]/www/~中略~/plugins
サーバ移転のお知らせ
突然ですが、本ブログのサーバを「CORESERVER(CORE-A)」から、「さくらインターネット(マネージドプラン)」に移転します。
移転作業は8月15日(日)中を予定しています。時間帯は未定ですが、移転のためのバックアップを取得するため、コメント・トラックバック受信を、ある時期から停止します(実行するとエラーになります)。
ご迷惑をおかけ致しますがよろしくお願い致します。
余談ですが、このサイトの移転履歴です。
- 2004年5月~2005年12月:自宅サーバ
- 2005年12月~2007年10月:さくらインターネット(スタンダードプラン)
- 2007年10月~2010年8月(予定):CORESERVER(CORE-A)
- 2010年8月(予定)~:さくらインターネット(マネージドプラン)
言い値で
Movable Type 5.02 にアップグレードしました
当ブログを、Movable Type 4.261 から 5.02 にアップグレードしました。

以下、アップグレード手順を掲載します。
1.ブログのバックアップ
アップグレード前(4.261)のブログのバックアップを取得します。
バックアップした後、正しくバックアップされているかどうか、バックアップファイルを確認した方が良いでしょう。圧縮ファイルでバックアップした場合、バックアップファイルを解凍すれば、XMLファイルなどがテキストエディタで確認できます。
またはバックアップを2回繰り返し、同じサイズになっていれば、経験上大丈夫だと思います。
バックアップはこれ以外にも方法があります。SQLiteであれば、mt-config.cgi に指定してる DBファイルを丸ごとダウンロードしておけば良いでしょう。MySQL であれば、コマンドラインからバックアップを実行するか、phpMyAdmin によるバックアップが可能です。
なお、バックアップはアップグレード前だけでなく、定期的に行いましょう。
2.アプリケーションディレクトリのリネーム
「アプリケーションディレクトリ」は、mt.cgi などがあるディレクトリです。このアプリケーションディレクトリ自体を FTP ツールでリネームして、プログラムを上書きしないようにしています。
例えば、アプリケーションディレクトリ名が
mt
であれば、
mt--
などに変更します。
なお、アプリケーションディレクトリ名を変更した後、一時的にブログ管理画面にアクセスできなくなりますので、注意してください。
3.アプリケーションディレクトリ作成
リネーム前と同じディレクトリを FTP ツールで(同じ位置に)作成します。上の例では、
mt
というディレクトリを作成します。
4.Movable Type 5.02 のアップロード
Movable Type 5.02 のプログラム一式を、アプリケーションディレクトリ配下にアップロードします。
スタティックディレクトリをアプリケーションディレクトリと別のディレクトリに配置している場合は、スタティックディレクトリも手順2~3と同じ要領でディレクトリを作成すると良いでしょう。
5.mt-config.cgi の修正
旧アプリケーションディレクトリ(mt--)にある mt-config.cgi をFTPツールで一旦ローカルPCにダウンロードし、任意のエディタで開きます。
そして、以下の1行をファイルの最後に追加します。
DefaultLanguage ja
この行を追加しておかないとアップグレード時に次のように英語表記になります。
また、MySQL5.xでUTF-8を利用している場合、次の1行も追加します。
SQLSetNames 0
なお、この1行を追加すると文字化けするという記事を見かけたので、今回は設定しませんでした。アップグレード前のMySQLの文字コードはUTF-8です。アップグレード後の文字化けは発生していません。
この項の詳細については以下のページを参照してください。
修正後、mt-config.cgi を新アプリケーションディレクトリ(mt)にアップロードします。
この作業を行わずに mt.cgi にアクセスすると、新規インストールの動作になるので注意してください。
6.CGIファイルの属性変更
4項でアップロードした、アプリケーションディレクトリ直下にある各CGIファイル(.cgi)の属性を 644 から 755 や 705 などに変更します(サーバ上でアーカイブを展開した場合はこの作業は不要です)。変更する属性が分からない場合は、旧アプリケーションディレクトリの CGI ファイルを参照してください。
7.ブラウザから mt.cgi にアクセス
mt.cgi にアクセスするとアップグレードが開始画面になるので「アップグレード開始」をクリックします。
サインインします。

アップグレードが開始します。正直なところ、今回のアップグレードは結構ドキドキでした。
完了しました。これで「Movable Type に戻る」をクリックします。
ユーザーダッシュボードが表示され、ダミーのウェブサイトが出来上がっています。
8.プラグインファイルのコピー
旧アプリケーションディレクトリから必要なプラグインをコピーします。外部のテンプレートセットを利用していた場合は、必ず新しい plugins ディレクトリに外部テンプレートセットのディレクトリを、plugins ディレクトリにコピーしてください。場合によっては mt-static/plugins ディレクトリからのコピーも必要です。
なお、以下の方法を利用すれば、プラグインをコピーする手間が若干省けます。私はこの方法を採用しています。
9.不具合等
大きな不具合は発生していませんが、記事作成時に重宝していた、CustomEditorButtonやEntityRefbuttonが使えなくなりました・・・。
また、再構築時、拙作のEntryCategoryIDプラグインでエラーになってしまったので、プラグインをMT5対応版に入れ替えました。
また、ブログ記事作成時のカテゴリ選択エリアの縦幅が小さくなったので、CMSHeadプラグインを入れて、次のように拡げました。

以上です。
Movable Type 5.1の新機能について(その1)
Movable Type 5.1の新機能について紹介します。Movable Type 5.1は今秋ベータ開始、来年初めにリリースの予定です。
新機能の紹介は、先日開催されたMT DDC Tokyoでの金子さんの講演スライドに掲載されている公開リポジトリから開発コードを取得し、実際に動かして動作したものから抜粋しています。
なお開発内容は変更される可能性があるので、2010年8月現在の情報という位置付けでご覧ください。
1.Listing Framework
管理画面におけるブログ記事やコメントなどの一覧表示のフレームワークが変更されます。平たく言えば、一覧の表示にはAjaxが適用されます。
例えば、メニューから「ブログ記事」→「一覧」を選択すると、次のようにローディング中状態になり、

このように一覧が表示されます。開発コードなので一覧のスタイルは無視してください。

「表示」をクリックすると、次のように一覧に表示したい項目が表示されます。

表示したい項目をチェックすれば一覧に即座に反映されます。
フィルタリング条件を追加するには、Filterの「Published Entries」をクリックします。

表示された一覧から「New Filter」を選択します。

「Select Filter Item...」というプルダウンメニューが表示されます。

プルダウンメニューからフィルタリング対象にしたい項目を選択して「Add」をクリックします。ここでは「タイトル」を選択します。

タイトル文字列と、フィルタリング条件(含む/含まないなど)を選択して、「Apply」をクリックします。
これで適用されました。

最初のプルダウンメニューから異なる条件を選択して、「Add」をクリックすれば、さらにフィルタリング条件を追加することができます。キャプチャ画像には入ってませんが、右側に×印があるのでそれをクリックすれば削除することができます。
「Save」をクリックすればフィルタリング条件を保存することができます。

保存した名前は即座にフィルタ名として反映され、後で利用することもできます。

設定したフィルタ条件は、右側の三角形のアイコンをクリックすれば、閉じることができます。
2.カテゴリ/フォルダの並び替え
これまでのカテゴリ/フォルダの並び替えは、藤本さんの「SuperSortプラグイン」が主流でしたが、5.1から標準機能として装備されるようになります。
開発コードでのカテゴリ一覧画面は次のようになっています。

ドラッグすればカテゴリを入れ替えることができます。

また、赤いマークが出るようにカテゴリを右側に移動すれば、

サブカテゴリになります。サブカテゴリを左側にドラッグすれば上位のカテゴリにすることができます。

カテゴリの追加やサブカテゴリの追加は、一覧の上にあるフォームで行えます。
![]()
サブカテゴリは、上位カテゴリの[+]をクリックすれば、一覧の中で追加が行なえます。

[-]をクリックすればカテゴリの削除が行えます。[+][-]は暫定のスタイルです。
「食べるラー油」のまとめ
近所のスーパーでいつも品切れ状態な、桃屋の「辛そうで辛くない少し辛いラー油」が普通に置いてあったので、いまさらですがゲットしました。

これだけだとなんなので、「食べるラー油」に関するまとめっぽい情報を掲載しておきます。
1.「辛そうで辛くない少し辛いラー油」について
桃屋の「辛そうで辛くない少し辛いラー油」は、次のような特徴があり(公式サイトより引用)、最近の「食べるラー油」ブームの火付け役となりました。
厳選したなたね油とごま油と、色合いの良い粗挽き唐辛子で抽出した鮮やかな色のラー油に、香ばしいフライドガーリックとフライドオニオンをたっぷり加えました。そのまま食べる事もできる、旨さと食感を楽しむラー油です。
このページに「この商品を購入する」ボタンがありますが、2010年8月現在でも取り扱ってないようです。

CMもやっていたようです。
マイコミジャーナルでは、桃屋の営業企画室の方へのインタビューを行い、「辛そうで辛くない少し辛いラー油」人気の秘密が語られています。
マイコミジャーナル - ごはんにもいろんな料理にも合う! - 桃屋の"ラー油"、大ヒットの理由

2.類似商品
後発の、S&B食品「ぶっかけ!おかずラー油」です。こちらも品薄状態が続いています。
さらに後発で、ドンキホーテの「具だくさん ちょい辛ラー油」です。
Amazonでは「食べるラー油」という商品が販売されています。
売り上げランキング: 405
3.レポート・比較ページ
GIGAZINEのレポートです。
GIGAZINE - 品薄状態が続いている桃屋の「辛そうで辛くない少し辛いラー油」を食べてみました

「食べるラー油」の、日経ウーマンオンラインでの比較です。
日経ウーマンオンライン - 話題の「食べるラー油」を徹底比較

その他のラー油も含めた、日経トレンディネットでの比較です。
日経トレンディネット - ブーム過熱! 「食べるラー油」の味を“科学的に”比較 桃屋とエスビー、どっちがうまい?

デイリーポータルZでの比較です。
デイリーポータルZ - 本当に美味い「食べるラー油」はどれだ?

4.手作りレシピ
手作りレシピも色々紹介されてますね。
5.通販
楽天での「辛そうで辛くない少し辛いラー油」の検索結果です。
SettingExporter プラグイン
Movable Type(MT)5 でウェブサイト/ブログの設定をテーマにエクスポートする「SettingExporterプラグイン」を公開します。
1.機能
Movable Type 5.02 時点でのエクスポート機能では、ウェブサイト/ブログの設定をエクスポートすることができません(インポートは可能ですがtheme.yamlを編集する必要あり)。
このプラグインは、ウェブサイト/ブログの設定をテーマにエクスポートします。もちろんエクスポートした設定を編集なしでインポートすることもできます。

2.プラグインのダウンロード
github のSettingExporter プラグインのページに移動します。
「Download Source」のリンクをクリックして、プラグインアーカイブをダウンロードします。

3.プラグインのインストール
プラグインアーカイブを展開し、中にある SettingExporter フォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロードします。
システム管理画面のプラグイン一覧で、「SettingExporter~」が表示されればインストール完了です。

4.利用方法
ウェブサイト/ブログの設定をエクスポートしたい、ウェブサイトまたはブログの「ツール」→「テーマのエクスポート」をクリックすると、「ウェブサイト・ブログの設定」のチェックボックスが表示されます。

「詳細」をクリックすれば、オプション画面からエクスポートする設定項目を選択できます。
5.注意事項
プラグインの都合上、エクスポートのオプション設定時、他のエクスポータのように、チェックした状態では表示されません。
また、一部の項目が正常に反映されていないことを確認しています。
- 全般 - 優先アーカイブタイプ
- 投稿 - 表示される記事数
- コミュニケーション - URLのnofollow指定
- Webサービス - ウェブサイト更新pingサービス通知
jQuery ベースのドロップダウンメニュー「Superfish」(縦メニュー)
Superfish は jQuery ベースでドロップダウンメニューを実現するためのライブラリです。

このエントリーは「jQuery ベースのドロップダウンメニュー「Superfish」」の縦型メニュー版の設定方法です。質問を頂きましたので本エントリーで紹介致します。
サンプルを用意しましたので動作をご確認してください。
ここでは、Superfish + Movable Type(配布テンプレート)による、冒頭の画像ような、サイドバーにカテゴリメニューを設定する方法を紹介します。
1.Superfish のダウンロード
Superfish のサイトにアクセス。
タブの「Download & Support」をクリックし、「Superfish-1.4.8.zip(2009年9月時点のバージョン)」のリンクをクリックしてアーカイブをダウンロード。

2.Superfish のアップロード
アーカイブを展開し、superfish-1.4.8 のフォルダ名を superfish にリネームして、フォルダごとブログディレクトリにアップロード。
3.head 要素の修正
head 要素のあるテンプレートに下記を追加します。MT5のクラシックブログやクラシックウェブサイトであれば、「HTMLヘッダー」テンプレートモジュール、当サイト配布のテンプレートであれば「ヘッダー」テンプレートモジュールが該当します。
<link rel="stylesheet" type="text/css" media="screen" href="<mt:BlogURL />superfish/css/superfish.css" />
<link rel="stylesheet" type="text/css" media="screen" href="<mt:BlogURL />superfish/css/superfish-vertical.css" />
<script type="text/javascript" src="<mt:BlogURL />superfish/js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="<mt:BlogURL />superfish/js/hoverIntent.js"></script>
<script type="text/javascript" src="<mt:BlogURL />superfish/js/superfish.js"></script>
<script type="text/javascript" src="<mt:BlogURL />superfish/js/supersubs.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("ul.sf-menu").superfish({
animation: {height:'show'}, // slide-down effect without fade-in
delay: 1200 // 1.2 second delay on mouseout
});
});
</script>
script 要素内の「ul.sf-menu」が、3項の一番外側の ul 要素の class 属性値になります。また、
- animation:アニメーション表示
- delay:マウスアウト後の表示期間(ms指定)
となっています。
3.ドロップダウンメニューの追加
サブカテゴリリストを利用したドロップダウンメニュー(青色)を、サイドメニューに設定します。以下はサンプルで設定したものと同じものです。当サイト配布のテンプレートであれば「サイドバー」テンプレートモジュールまたは任意のウィジェットを作成して、そこに設定します。
それ以外のテンプレートであれば、サブテンプレートの最初と最後の方にあるdd要素の開始タグと終了タグを削除してください。
青色で示すclass属性値が、superfishで利用するクラス名になります。
<mt:ifArchiveTypeEnabled archive_type="Category">
<dd class="clearfix">
<mt:topLevelCategories>
<mt:subCatIsFirst>
<ul<mt:hasNoParentCategory> class="sf-menu sf-vertical"</mt:hasNoParentCategory>>
</mt:subCatIsFirst>
<mt:if tag="CategoryCount">
<li><a href="<mt:categoryArchiveLink />" title="<mt:categoryDescription />"><mt:categoryLabel /></a>
<mt:else>
<li><a href="#"><mt:categoryLabel /></a>
</mt:if>
<mt:subCatsRecurse />
</li>
<mt:subCatIsLast>
</ul>
</mt:subCatIsLast>
</mt:topLevelCategories>
</dd>
</mt:ifArchiveTypeEnabled>
4.メニュー幅の修正
メニュー幅はsuperfish-vertical.cssにある、widthプロパティとleftプロパティ(赤色部分)をそれぞれ修正します。ダウンロード時のデフォルト値は10emになっています。サンプルでは12.8emに変更しています。
.sf-vertical, .sf-vertical li {
width: 10em;
}
/* this lacks ul at the start of the selector, so the styles from the main CSS file override it where needed */
.sf-vertical li:hover ul,
.sf-vertical li.sfHover ul {
left: 10em; /* match ul width */
top: 0;
}
さくらインターネットで Movable Type のダイナミックパブリッシングによる500エラーを確実に解消する方法
Category:[ダイナミックパブリッシング, トラブルシューティング]
Tag:[DynamicPublishing, MovableType, Sakura]
Permalink
さくらインターネットで Movable Type のダイナミックパブリッシングによる500エラーを解消する方法をまとめましたので、本エントリーにて情報展開致します。
さくらインターネット+ダイナミックパブリッシング+500エラーの解消方法は、色々なサイトで公開されているのですが、サイトパスの設定によって500エラーが解消されないケースがあったため、改めて調査を行い、どのような設定を行なっても確実に500エラー解消する方法を網羅しました。
また、他のサイトでは500エラーを解消するための対処方法として冗長な情報も紛れ込んでいると思われるため、本エントリーでは正常に動作させるための最小限の方法のみ紹介し、それ以外の変更の要否については、5項にFAQとしてまとめてみました。認識誤りがありましたらご指摘ください。
動作を確認したプランは、さくらインターネット「レンタルサーバ」の「スタンダード」プランおよび「マネージドサーバ」です。Movable Typeのバージョンは5.02で確認しましたが、MT4.xでも同様の対処で解消すると思われます。
1.問題点
さくらインターネットのスタンダードプランやプレミアムプランを利用している場合、ダイナミックパブリッシングを設定し、設定後にダイナミックパブリッシング対象のページにアクセスすると、次のような500エラーが発生します。

2.原因と対処(その1:.htaccessの修正)
1つの原因は、多くのサイトで言及されていますが、ダイナミックパブリッシングを設定した際に生成される .htaccess というファイルの中にある4行目のOptionsディレクティブ(赤色部分)がさくらインターネットでサポートされていないためです。
## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
…後略…
エラーログを確認すると、次のような1行が表示されているので、このことより上記の原因であることが分かります。
/home/xxx/www/mt/.htaccess: Options not allowed here
対処方法は、FFFTPなどのFTPツールで、このファイルをローカルPCにダウンロードして、任意のエディタで開き、この1行を削除する(対処1-1)か、あるいはOptionsディレクティブの行頭に半角の「#」をつけてコメントアウトします(対処1-2)。編集後、同じディレクトリにアップロードしてください。
対処1-1
## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
<IfModule mod_rewrite.c>
…後略…
対処1-2
## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
#Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
…後略…
編集後、同じディレクトリにアップロードしてください。この対処方法は公式ドキュメントでも公開されています。
余談ですが、エラーログを参照する設定は、サーバコントロールパネルより、「アクセスログの設定」をクリックします。

そして、「アクセスログの保存設定」から「残す」を選択して、「エラーログも残す」をチェックします。

3.原因と対処(その2:ディレクトリのパーミッション修正)
2項の対処だけを行なっても500エラーが解消しない場合、もうひとつの原因は、ウェブサイトやブログのサイトパスとなるディレクトリのパーミッションです。
MTの管理画面でウェブサイトやブログのサイトパスを作成すると、そのディレクトリのパーミッションは「777」になります。さくらインターネットではsuexecを採用しており、「777」というパーミッションではother(1桁目)にwriteパーミッションがあるため、500エラーとなります。
エラーログを確認すると、次のような1行が表示されており、上記が原因であることが推測されます。
suexec policy violation: see suexec log for more details
suexecのログは確認していませんが、ネットで検索すると次の記事がありました。
対処方法は、ダイナミックパブリッシングを適用しているウェブサイトまたはブログの一番最後のサイトパスのパーミッションを「705」に変更します。
念のため、FFFTPを利用したパーミッションの変更方法を以下に掲載しておきます。
変更対象となるサイトパスの一番下位のディレクトリを右クリックして、「属性変更」を選択します。例えばサイトパスが /home/[ユーザ名]/www/foo となっている場合、fooディレクトリを選択します。

開いたダイアログで、ディレクトリのパーミッションを「705」に変更します。「755」でも問題ありません。

パーミッションを変更するディレクトリはこの部分のみです。それより上位のディレクトリのパーミッションを変更する必要はありません。また、/home/[ユーザ名]/www 直下をウェブサイトやブログのサイトパスにする場合、wwwのパーミッションが755になっていればこの作業は不要です。
また、ネット上でのsuexecの情報で「701」の設定が推奨されている場合もありますが、その設定ではスタイルシートファイルなどが参照できなくなったため、少なくともotherにリード権のある705に変更してください。
4.ダイナミックパブリッシングを利用するパスが複数ある場合
ウェブサイトとブログ、あるいは複数のブログでそれぞれダイナミックパブリッシングを行なっている場合は、2項と3項の対処についてそれぞれ実施してください。具体的には次の通りです。
- ウェブサイトのサイトパスにある.htaccessを修正し、ウェブサイトのサイトパスのパーミッションを変更
- 各ブログのサイトパスにある.htaccessを修正し、ブログのサイトパスのパーミッションを変更
またブログで、アーカイブをブログパスと別のパスで公開している場合も、アーカイブパスのディレクトリについて、2項と3項の対処を行なってください。
5.FAQ
ネット上でみつけた他の対処方法についての要/不要について、この項で見解を述べておきます。理解が間違っていたらご指摘ください。
Q:mtview.phpのパーミッションを変更する必要はありますか?
A:パーミッションを変更する必要はありません。705/755に変更してください。
ダイナミックパブリッシングを設定すると、サイトパス上にmtview.phpというファイルが生成されます。このファイルのパーミッションは644で生成され、「CGIと動作させるために755や705に変更してください」という情報がありましたが、す。特に変更する必要はありません。もしCGIとして動作させるために変更が必要なのであれば、MTのインストールディレクトリに含まれるPHPファイルのパーミッションをすべて変更しなければならなくなります。てください。
なお、mtview.phpおよびPHPファイルのパーミッションが644でも正常に動作することを確認しています。
いずれの場合も、mtview.phpが属するディレクトリのパーミッションも705/755に変更してください。777など、「グループ」「その他」のクラスに書き込み権があるパーミッションでは500エラーが発生します。
Q:templates_cやcacheというディレクトリのパーミッションの変更は必要ですか?
A:パーミッションを変更する必要はありません。
ダイナミックパブリッシングを設定すると、サイトパス上にtemplates_cというディレクトリが生成されます。また、キャッシュの利用を有効にすると、さらにcacheというディレクトリが生成されますが、これらのパーミッションは変更せずに表示されることを確認しています。
Q:ファイルの拡張子を.htmlから.phpに変更する必要はありますか?
A:拡張子を変更する必要はありません。
ダイナミックパブリッシングは.htaccessで制御し、通常の.htmlファイルをPHPとして動作させるため、拡張子を変更する必要はありません。
注:これらの見解について、Movable Type の環境変数はすべてデフォルトの状態で動作確認を行なっています。UploadPermsやUploadUmaskなど、環境変数の設定状況によってはこの限りでないかもしれません。
6.モジュール版での設定
これまでに説明した設定は、CGI版(PHPをCGIをして動作させる場合)での話です。
さくらインターネットでは、レンタルサーバの上位サービスの「ビジネスプロ」やマネージドサーバであれば、PHPの「モジュールモード(モジュール版)」が用意されています。このモードを利用する場合、2項の設定のみ行い、3項の設定は行なわなくても正常に動作するようです。
CGI版とモジュール版の違いについては以下の記事を参照してください。
7.「キャッシュ」または「条件付き取得」の併用
ダイナミックパブリッシングを利用する場合、サーバの負荷を軽減するために、「キャッシュ」または「条件付き取得」の併用を推奨します。
設定方法は、ダイナミックパブリッシングを設定したあと、「設定」→「全般」をクリックし、次の画面で「キャッシュする」または「条件付き取得を有効にする」をチェックします。

キャッシュをすることで、前回のアクセスから変更されていないページはキャッシュを利用します。条件付き取得は、HTTP 304応答を行ないます。詳細は下記のページを参照してください。
8.その他
スタティックパブリッシングからダイナミックパブリッシングに移行した場合、スタティックパブリッシングの設定時にすでに出力されていたページは、「.static」という拡張子をつけてリネームされます。
実験では、このファイルが残っていれば、3項の対処を行なわなくてもアクセスが可能な場合がありましたが(理由は不明)、ダイナミックパブリッシング設定後のブログ記事などは500エラーとなるので、必ず3項の対処を実施してください。
なお、「.static」という拡張子がついたファイルは再利用されることはありませんので、ディスクの容量削減のため、削除することを推奨します。
2010.09.01
FAQの記述を修正しました。
Amazon 2010年7月の注文ランキング
2010 年 7 月の Amazon 注文ランキングです。
今月も「CMSとして使う Movable Type 5 ガイドブック」が非常に好調な売れ行きです。お買い上げくださった皆様、ありがとうございます。
また、「キーボードの埃がきれいにとれる「SANWA SUPPLY シリコンブラシ」」で紹介した「SANWA SUPPLY シリコンブラシ」も好調でした。
1位:CMSとして使う Movable Type 5 ガイドブック
翔泳社
売り上げランキング: 2668
2位:MTOS活用テクニック―カスタムフィールドで本格的なCMS機能を実現!
ラトルズ
売り上げランキング: 57493
2位:Movable Type 5でつくる!最強のブログサイト
ソーテック社
売り上げランキング: 74648
4位:SANWA SUPPLY シリコンブラシ
売り上げランキング: 5121
4位:週刊 ダイヤモンド 2010年 7/17号
6位:Movable Type 5 プロフェッショナルガイド
毎日コミュニケーションズ
売り上げランキング: 113104
6位:Movable Type Community Solution―MT5/MT4.2対応
ソシム
売り上げランキング: 60500
6位:Movable Type 5実践テクニック
ソフトバンククリエイティブ
売り上げランキング: 26096
9位:レノボ・ジャパン ThinkPad X60シリーズ8セル大容量バッテリー 40Y7003
売り上げランキング: 1702
サマリーが
WordPress の記事一覧に新着マークを表示する「wp_recent_posts_with_newmark プラグイン」
WordPress 3.0 で、最近の記事一覧に新着マークを表示する「wp_recent_posts_with_newmarkプラグイン」を公開します。
このプラグインを適用すると、専用のウィジェットが追加され、投稿記事タイトルの右側に任意の新着表示を行うことができます。新着マークや新着表示時間の変更も可能です。

1.プラグインのダウンロード
github のwp_recent_posts_with_newmarkプラグインのページに移動します。
「Download Source」のリンクをクリックして、プラグインアーカイブをダウンロードします。

2.プラグインのインストール
ダウンロードしたプラグインを展開し、中にあるwp_recent_posts_with_newmarkフォルダをwp-content/pluginsディレクトリにアップロードしてください。
プラグインの一覧を開いて「wp_recent_posts_with_newmark」の有効化をクリック。

これでイントール完了です。

3.設定
「外観」→「ウィジェット」をクリックして、「新着表示つきの最近の投稿」を使用中の任意のウィジェットエリアにドラッグ&ドロップします。これでページに表示されるようになります。

ドラッグしたウィジェットの▼をクリックすればオプション設定画面が開きます。ここで、タイトル/表示投稿数/新着表示時間/新着表示のHTMLについて、それぞれ変更が可能です。

HTMLは、デフォルトの状態では次の内容を表示するようにしています。
<span style="color:#e50003">New!!</span>
HTMLにはimg要素を記述することも可能です。src属性には、画像をアップロードしたURLを設定してください。
なお、新着表示時間の計算ロジックはネットで調べたものを流用させて頂いてます。どれも日単位のサンプルしかなかったので、時間単位で設定を行えるように変更していますが、時間単位指定では正確に動作しなかったため、プログラムで若干補正しています。もしかしたら当方の動作環境の問題かもしれません。
よって、新着表示時間が期待通りに動作しない場合、wp_recent_posts_with_newmark.phpの赤色部分を削除するか、数値を変更してみてください。
…前略…
if ($min+8 < $hour) {
echo $html;
}
…後略…
より適切な方法がありましたら、ご連絡頂ければ幸いです。
Github を Windows で利用する(Git GUI編)
Github を Windows で利用する方法を紹介します。このエントリーではGit GUIというツールを利用して、
- リモートリポジトリの作成
- ローカルリポジトリの作成
- ローカルリポジトリのコミットとリモートリポジトリへのプッシュ
- ファイル更新時のコミットとリモートリポジトリへのプッシュ
等について紹介します。「githubの使い方が分からない」というビギナー(私も含め)のためのエントリーです。GUIのオプション設定など詳細な設定は割愛していますので予めご了承ください。
なお、以降の操作を行う前にgithubのアカウント取得は完了させておいてください。
1.ダウンロード
githubのサイトにある「Help」をクリック。

右側のメニューから「Intermediate」の中にある「Install Git HTML help」をクリック。

Windowsの説明にある「Msysgit」をクリック。

「Downloads」タブをクリック。

「Git-1.7.6-preview20110708.exe(2011年9月現在の最新バージョン)」の「↓」をクリックすればダウンロードできます。

2.Gitのインストール
前項でダウンロードした実行ファイルをダブルクリックして実行します。
「Next」をクリック。
「Next」をクリック。
Gitのインストールフォルダを指定して「Next」をクリック。
デフォルトのまま「Next」をクリック。
スタートメニュー名を設定して「Next」をクリック。
「Usr Git Bash only」を選択して「Next」をクリック。
改行コードを選択して「Next」をクリック。
インストールが開始します。
「Finish」をクリック。
3.SSHキーの作成
githubを利用するにはSSHキーの作成が必要です。
「スタート」→「すべてのプログラム」→「Git」→「Git GUI」を選択してGUIを起動します。
「ヘルプ」→「SSHキーを表示」を選択。
「鍵を作成」をクリック。

任意のパスフレーズを入力します。

もう一度、同じパスフレーズを入力します。

「あなたの鍵は~にあります」という表示と、鍵(ランダムな文字列)が表示されればOKです。
表示されたキーは4項で使うので、「クリップボードにコピー」でコピーしておいてください。また、入力したパスフレーズは8項の作業にある「リポジトリにプッシュ」で利用するので、忘れないようにしてください。

4.SSHキーの登録
作成したSSHキーを、githubの自アカウントに登録します。
自分のアカウントでログインでしたgithubのページで「Account Settings」をクリック。
![]()
「SSH Public Keys」をクリック。

「Add another public key」をクリック。

「Title」に適当な名称を設定して「Key」にさきほどコピーした内容をペーストして「Add Key」をクリック。

登録後は次のような表示になります。「Add another public key」をクリックすれば他のPCなど、別のSSHキーを登録できます。編集する場合は「edit」、削除する場合は右側の×印をクリックします。

5.リポジトリ(リモート側)の作成
自分のアカウントでログインでしたgithubのページで「Dashboard」をクリック。
![]()
「New Repository」をクリック。

「Project Name(プロジェクト名)」「Description(説明)」「Homepage URL(ホームページのURL)」を入力して「Create Repository」をクリック。それぞれの項目は後で変更できます。
このような画面が表示されるので、このままにしておいてください(この後の作業で、リモート側のリポジトリを入力するために表示されているデータを利用します)。
本エントリーではGit Bashではなく、Git GUIで説明しますが、Git Bashを利用する場合は、上の画面に表示されているようなコマンドを入力しながら、ローカル側のリポジトリを作成します。
6.リポジトリ(ローカル側)の作成
「スタート」→「すべてのプログラム」→「Git」→「Git GUI」を選択してGUIを起動します。
「新しいリポジトリを作る」をクリック。
リポジトリにしたいディレクトリを入力して「作成」をクリックします。「ブラウズ」をクリックすれば、リポジトリにしたい作成済みのフォルダを指定することができます。作成すると、指定したディレクトリ直下に「.git」というフォルダが作成されます。
このような画面が開きます。左上の「コミット予定に入っていない変更」は、作成したリポジトリにある、まだコミットされていないファイルが表示されます。リポジトリを作成した後にコミットしたいファイルを配置した場合、真ん中あたりにある「再スキャン」、またはメニューバーの「コミット」→「再スキャン」を選択すれば、同じように表示されます。
7.ファイルのコミット(確定)
「コミット予定に入っていない変更」に表示されているファイルを選択して(ShiftキーまたはCtrlキーを押しながらクリックすれば複数選択可能)、「コミット」→「コミット予定する」を選択します。
warningが出た場合は「続行」をクリックします。

これで、選択したファイルが「ステージングされた(コミット予定済みの)変更」に移動します。
「ステージングされた(コミット予定済みの)変更」にある、コミット対象のファイルを先程と同様の手順で選択します。そして、「最初のコミットメッセージ」に任意のメッセージを入力して「コミット」をクリックします。
コミットが完了すると、ウィンドウの左下に「コミット~を作成しました」が表示されます。

8.コミットしたファイルをリポジトリへプッシュ
「プッシュ」をクリックします。プッシュは、コミットファイルのリモート側への送信を行います。

次のウィンドウが開くので、「送り先リポジトリ」に、「4.リポジトリ(リモート側)の作成」で作成したリポジトリの「次の手順:」に記載されているリモート側のリポジトリ名を入力します。ここでは「git@github.com:koikikukan/mt-plugin-entry-exporter.git」を入力しています。設定後、「プッシュ」をクリックします。
プッシュ状態を示す画面が開きます。
上記の画面が開いたまま、SSHのパスフレーズを尋ねる画面が開くので、「3.SSHキーの作成」で入力したパスフレーズを入力します。

プッシュ状態を示す画面に「成功」が表示されればプッシュ完了です。
リモート側のリポジトリが次のように表示されます。
9.ファイルの内容を更新してリモートリポジトリに反映させる
「スタート」→「すべてのプログラム」→「Git」→「Git GUI」を選択してGUIを起動します。さきほど利用したリポジトリが「最近使ったリポジトリを開く」に登録されるので、それをクリックします。
変更されたファイルが自動的に抽出されます。
コミットとプッシュの手順は「5.リポジトリ(ローカル側)の作成」と同様ですが、今度は「コミット予定に入っていない変更」から選択したあと、「コミット」→「変更されたファイルをコミット予定」を選択します。
以降のコミットとプッシュの作業は7項・8項と同じ要領で行ってください。
2011.09.08
4項の作業が抜けていたので追加しました/日本語のスクリーンショットを英語表記のものに差し替えました/6項の説明を6~8項に分割しました/1項の説明を現在のバージョンにあわせて最新化しました。
PageExporter プラグイン
Movable Type(MT)5 でウェブページをテーマにエクスポートする「PageExporterプラグイン」を公開します。
1.機能
Movable Type 5.02 時点でのエクスポート機能では、ウェブページをエクスポートすることができません(インポートは可能ですがtheme.yamlを編集する必要あり)。
このプラグインは、ウェブサイトまたはブログのウェブページをテーマにエクスポートします。もちろんエクスポートしたアイテムを編集なしでインポートすることもできます。

2.価格
MT5.1版(カスタムフィールド非対応版):無償
MT5.1版(カスタムフィールド対応版):3150円/1インストールMT(購入前に必ず動作確認してください)
商用以外でご利用の場合も、プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
3.プラグインのダウンロード
以下のPageExporter_0_10.zipまたはPageImExporter_0_30.zipをダウンロードしてください。
- PageExporter_0_10.zip
- PageImExporter_0_30.zip(カスタムフィールド対応版)
4.プラグインのインストール
プラグインアーカイブを展開し、中にある PageExporterフォルダ(またはPageImExporterフォルダ)ごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロードします。
システム管理画面のプラグイン一覧で、「PageExporter~」または「PageImExporter~」が表示されればインストール完了です。

5.利用方法
アイテムをエクスポートしたいウェブサイトまたはブログの「ツール」→「テーマのエクスポート」をクリックすると、「ウェブページ」のチェックボックスが表示されます(1件もない場合は表示されません)。

「詳細」をクリックすれば、オプション画面からエクスポートするウェブページを選択できます。
6.ウェブページアイテム・カスタムフィールドのエクスポートとインポート
カスタムフィールドやアイテムを含んだ具体的な移行手順については以下の記事を参照してください。
AssetExporter プラグイン
Movable Type(MT)5 でアイテムをテーマにエクスポートする「AssetExporterプラグイン」を公開します。
1.機能
Movable Type 5.12 時点でのエクスポート機能では、アイテムをエクスポートすることができません。また、インポートも行うことができません。
このプラグインは、ウェブサイトまたはブログのアイテムをテーマにエクスポートします。もちろんエクスポートしたアイテムをインポートすることもできます。

2.プラグインのダウンロード
MT5.1版は以下のリンクよりダウンロードしてください。
MT5.0版は、github のAssetExporter プラグインのページに移動します。
「Download Source」のリンクをクリックして、プラグインアーカイブをダウンロードします。

3.プラグインのインストール
プラグインアーカイブを展開し、中にある AssetExporter フォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロードします。
システム管理画面のプラグイン一覧で、「AssetExporter~」が表示されればインストール完了です。

注:一番最初にリポジトリに登録したバージョンではLinuxでエラーとなるため、一部修正しました。
4.利用方法
アイテムをエクスポートしたいウェブサイトまたはブログの「ツール」→「テーマのエクスポート」をクリックすると、「アイテム」のチェックボックスが表示されます(1件もない場合は表示されません)。

「詳細」をクリックすれば、オプション画面からエクスポートするアイテムを選択できます。

5.注意事項
現状では、インポート時に一律「assets」というディレクトリを作り、そこに配置するだけの実装になっています(エクスポート対象のアイテムのディレクトリはどのように作ってあっても多分大丈夫)。エクスポート前のディレクトリを再現する機能については時間をみて別途検討したいと思います。
また、アイテム上にある、サムネイルファイルは、MTAssetThumbnailLinkタグなどで作成したものであれば、エクスポートは不要かもしれません。
MT DDC TOKYO(テーマ編)スライド
MT DDC TOKYO(テーマ編)が無事終了致しました。参加された皆様、またスタッフの皆様、大変お疲れ様でした。また、スピーカーとしてお招き頂き、本当にありがとうございました。
本エントリーで、当日の発表スライドを公開します。Movable Typeのテーマをがっつりカスタマイズしたいけれども、構造がいまひとつよく分からないという方にはおすすめの内容かと思います。
なお、私のスライドをご覧になる前に、蒲生さんのスライド(以下)をご覧頂けると、流れが良く分かるのではないかと思います。
こちらが私のスライドです。
スライドにある「テーマのカスタマイズ」の内容は、拙著「Movable Type 5 プロフェッショナルガイド」から抜粋したものです。「Movable Type 5 プロフェッショナルガイド」での解説は文字ばかりですが、講演のスライドでは管理画面との対応を極力追加しています。
ただし各項目の解説は結構割愛しているので、書籍とあわせてお読み頂ければ、より理解が深まると思います。
毎日コミュニケーションズ
売り上げランキング: 89866
スライド中のプラグインも以下のリンクからダウンロードできます。サンプル用なので不具合ありましたらご容赦ください。
上記のプラグインは現在githubに移行中ですが、Windowsにダウンロードしたgitからプラグインファイルをリポジトリに登録する段階でemacsのような画面が開くのですが、その画面の終了方法が分からず登録できてません(emacsのようにCtrl-x+Ctrl-cでは終了できず・・・)。どなたかご存知の方、教えてください。
追記:githubにはemacs画面を開かない方法で登録できましたが、引き続きご連絡お待ちしています。
2010.08.03
蒲生さんのスライドとプラグインリンクを追加しました。











![週刊 ダイヤモンド 2010年 7/17号 [雑誌]](http://ecx.images-amazon.com/images/I/51qD1lsyOJL._SL160_.jpg)





