.htaccess によるリダイレクト
PHPモジュール化やページ分割のカスタマイズを行った場合、ファイルの拡張子が .html から .php に変更になります。拡張子を変更すると、他サイトからそのファイルにリンクを貼っている場合、デッドリンク(404 Not Found)になってしまいます。
ここでは .htaccess を用いたリダイレクト(転送)によりデッドリンクを回避する方法を紹介します。
動作を簡単に説明すると、.htaccess という特殊なファイルに
hogehoge.html へのアクセスを hogehoge.php に転送する
という内容を設定し、一定の場所に配置しておくだけで hogehoge.html へのアクセスが自動的に hogehoge.php に転送されます。hogehoge.html の実体がなくても大丈夫です。
1..htaccess のフォーマット
.htaccess でリダイレクトをするための正式なフォーマットは、
RedirectPermanent URL-path URL
となります。URL-path が元URL、URLが転送先URLです。例えば archives/hogehoge.html を 同じディレクトリの hogehoge.php に転送する場合は
RedirectPermanent /blog/archives/hogehoge.html http://user-domain/blog/archives/hogehoge.php
という内容になります。ドメインを移行する場合も同様です。
フォーマットの URL-path は、ドキュメントルートからのパス(root からの絶対パスではありません)を指定し、先頭に "/" を付与してください。「ドキュメントルート」とはWebサーバがHTMLファイルを公開するためのディレクトリを意味します。
もう少し具体的に説明します。上記の例ではドメインが
http://user-domain/
で、そのドキュメントルートが
/path/to/htdocs
と仮定します。
ドメイン(つまりドキュメントルート)の配下に blog というディレクトリを作り、そこにブログの index.html が配置されている場合、index.html までの絶対パスは
/path/to/htdocs/blog/index.html
となります。この場合 .htaccess に記述すべき URL-path は、
/blog/~
と、/blog で開始させます。これが前述の「ドキュメントルートからのパス」という意味です。
ドキュメントルート直下、つまり /path/to/htdocs 直下に index.html を配置している場合は .htaccess に /blog を記述する必要はありません(ただし archives ディレクトリ等がある場合はそれを記述します)。
2..htaccess のアップロード先
.htaccess をアップロードするディレクトリは、ドキュメントルートでも、サイト・パス(ブログの index.html があるディレクトリ)でも大丈夫です。
3..htaccess 生成
.htaccess のリダイレクトの設定は、1ファイルに対して1行ずつ書かなければなりません。例えば、エントリーアーカイブ100ファイルを転送する場合、転送の設定を100行書く必要があります。
この手間を省くためにインデックステンプレートを用いて .htaccess ファイルを一気に生成します。
以下、.htaccess の作成手順です。
3.1 .htaccess 用テンプレート作成
管理メニューの「テンプレート」→「インデックス」で「テンプレートを新規作成」をクリックし、次ページで下記を設定します。
- テンプレート名:リダイレクト(何でもいいです)
- ファイル:htaccess.txt
- テンプレートの内容:下記
<MTArchiveList archive_type="Individual">
RedirectPermanent /blog/archives/<$MTArchiveDate format="%Y/%m"$>/<MTEntries><$MTEntryLink$></MTEntries> <$MTBlogURL$>archives/<$MTArchiveDate format="%Y/%m/%d_%H%M"$><MTEntries>.php</MTEntries>
</MTArchiveList>
<MTArchiveList archive_type="Category">
RedirectPermanent <$MTArchiveLink$>index.html <$MTBlogURL$>archives/cat<$MTCategoryID$>/index.php
</MTArchiveList>
<MTArchiveList archive_type="Monthly">
RedirectPermanent <$MTArchiveLink$>index.html <$MTBlogURL$>archives/<$MTArchiveDate format="%Y/%m"$>/index.php
</MTArchiveList>
リストは上から順に、エントリーアーカイブ/カテゴリー・アーカイブ/月別アーカイブを転送する設定になっています。転送が必要なアーカイブのみを設定してください。
3.2 注意事項
このリストは旧URLのファイル名をデフォルトの状態で生成していることを前提に作っており、この場合2つの注意事項があります。
まずこのファイルの生成は、管理メニューの「設定」→「公開」→「アーカイブ・マッピング」の「出力ファイル名」で新ファイル名を設定する前に行う必要があります。理由は旧ファイル名の生成に MTEntryLink を使用しているためです(MTEntryPermaLink を使っても構いません)。
もしすでに変更してしまっていたら「出力フォーマット」を一旦元の状態に戻して、このインデックステンプレートだけを生成するという手もあります(その際、他のアーカイブテンプレートを再構築しないように注意しましょう)。
もうひとつは、MTタグを使って URL-path を自動的に生成していますが、残念ながらMTタグのみで「ドキュメントルートからのパス+ファイル名」というフォーマットを生成することはできません(いわゆるURL形式で生成されます)。したがって、エントリーアーカイブについては MTEntryLink、カテゴリー・アーカイブ/月別アーカイブについては MTArchiveLink を使い、ファイルを生成した後、任意のエディタで開き、リダイレクトの設定で不要なドメイン部分を削除します。
上記とは別に、すでに「出力フォーマット」欄でファイル名を変更している場合は、URL-path の部分を適宜変更してください。また新URLについてもご自身の設定内容にあわせて適宜修正してください。
3.3 その他
この作業は一度でうまくいかないと思いますので、実際の新旧ファイル名と見比べながら、ファイルに設定したタグを修正することをお勧めします。またこの作業を行う前に、試しに各アーカイブについて1ファイルずつ手書きで .htaccess のリダイレクト設定を行ってみて、旧URLを開いた時に新URLへ転送されることを確認するのも良いでしょう。
4..htaccess アップロード
ファイルの内容がきちんとできたら保存・再構築し、出来上がったファイルを任意のエディタ(メモ帳)等で開き、ファイル名を .htaccess に変更して保存します。すでに .htaccess がある場合は、そのファイルに先の内容を追加します。
テンプレートの出力ファイル名をいきなり .htaccess として保存することも可能ですが、生成された瞬間に設定が有効となるので、一旦別のファイル名で作ることをお勧めします。
5.動作確認
できあがったファイルを .htaccess にリネームして、サイト・パス(index.html があるディレクトリ)にアップロードします。これで旧エントリーアーカイブ(.html)等にアクセスしてみてください。.php のファイルにアクセスできれば成功です。
6.Redirect と RedirectPermanent の違いについて
他のサイトを検索すると、Redirect ディレクティブと RedirectPermanent ディレクティブを使っている例がみられました。Apache2.0 のドキュメントを見てみると、たしかに
- RedirectPermanent 元URL 転送先URL
- Redirect permanent 元URL 転送先URL
の2つの設定方法がありますが、いずれも 301(永久に移動)のHTTPステータスコードを返すので、私の誤解がなければ振る舞いは全く同じです。ただし Redirect ディレクティブに permanent を付与しない場合は 302(一時的な移動)というHTTPステータスコードになりますのでご注意ください。
参考サイトは下記です。ありがとうございました。
3.2 アップグレードによるテンプレート変更箇所(3.15x用)
先日の3.2 アップグレードによるテンプレート変更箇所の 3.15x-ja 版です。3.15x-ja と 3.17x-ja では公開テンプレートの個別エントリーアーカイブが微妙に異なっているので、その部分をカバーしました。デフォルトテンプレートもほぼ同じだと思います。
1カラム版を元に作成していますので2カラム・3カラムの方はヘッダおよび中央カラム部分が対象となります。なおコメント・プレビュー/コメント・エラーについては 3.15x-ja と 3.17x-ja は同じですので先のエントリーを参照願います。
また3.2 アップグレードによるテンプレート変更箇所もここ10日ほどで何ヶ所か手直ししております。動作に不具合がある方は再度ご確認頂ければ幸いです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" />
<meta name="generator" content="http://www.movabletype.org/" />
<title><$MTBlogName$>: <$MTEntryTitle$></title>
<link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="<$MTBlogURL$>index.rdf" />
<link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTBlogURL$>atom.xml" />
<link rel="start" href="<$MTBlogURL$>" title="Home" />
<MTEntryPrevious>
<link rel="prev" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" />
</MTEntryPrevious>
<MTEntryNext>
<link rel="next" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" />
</MTEntryNext>
<MTInclude module="Remember Me">
<$MTEntryTrackbackData$>
<MTBlogIfCCLicense>
<$MTCCLicenseRDF$>
</MTBlogIfCCLicense>
<script type="text/javascript" src="<$MTBlogURL$>mt-site.js"></script>
</head>
<body class="layout-three-column" onload="individualArchivesOnLoad(commenter_name)">
<div id="box">
<!-- タイトル開始 -->
<div id="banner">
<h1><a href="<$MTBlogURL$>" accesskey="1"><$MTBlogName encode_html="1"$></a></h1>
<h2><$MTBlogDescription$></h2>
</div>
<!-- タイトル終了 -->
<!-- コンテンツ開始 -->
<div id="container">
<div class="blog">
<div id="menu">
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>">≪ <$MTEntryTitle$></a> |
</MTEntryPrevious>
<a href="<$MTBlogURL$>">メイン</a>
<MTEntryNext>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> ≫</a>
</MTEntryNext>
</div>
<h2 class="date"><$MTEntryDate format="%x"$></h2>
<div class="blogbody">
<h3 class="title">●<$MTEntryTitle$></h3>
<$MTEntryBody$>
<div id="a<$MTEntryID pad="1"$>more"><div id="more">
<$MTEntryMore$>
</div></div>
<div class="posted">Posted by <$MTEntryAuthor$> at <$MTEntryDate$>
<!-- トラックバックを別ウィンドウに表示する場合ここから
<MTEntryIfAllowPings>
| <a href="<$MTCGIPath$><$MTTrackbackScript$>?__mode=view&entry_id=<$MTEntryID$>" onclick="OpenTrackback(this.href); return false">トラックバック</a>
</MTEntryIfAllowPings>
トラックバックを別ウィンドウに表示する場合ここまで -->
</div><!-- posted -->
</div><!-- blogbody -->
<!-- トラックバックを同一ウィンドウに表示する場合ここから -->
<MTEntryIfAllowPings>
<MTIfPingsActive>
<a id="trackbacks" name="trackbacks"></a>
<div class="comments-head">トラックバックURL</div>
<div class="comments-body">
<p class="techstuff">このエントリーのトラックバックURL:<br />
<$MTEntryTrackbackLink$></p>
</div>
<MTIfNonZero tag="MTEntryTrackbackCount">
<!--
<p>このリストは、次のエントリーを参照しています: <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>:</p>
-->
<MTPings>
<MTPingsHeader><div class="comments-head">トラックバック</div></MTPingsHeader>
<MTPings>
<div class="comments-body">
<p id="p<$MTPingID$>">
≫ <a href="<$MTPingURL$>"><$MTPingTitle$></a> from <$MTPingBlogName$><br />
<$MTPingExcerpt$> <a href="<$MTPingURL$>">[続きを読む]</a>
</p>
<div class="comments-post">Tracked on <$MTPingDate$></div>
</div><!-- comments-body -->
</MTPings>
</MTIfNonZero>
</MTIfPingsActive>
</MTEntryIfAllowPings>
<!-- トラックバックを同一ウィンドウに表示する場合ここまで -->
<MTEntryIfAllowComments>
<MTIfCommentsActive>
<a id="comments" name="comments"></a>
<MTComments>
<MTCommentsHeader><div class="comments-head">コメント</div></MTCommentsHeader>
<MTComments>
<a id="c<$MTCommentID$>" name="c<$MTCommentID$>"></a>
<div class="comments-body">
<$MTCommentBody$>
<div class="comments-post">Posted by <$MTCommentAuthorLink default_name="Anonymous" spam_protect="1"$> <MTCommentAuthorIdentity> at <$MTCommentDate$></div>
</div>
</MTComments>
<MTEntryIfCommentsOpen>
<MTIfCommentsAllowed>
<div class="comments-head">コメントしてください</div>
<div class="comments-body">
<MTIfRegistrationRequired>
<MTIfNonEmpty tag="MTTypeKeyToken">
<div id="thanks">
<p>サイン・インを確認しました、
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script><script>document.write(commenter_name);</script>.
さん。コメントしてください。 (<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>)</p>
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<p><label for="url">URL:</label><br />
<input tabindex="1" type="text" name="url" id="url" />
情報を登録する?
<input type="radio" id="remember" name="bakecookie" onclick="rememberMe(this.form)" /><label for="remember">はい</label><input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /><label for="forget">いいえ</label><br style="clear: both;" />
</p>
<p><label for="text">コメント:</label><br />
<textarea tabindex="2" id="text" name="text" rows="10" cols="50"></textarea></p>
<div align="center">
<input type="submit" tabindex="3" name="preview" value=" 確認 " />
<input style="font-weight: bold;" tabindex="4" type="submit" name="post" value=" 投稿 " />
</div>
</form>
</div>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.getElementById('thanks').style.display = 'block';
} else {
document.write('サイン・インしていません。このサイトにコメントをする前に登録してください。 <a href="<$MTRemoteSignInLink static="1"$>"> サイン・イン</a>');
document.getElementById('thanks').style.display = 'none';
}
// -->
</script>
<MTElse>
コメント登録機能を利用するには、TypeKey トークンを設定してください。
</MTElse>
</MTIfNonEmpty>
<MTElse> <MTTemplateNote value="Case of comments not required">
<MTIfNonEmpty tag="MTTypeKeyToken">
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.write('サイン・インを確認しました、', commenter_name, 'さん。コメントしてください。 (<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>)');
} else {
document.write('TypeKey ID を使って <a href="<$MTRemoteSignInLink static="1"$>"> サイン・イン</a> してください。');
}
// -->
</script>
</MTIfNonEmpty>
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" id="comments_form" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<script type="text/javascript">
writeTypeKeyGreeting(commenter_name, <$MTEntryID$>);
</script>
<MTIfCommentsModerated>
<p class="comments-open-moderated">
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)
</p>
</MTIfCommentsModerated>
<div id="name_email">
<div id="name-email">
<p><label for="author">名前:</label><br />
<input tabindex="1" id="author" name="author" /></p>
<p><label for="email">メールアドレス:</label><br />
<input tabindex="2" id="email" name="email" /></p>
</div>
<MTIfNonEmpty tag="MTTypeKeyToken">
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.getElementById('name_email').style.display = 'none';
}
// -->
</script>
</MTIfNonEmpty>
<p><label for="url">URL:</label><br />
<input tabindex="3" type="text" name="url" id="url" />
</p><p>
<label for="comment-bake-cookie"><input type="checkbox" id="comment-bake-cookie" name="bakecookie" tabindex="9" accesskey="r" onclick="if (!this.checked) forgetMe(document.comments_form)" value="1" onkeypress="if (!this.checked) forgetMe(document.comments_form)" />情報を保存する?</label>
保存しますか?
<input type="radio" id="remember" onclick="rememberMe(this.form)" name="bakecookie" /><label for="remember">はい</label><input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /><label for="forget">いいえ</label><br style="clear: both;" />
</p>
<p><label for="text">コメント:</label> <MTIfAllowCommentHTML>
(書式を変更するような一部のHTMLタグを使うことができます)</MTIfAllowCommentHTML><br />
<textarea tabindex="4" id="text" name="text" rows="10" cols="50"></textarea></p>
<div align="center">
<input type="submit" name="preview" tabindex="5"
value=" 確認 " />
<input style="font-weight: bold;" type="submit" name="post"
tabindex="6" value=" 投稿 " />
</div>
</form>
</MTElse>
</MTIfRegistrationRequired>
</div><!-- comments-body -->
</MTIfCommentsAllowed>
<script type="text/javascript" language="javascript">
<!--
if (document.comments_form.email != undefined)
document.comments_form.email.value = getCookie("mtcmtmail");
if (document.comments_form.author != undefined)
document.comments_form.author.value = getCookie("mtcmtauth");
if (document.comments_form.url != undefined)
document.comments_form.url.value = getCookie("mtcmthome");
if (getCookie("mtcmtauth") || getCookie("mtcmthome")) {
document.comments_form.bakecookie[0].checked = true;
} else {
document.comments_form.bakecookie[1].checked = true;
}
//-->
</script>
</MTEntryIfCommentsOpen>
</MTEntryIfAllowComments>
</MTIfCommentsActive>
</div>
</div>
<!-- コンテンツ終了 -->
<br clear="all" />
</div>
</body>
</html>
アルファブロガー 11人の人気ブロガーが語る成功するウェブログの秘訣とインターネットのこれから
「アルファブロガー」とは「ブログ界の世論に大きな影響力を与える少数のパワーブロガー」を指すようで、2005年2月に発表された「日本のアルファブロガーを探せ 2004」のベストイレブンの方々が下記の本に登場します。
アルファブロガー 11人の人気ブロガーが語る成功するウェブログの秘訣とインターネットのこれから posted with amazlet on 05.12.25 FPN(フューチャー プランニング ネットワーク) 徳力 基彦 渡辺 聡 佐藤 匡彦 上原 仁 翔泳社 (2005/10/21) おすすめ度の平均: ![]() 「ブログ」法を教授してくれるブロガーたち スゴいブロガーのインタビュー集 |
内容はインタビュー形式で、ウェブログ運営における成功の秘訣やブログの将来への可能性などが議論されているようです。以下、ベストイレブンサイトのリンクを掲載しておきます。
- 俺様キングダム/山本"切込隊長"一郎
- 極東ブログ/finalvent
- R30::マーケティング社会時評/R30
- isologue/磯崎哲也
- 百式/田口元
- Passion For The Future/橋本大也
- Ad Innovator/織田浩一
- 英語で読むITトレンド/梅田望夫
- On Off and Beyond/渡辺千賀
- NDO::Weblog/伊藤直也
- ネタフル/コグレマサト
読み始めたばかりなので書評はありません。ちなみに「アルファブロガーに続くブロガー」という意味の「ベータブロガー」や、その隙間を埋めるといった意味の「ニッチブロガー」という言葉もあるようです。
ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック
ブログ自由自在 Movable Type 上級カスタマイズ術・第2集のエントリーでお知らせしておりました、当サイトのテンプレートやカスタマイズ記事を載せて頂く予定の書籍が、
- 「ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック」
というタイトルでいよいよ発売が近づいてまいりました。
ややフライング気味ですがAmzonでみつけましたので、紹介させて頂きます。
![]() | ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック 藤本 壱 技術評論社 2005-11-08 売り上げランキング : Amazonで詳しく見る by G-Tools |
書籍の内容につきましては執筆者の壱さんのサイトの下記のエントリーに掲載されています。
上記のAmazonで予約受付中です(日付からすると発売は11月8日でしょうか)。
正式に発売されたらまた改めてエントリーします。
エントリーの中でMTタグを使う
MTタグはテンプレートでの使用が前提となっており、エントリーの内容ではを使うことができません。例えば他のエントリーアーカイブページへのリンクや、画像を貼り付けてURLを記述する場合、メインページのテンプレートや各アーカイブテンプレートには、下記リストのように、
エントリーアーカイブページへのリンク
<a href="<$MTLink entry_id="678"$>">
画像のURL
<img src="<$MTBlogURL$>images/hogehoge.gif" alt="hogehoge" />
とMTタグを使った記述が可能ですが、エントリーの内容には、
エントリーアーカイブページへのリンク
<a href="http://www.koikikukan.com/archives/2005/10/24-011007.php">
画像のURL
<img src="http://www.koikikukan.com/images/hogehoge.gif" alt="hogehoge" />
と、URLを直接書かなければなりません。
もしエントリーにMTタグを直接書くことができれば、エントリーアーカイブのPHP化を行った場合にファイル名を修正する必要がありませんし、ドメインを変更した場合もエントリーに書いたURLを修正する必要がなくなり、大変便利です。
ということで、エントリー内でMTタグが利用可能になるプラグインをご紹介します。
プラグイン配布元は下記です。
Life on the Kernel:MT::Plugin::EvalTemplate
以下、設定方法です。
2009.08.11 追記:MT4.1 から mteval モディファイアが標準機能として搭載されました。
1.プラグインのダウンロードおよびアップロード
配布元にある EvalTemplate のリンクをクリックしてダウンロードします。eval-template.txt というファイルがダウンロードされますので、ファイル名を eval-template.pl に変更し、それを plugins ディレクトリ直下にアップロードします。
2.テンプレート修正
テンプレートに記述されている MTEntryBody または MTEntryMore タグに eval 属性を付与します。本文でMTタグを使いたい場合は、MTEntryBody タグを探して
<$MTEntryBody eval="1"$>
と青色部分を追加するだけです。追記で利用したい場合は、MTEntryMore タグを
<$MTEntryMore eval="1"$>
に変更します。
これで「保存」をクリックし、テンプレートを保存します。これでエントリー編集画面に冒頭に挙げたようなMTタグを書き込んでみましょう。エントリーの保存・再構築後に記述したMTタグ、例えば <$MTBlogURL$> と書いたのであれば、URLに変換されていれば成功です。
ここではエントリー本文と追記のみについて書きましたが、このプラグインは Global Filter なので他のMTタグにも適用できるようです。ただし配布元で
間違っても Comments や Trackback で有効にしないように気を付けよう。
という注意書きがあります。例えば MTCommentBody でこの機能を有効にすると、投稿内容にMTタグを記述されるととんでもないことになる、という意味だと思いますので気をつけましょう。
2005.12.08
ダウンロードのファイル名を修正しました。
2006.11.21
配布元のリンクを修正しました。
Google PageRank 復活
3ヶ月以上前、つまり旧URLの時になんらかのペナルティを受けた影響で どのページも PageRank 0 の状態が続いてましたが、3日ほど前に突然復活していました。ちなみにトップページは、0になる前は3か4だったと記憶しています。今回は5に上がっていました。
検索してみると、PageRank の更新周期は3ヶ月のようです。そういえば現在のURLに変更したのが今年の7月18日です。Google へのサイト登録もその後すぐ行ったと思いますので、丁度3ヶ月ということで計算が合います。
以下、PageRankに関する記事です。
サーバ不具合のお詫び(2005/10/23)
本日未明、当サイトにアクセスできない状態が続いておりました。
原因は、自宅サーバである Windows XP へ他のPCを接続してフォルダの共有を行った際にファイアウォールおよび認証によるアクセスの設定が自動的に有効になってしまったようです。
現在、設定を修正して正常に接続されることを確認しております。ご迷惑をおかけ致しましたこと、この場をお借りしてお詫び申し上げます。
村治佳織・右手急性疾患
日本を代表する女流クラシックギタリスト・村治佳織さんが右手急性疾患(右手後骨間神経麻痺:全治1ヶ月)を患ってしまったそうです。公式サイトでも公演中止のお知らせが出ていました。
1日も早い回復を心よりお祈り申し上げます。
アーカイブテンプレート作成方法
Movable Type で月別・週別・日別のアーカイブページを作成する場合、デフォルトで使用されるアーカイブテンプレートは「日付アーカイブテンプレート」です。つまり、ひとつのテンプレートで3種類のアーカイブページを賄う設定になっています。
ですが、それぞれのアーカイブページで異なる動作を行いたい場合、例えば、月別アーカイブページでは「×年×月のページ」、日別アーカイブページでは「×月×日のページ」というタイトルを振りたい時、同じテンプレートを使っているとMTタグのみでこのような設定を行うことはできません(多分)。
ここでは、日別・週別アーカイブページに対し、新しく日別アーカイブテンプレート/週別アーカイブテンプレートを作成・対応させるカスタマイズを紹介します。これを行うことでアーカイブページとテンプレートの対応(アーカイブマッピング)は下記のようになります。
| アーカイブの種類 | 対応テンプレート |
|---|---|
| 月別アーカイブページ | 日付アーカイブテンプレート |
| 週別アーカイブページ | |
| 日別アーカイブページ |
| アーカイブの種類 | 対応テンプレート |
|---|---|
| 月別アーカイブページ | 日付アーカイブテンプレート |
| 週別アーカイブページ | 週別アーカイブテンプレート |
| 日別アーカイブページ | 日別アーカイブテンプレート |
なお、これ以外の用途で新しくアーカイブテンプレートを作成する場合にも参考になると思います。
1.テンプレートの作成
まず日別用アーカイブの元となる日付アーカイブテンプレートをテキストコピーします。
管理メニューの「テンプレート」→「アーカイブ」→「日付アーカイブ」の順にクリックし、テンプレートの内容をコピーします。
次に管理メニューの「テンプレート」→「アーカイブ」→「テンプレートを新規作成」の順にクリックし、次のページで下記の内容を設定します。
- テンプレート名:日別アーカイブ
- このテンプレートにリンクするファイル:(空白)
- テンプレートの内容:先ほどコピーした内容をペースト
設定が完了したら保存します。週別アーカイブテンプレートも同じ要領で作成し、「テンプレート名」を「週別アーカイブ」とします。
2.アーカイブマッピングの変更
「アーカイブマッピング」とは冒頭の説明の通り、あるアーカイブページとアーカイブテンプレートの対応です。ここではアーカイブページを生成する際、どのテンプレートを使用するかの設定を行います。
- 日別の場合
- アーカイブの種類:日別 テンプレート:日別アーカイブ
- 週別の場合
- アーカイブの種類:週別 テンプレート:週別アーカイブ
3.再構築を有効にする
上の画像の一番左にあるチェックボックスは、再構築対象にする・しないを決めるためのものです。上の画像では日別アーカイブは再構築されますが、週別アーカイブは再構築されない状態を示しています。Movable Type のデフォルト状態では日別・週別にはチェックされていないので、再構築が必要なアーカイブにチェックをつけて保存します。
これで全ての設定は完了です。
公開テンプレートをお使い頂いた方からよく「再構築でエラーになります」という質問を頂くのですが、公開テンプレートのメインページ(や他のアーカイブページ)にはカレンダーを表示するようにしており、カレンダーを表示するタグの中に
<a href="<$MTEntryLink archive_type="Daily"$>">
という設定があります。これはカレンダーの日付のリンクで、リンク先として日別アーカイブページを archive_type 属性で設定しています。この設定は日別アーカイブページの再構築を有効な状態にしておかないと再構築時に
というエラーになります。再構築を有効にするための設定がこの「アーカイブマッピング」の日別欄のチェックです。
デフォルトではここがチェックされていないためエラーになる訳です。
4.公開テンプレート修正例
公開テンプレートでは日付アーカイブページに
<div class="sidetitle">
The list of "<$MTArchiveTitle$>"
</div>
<div class="side">
<MTEntries>
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
</MTEntries>
</div>
という、該当アーカイブページの一覧を表示するサイドメニューを設置しています。
月別アーカイブでは青色の生成されるタイトル部分が
The list of "2005年10月"
となりますが、日別アーカイブでは
The list of "2005年10月20日"
と、やや長くなります。
日付アーカイブを共用しているとこの部分は変更できないのですが、独立させた日別アーカイブテンプレートのみ、例えば
<div class="sidetitle">
The List of "<$MTArchiveDate format="%b"$>月<$MTArchiveDate format="%d"$>日"
</div>
と変更することで、日別アーカイブページの該当部分を
The list of "10月20日"
という表示に変更することが可能になります。
本文に引用をつける
他のブログ記事や情報を引用する場合に、
これは引用文です
という囲い枠を使っているのを頻繁に見かけると思います。これは「引用」という手法で、当サイトのカスタマイズ記事ではリストを表示する時によく使用しています。
実はブログを始めた当初、この引用の設定方法がわからず(CSSもよく分かっていなかった)、調べるのに結構苦労した記憶があります。この表示方法を何という単語で検索して良いのかさえ分かりませんでした。
ということで、このエントリーでは引用の設定方法について説明します。
1.引用文を blockquote 要素で囲む
HTMLでは引用を明示する意味的なタグとして blockquote 要素が用意されています。
上記の例では本文中に
<blockquote><p>これは引用です。</p></blockquote>
という指定を行うだけです。blockquote 要素の子要素として p 要素等のブロック要素が構造上必要ですが、表示についてはブラウザ依存と思われます。
blockquote のデフォルトスタイルは上下左右にインデントが付与されますので、CSSの設定を行わなくてもそれなりの表示になります。余談ですが、短い引用(テキストの両端に「"」をつける)の場合は q 要素を使って、
<q>これは引用です。</q>
とします。
Movable Type 3.1x 以降の編集画面であれば、編集画面右上にある

というリンクアイコンを使うと便利です。使い方は、引用したいテキストをマウス等で選択状態にしてからこのアイコンをクリックすると、選択状態のテキストの両端に blockquote タグが付与されます。
2.スタイルを設定する
blockquote に任意のスタイル(枠線・背景等)を与えるために、CSS(styles-site.css)に下記のように blockquote のタイプセレクタを作ります。
blockquote {
}
この中に「プロパティ」と呼ばれるものを設定して、フォントや背景・枠線等の装飾を行います。下記に設定のサンプルを示します。各プロパティの意味は右側のコメント(/* */ の部分)を参考にしてください。
これは当サイトの blockquote に近い設定内容になっています。
blockquote {
margin: 15px; /* 枠線を表示する上下左右の空白 */
padding: 10px; /* 枠線から文字までの上下左右の空白 */
background: #fffff6; /* 背景色 */
border: 1px solid #999999; /* 文字色 */
font-size: 10px; /* フォントサイズ */
line-height: 150%; /* 改行幅 */
}
枠線(border)については、以前書いた枠線(border)の指定が参考になれば幸いです。
StyleCatcher によるスタイル変更方法
Movable Type 3.2から公開されている StyleCatcher プラグインを利用したスタイル変更方法です(先日エントリーしたMovable Type 3.2 テンプレート(for StyleCatcher)に書いていたものから StyleCatcher 部分の記述をこちらに独立させました)。
各サイトでも取り上げられていますが、Movable Type のデフォルトテンプレートを利用している場合、本プラグインを利用することでブログのスタイルシート(CSS)を簡単に切り替えることができます。
1.StyleCatcher プラグインのインストール
STYLECATCHER 1.01より Download をクリックしてプラグインをダウンロードします。
ダウンロードした .zip ファイルを解凍し、その中にある mt-static ディレクトリ配下の plugins ディレクトリと、plugins ディレクトリ配下の StyleCatcher ディレクトリをそのまま、mt-static または plugins ディレクトリにそれぞれアップロードします。繰り返しますと、
- plugins → mt-static ディレクトリへアップロード
- StyleCatcher → plugins ディレクトリへアップロード
となります。plugins ディレクトリを誤って plugins ディレクトリにアップロードしないように気をつけてください。
管理画面のメインメニュー右側にある「プラグイン」のリンクをクリックして、StyleCatcherプラグインがリストされている事を確認してください。 この状態で「StyleCatcher」タイトルのリンクをクリックするとエラーになりますのでご注意ください。
2.環境設定
1項で表示したプラグイン画面の「StyleCatcher」の右側にあるメニューより「設定を表示」をクリックすると、中央に下記のような設定画面が表示されます。
Theme Root URL:http://path/to/MT3.2/mt-static/themes/
Theme Root Path:/home/path/to/MT-3.2/mt-static/themes
基本設定が完了していれば、青色のようにURLおよびパスが設定されています。またそれぞれの最後に mt-static/themes というディレクトリが自動的に設定されていると思いますので、そのまま「変更を保存」をクリックします(もし設定されていなければ両方とも themes まで指定してください)。クリックすると自動的に mt-static 配下に themes ディレクトリが生成されます。また themes ディレクトリに base-weblog.css が生成されていることを併せて確認してください。base-weblog.css は汎用的なスタイルシートです。
Theme Root URLは、デフォルトでは "/" で開始しているかもしれませんが、上記のように http://? で始めた方が良いようです(このURLがCSSを参照するURLとして使用されます)。
生成された theme 配下に、次項で選択するCSSが保存されるようになります。また styles-site.css の内容は、これから選択するCSSを import するだけのファイルに上書きされます。現在の styles-site.css はスタイルシートを切り替える際に自動的にバックアップされますのでご心配なく。
3.スタイルシート切り替え
プラグイン画面のタイトル「StyleCatcher バージョン 1.01」のリンクをクリックすると切り替え画面にジャンプします。デフォルトの状態では Theme or Repository URL: というテキストエリアに
http://www.sixapart.com/movabletype/styles/library
が設定されています。これは Six Apart のライブラリです。この状態で「Find Style」をクリックし、しばらくすると画面下にテーマがサムネールで表示されます。好きなテーマをクリックして「Select a Weblog...」で設定するブログを選択し、「Choose this Design」をクリックします。
成功すると、
Successfully applied new theme selection.
というダイアログが表示されます。テンプレートの編集画面に進み、スタイルシートの内容が
/* This is the StyleCatcher theme addition. Do not remove this block. */
@import url(http://path/to/themes/base-weblog.css);
@import url(http://path/to/themes/library/stylexx.css);
/* end StyleCatcher imports */
に変換されていることを確認してください。旧スタイルシートのバックアップもインデックステンプレート画面に表示されていると思います。
4.選択したスタイルが反映されない場合
新しいスタイルが正常に読み込まれているかを確認します。そのためには、styles-site.css で 表示されている URL をそれぞれブラウザに設定して直接起動してください。これでファイルの取得ができない、または正常に表示されない場合、適正に読み込まれていないと思われますので、この部分の設定をご自身の環境に合うよう、直接編集・修正してください。
5.システム管理者権限がない場合
3.1x から 3.2 にバージョンアップする際、システム管理権限がなくなってしまうケースがあるようです。システム管理権限がないと、StyleCatcher の設定ができない等の問題が発生します。システム管理者の権限の有無は「メイン・メニュー」→「システム・メニュー」→「投稿者」の「投稿者名」をクリックしたページで確認できます。
なお、システム管理者権限を付与するCGIが下記に公開されていますのでご紹介しておきます。
Movable Type 管理メニュー対応表(3.1x - 3.2)
3.1x に馴染んでいる方にとっては、3.2 の管理メニューで元の項目がどこに移動したのか戸惑うことが少なくないと思います。ということで 3.1x と 3.2 の管理メニュー対応表を作ってみました。3.2 の欄内は「設定」のリンクをクリックした状態で、上から順に、
- 上部に並んでいるリンク
- グリーン色のメニュー名
- 項目名
で記すようにしています。
| 3.1x | 3.2 | ||
|---|---|---|---|
| 基本設定 | ウェブログの名前 | 基本 ブログの設定 ブログ名 | |
| ローカル・サイト・パス | 公開 サイトURL/パス サイト・パス | ||
| サイトのURL | 公開 サイトURL/パス サイトURL | ||
| ローカル・アーカイブ・パス | 公開 サイトURL/パス [アーカイブの設定]をチェック アーカイブ・パス | ||
| アーカイブのURL | 公開 サイトURL/パス [アーカイブの設定]をチェック アーカイブURL | ||
| 時間帯 | 基本 ブログの設定 時間帯 | ||
| 設定 | 一般的な設定 | ウェブログの説明 | 基本 ブログの設定 ブログの説明 |
| 表示する日数 | 基本 表示に関する初期設定 表示数 | ||
| 日付用の言語 | 基本 表示に関する初期設定 日付表示用の言語 | ||
| エントリーの表示順 | 基本 表示に関する初期設定 エントリーの表示順 | ||
| 新規エントリーのデフォルトのテキストフォーマット | 新規投稿 エントリーを新規に投稿したときの初期値 改行設定 | ||
| デフォルトの投稿の状態 | 新規投稿 エントリーを新規に投稿したときの初期値 公開設定 | ||
| 概要に載せる文字数 | 基本 表示に関する初期設定 概要にいれる文字数 | ||
| 除去機能 | 基本 表示に関する初期設定 許可するHTMLタグ | ||
| 表示されるメッセージ | 該当なし | ||
| クリエイティブ・コモンズ・ライセンス | 基本 他のサービスの設定 クリエイティブ・コモンズ・ライセンス | ||
| アーカイブの設定 | 優先するアーカイブのタイプ | 公開 公開 パーマリンクの設定 | |
| アーカイブ・ファイルの拡張子 | 公開 公開 アーカイブの拡張子 | ||
| 以前の形式の個別アーカイブへのリンクをつかう | 該当なし | ||
| 広報/ リモートインターフェイス/ トラックバック | ウェブログが更新されたときに通知する | 新規投稿 更新Ping/トラックバックの設定 更新を自動通知する先 | |
| Recent Updaed キー | 新規投稿 更新Ping/トラックバックの設定 Recently Updatedキー | ||
| Google API キー | 基本 他のサービスの設定 Google APIキー | ||
| トラックバックをデフォルトで受け付ける | コメント/トラックバック トラックバック トラックバックを受信 | ||
| トラックバックをメールで通知する | コメント/トラックバック トラックバック メール通知 | ||
| トラックバック先の自動検出を動作させる | 新規投稿 更新Ping/トラックバックの設定 トラックバック自動検知(外部・内部別が追加) | ||
| コメントの設定 | 未登録の読者からのコメントを受けつける | コメント/トラックバック コメント 投稿を受け付ける条件(設定条件変更) | |
| 名前とメールアドレスを必須にしますか | コメント/トラックバック コメント メールアドレスの要求 | ||
| コメントの事前確認を有効にする。 | コメント/トラックバック コメント 即時に公開するコメント | ||
| 登録されたコメンターのコメントは許可する | コメント/トラックバック コメント 投稿を受け付ける条件(設定条件変更) | ||
| TypeKey トークン | コメント/トラックバック コメント 認証サービスの設定(TypeKeyログインのみでトークンが自動設定されるよう変更) | ||
| コメンターを自動的に登録する | 該当なし([コメント投稿者]へ移動?) | ||
| TypeKey からメールアドレスを取得する | コメント/トラックバック コメント メールアドレスの要求(?) | ||
| デフォルトでの「コメントを受けつける」の設定 | コメント/トラックバック コメント 投稿を受け付ける条件 | ||
| コメントを並べる順番 | 基本 表示に関する初期設定 コメントの表示順 | ||
| コメントのテキストフォーマット | コメント/トラックバック コメント 改行設定 | ||
| コメントでのHTMLの利用を許可する | コメント/トラックバック コメント HTMLの利用を許可 | ||
| URLを自動的にリンクにする | コメント/トラックバック コメント URLを自動的にリンク | ||
| コメントが登録されたら通知する | コメント/トラックバック コメント メール通知(条件追加) | ||
| アーカイブの設定 | 新しく、テンプレートとアーカイブを関連付ける。 | 公開 アーカイブ・マッピング [マッピングを新規作成]をクリック | |
| アーカイブ | 公開 アーカイブ・マッピング | ||
| 禁止IP | コメント/トラックバック 迷惑コメント/トラックバック | ||
| 追加項目 | コメント/トラックバック トラックバック 事前確認 | ||
| 他メニューから移動してきたもの | 公開 公開 再構築オプション | ||
3.2 では「表示されるメッセージ」と「以前の形式の個別アーカイブへのリンクをつかう」という項目がなくなっています。
「禁止IP」と「迷惑コメント/トラックバック」の関連付けはこじつけです。
TOHOシネマズ市川コルトンプラザ
近所に「コルトンプラザ」というショッピングセンターがあるのですが、そこの映画館で「おいしい映画祭」というイベントを行ってました。期間は 10/1?10/21 ということで残りわずかですが、割引料金で映画が見れます。
以下、TOHOシネマズ 市川コルトンプラザのニュースからの引用です。
第3回「おいしい映画祭」実施決定!「食」をテーマ、または「食」が重要な要素として出てくる映画の中から選りすぐりの作品をピックアップ。第3回目となる今年は、アカデミー賞受賞作品や、今ブームの韓流映画も取り揃え、さらに充実したラインナップでお届けいたします。また、映画の上映だけでなく、映画に登場するまた関連するメニューをコルトンプラザ内のレストランで再現。「映画」と「食」の結びつきを深めるキャンペーンも同期間に実施いたします。既に観た作品も「食」という新しい観点で新しい発見ができるかも。このおいしい機会を是非お見逃しなく! 期間 10月1日(土)?21日(金) 上映スケジュール 10/1?10/7 「僕の彼女を紹介します」10:00?/15:50? 「シュリ」12:50?/19:00? 10/8?10/14 「ノッティングヒルの恋人」10:00?/15:50? 「サイドウェイ」12:50?/19:00? 10/15?10/21 「初恋のきた道」10:00?/15:50? 「ライフ・イズ・ビューティフル」12:50?/19:00? 料金 ¥1,000 ※全席指定・全回完全入替制
スタイルシート切り替え(プルダウンメニュー版)
Category:[CSS]
Tag:[Customize, MovableType, PulldownMenu, Stylesheet]
Permalink
スタイルシート切り替えをプルダウンメニューで行う方法です。画像のようにプルダウンメニューに表示されたスタイルを選択すると、選択した時点でスタイルが切り替わります。 |
以前よりご紹介しているスタイルシート切り替えのメニュー部分のみの変更ですので、その他の、
- 1.スタイルシート作成
- 2.テンプレート修正
- 3.styleswitcher.js のダウンロード・アップロード
- 4.テンプレートに styleswitcher.js インクルードの設定
につきましてはスタイルシート切り替えの1?4項を参照ください。
ということで、ここでは5項のみ掲載します。
5.切り替えメニューの追加
各テンプレートのサイドバーに以下のタグを追加します。JavaScript によるプルダウンメニューの状態保持を行わない場合と、状態保持を行なう場合の2種類のリストを掲載します。「プルダウンメニューの状態保持」とは、ブラウザの更新や新しくブラウザを開いた時に、それまでに選択されていたプルダウンメニューと同じメニューを表示することを意味します。状態保持を行わない場合は常に一番上のメニュー(ここでは "default")が表示されます。
状態保持を行うとユーザビリティが向上するので、当サイトでは後者(5.2項)を推奨します。
5.1 切り替えメニュー(プルダウンメニューの状態保持を行わない)
下記のリストをサイドバーの任意の位置に追加します。リストはデフォルトテンプレートの場合です。
<div class="module-style module">
<h2 class="module-header">Stylesheet</h2>
<div class="module-content">
<form>
<select name="select" onchange="setActiveStyleSheet(this.form.select.value);">
<option value="Default">default</option>
<option value="Large">Large</option>
<option value="Netscape">Netscape</option>
</select>
</form>
</div>
</div>
option 要素は元エントリーのサンプルに合わせてますので value 属性や値(青色部分)は適宜変更してください。
公開テンプレートの場合は、上記リストを下記のように、赤色部分を削除して青色部分を追加してください。
<div class="module-style module">
<h2 class="module-header">Stylesheet</h2>
<div class="module-content">
<div class="sidetitle">Stylesheet</div>
<div class="side">
<form>
:
</form>
</div>
</div>
5.2 切り替えメニュー(プルダウンメニューの状態保持を行う)
下記のリストをサイドバーの任意の位置に追加します。リストはデフォルトテンプレートの場合です。5.1との差分を青色で示しています。差分は form 要素への id 属性および、状態保持を行う JavaScript です。
<div class="module-style module">
<h2 class="module-header">Stylesheet</h2>
<div class="module-content">
<form id="stylesheet">
<select name="select" onchange="setActiveStyleSheet(this.form.select.value);">
<option value="Default">default</option>
<option value="Large">Large</option>
<option value="Netscape">Netscape</option>
</select>
</form>
</div>
</div>
<script type="text/javascript">
<!--
var style = readCookie('style');
var nodes = document.getElementById('stylesheet').getElementsByTagName("option");
for (var i = 0; i < nodes.length; i++) {
if(nodes[i].value == style){
nodes[i].selected = true;
}
}
//-->
</script>
スタイルシート名(ここでは "Large"や "Netscapte")は5.1項と同様に任意の名称に変更してください。なおこれらを変更しても JavaScript 部分を変更する必要はありません。
公開テンプレートの場合は、上記リストを下記のように、赤色部分を削除して青色部分を追加してください(5.1と同じ)。
<div class="module-style module">
<h2 class="module-header">Stylesheet</h2>
<div class="module-content">
<div class="sidetitle">Stylesheet</div>
<div class="side">
<form id="stylesheet">
:
</form>
</div>
</div>
<script type="text/javascript">
:
StyleCatcher リポジトリ公開方法
Category:[リポジトリ]
Tag:[MovableType, Plugin, Repository, StyleCatcher]
Permalink
1.用意するもの
1.1 テーマ画像(サムネール)
(thumbnail.gif)テーマ一覧にサンプルとして表示するためのテーマ画像(サムネール)です。ファイル名は「thumbnail.gif」です。表示される時のサイズは 120×90 になります。
1.2 テーマ画像
(thumbnail-large.gif)テーマ一覧のサムネール画像をクリックした後、右側の「詳細を表示」をクリックした時にサンプルとして表示するためのテーマ画像です。ファイル名は「thumbnail-large.gif」です。表示される時のサイズは 300×250 になります(高さは作成した画像によって異なるようです)。
1.3 スタイルシート
(xxx.css)テーマとなるスタイルシートです。任意の名称で結構ですが、拡張子を含まない部分は、その上位のディレクトリと同じ名称にしてください。例えば、hogehoge.css という名称にする場合、スタイルシートをアップロードする上位のディレクトリ名も hogehoge とします。
StyleCatcher を利用してテーマを切り替えるとこの hogehoge というフォルダがユーザの StyleCatcher用フォルダにコピーされるため、他のテーマと重複しないような名称が望ましいでしょう。
またスタイルシートの先頭付近に下記のデータを設定してください(サンプルの内容は当リポジトリのものに近いです)。
/*
name: koikikukan Style Library
designer: yujiro
designer_url: http://www.koikikukan.com/
developer: yujiro
developer_url: http://www.koikikukan.com/
*/
これはテーマ選択時に利用される情報となります。青色部分にご自身の情報を設定しておくと、テーマ検索時にサンプルイメージ下にこれらの情報が表示されます。
1.4 index.html
プラグイン画面の Theme or Repository URL: に設定した時に読み込まれる HTML です。内容は下記の通りです。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head profile="http://www.w3.org/2003/g/data-view">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="theme" type="text/x-theme" href="http://www.koikikukan.com/repository/styles-site/styles-site.css" />
<title>KOIKIKUKAN Repository</title>
</head>
<body>
</body>
</html>
link 要素にCSSが配置されているURLを設定します。また title 要素にリポジトリのタイトルを設定します。
タイトルは Categories 欄のタイトルとして表示されます。
複数のCSSを公開する場合は、link 要素を並べて記述します。
2.リポジトリのディレクトリ構成
例として、repository ディレクトリに hogehoge.css というスタイルシートを配置して公開する場合のディレクトリ構成は下記のようになります。
- repository/
- index.html
- hogehoge/
- hogehoge.css
- thumbnail.gif
- thumbnail-large.gif
リポジトリ自体はローカル・サイト・パス(ブログのindex.htmlがあるところ)に作るのが分かりやすいでしょう。またリポジトリ用の index.html はどこにアップロードしても(その中にある link 要素の href 属性からCSSを引き込むので)構わないと思いますが、便宜上 repository 直下に配置しましょう。
先ほども申し上げた通り、repository と hogehoge.css の間に、スタイルシートと同じ名称のディレクトリを作ってください。
複数のテーマを公開する場合は、hogehoge ディレクトリと同じ位置に、公開する分のディレクトリを用意します。
例えば hogehoge1.css と hogehoge2.css の2つのテーマを公開する場合のディレクトリ構成は、
- repository/
- index.html
- hogehoge1/
- hogehoge1.css
- thumbnail.gif
- thumbnail-large.gif
- hogehoge2/
- hogehoge2.css
- thumbnail.gif
- thumbnail-large.gif
となります。
また、CSSに画像ファイル(背景画像等)を引き込む設定をしている場合は、画像ファイルも同時に取得し、hogehoge 配下に配置します。言い換えると、CSSと画像ファイルは同じディレクトリに配置されますので、CSSに設定する画像ファイルのURLはファイル名のみで大丈夫ということになります。
なお引き込むべき画像ファイルが存在しない場合、テーマ適用時にエラーとなりますのでご注意ください。
上記の構成で各ファイルを配置し、外部へ公開すれば完成です。
3.プラグインの主な動作
リポジトリ検索?テーマ適用までの操作とファイルの具体的な配置動作等を参考までに記しておきます。
3.1 環境設定の「変更を保存」クリック時
base-weblog.css が Theme Root Path に生成されます。
3.2 リポジトリ検索時
Theme or Repository URL に設定されたURL(http://~/repository)より index.html を取得します。
取得した index.html より title 要素に記述されたタイトルを link 要素に記述されたCSSをテーマとして表示します。
同時に同ディレクトリにある thumbnail.gif を表示します。
3.3 「詳細を表示」をクリック時
thumbnail-large.gif の表示およびCSSにあるデータを詳細データとして表示します。
3.4 テーマ適用(Choode this Design クリック)時
CSSにあるファイルを、ひとつ上のディレクトリから theme 配下にコピーします。
styles-site.css の内容は
/* This is the StyleCatcher theme addition. Do not remove this block. */
@import url(http://www.koikikukan.com/mt-static/base-weblog.css);
@import url(http://www.koikikukan.com/mt-static/themes/styles-site/styles-site.css);
/* end StyleCatcher imports */
に書き換えられ、旧styles-site.css がバックアップされます。
以上です。
設定方法がなかなか公開されないので自力で探ったのですが、調べた後で下記のエントリーがあがっていることに気がつきました(バカ)。
qootas.org/blog:StyleCatcher build for MT3.2
なお上記は 8月時点の内容なので、StyleCatcher バージョンアップ前の可能性があります。
Movable Type 3.2-ja-2 リリース
「3.2-ja 再構築時のパフォーマンス」シリーズで書いてきた不具合が修正された 3.2-ja-2 がリリースされました。
Movable Type 3.2日本語版 Release-2 の提供を開始
3.2-ja-2は、10月5日にご案内しましたBerkeley DBの環境下での3.2の不具合を修正したものです。加えて、recently_commented_onの処理を見直し、パフォーマンスが低下していた現象を修正しています。
greenplastic.net さんの Movable Type 3.2日本語版 Release-2 でもすでに公開されていますが、変更されたファイルは下記の通りです(ツールは独自に起動・確認しています)。
- /lib/MT.pm
- /lib/MT/ObjectDriver/DBM.pm
- /lib/MT/Template/ContextHandlers.pm
- /mt-static/docs/mtchanges.html
- /php/mt.php
バージョン表記がこれまでと異なるのは日本語版独自の修正だからでしょう。
まだ試していませんがとりあえずお知らせまで。
Movable Type テンプレート(for StyleCatcher)
Category:[テンプレート, リポジトリ]
Tag:[3.2-ja, MovableType, Repository, StyleCatcher]
Permalink
これは、現在公開中の Movable Type テンプレートのスタイルシートの各IDセレクタ・classセレクタをデフォルトテンプレートに合うように変更し、StyleCatcher プラグインが提供する base-weblog.css と併用可能な実装にしたものです。例えばデフォルトの2カラムレイアウトを変更しないのであれば、StyleCatcher の操作のみですべてのテンプレートのスタイルを切り替えることが可能です。 なおカラムレイアウトは固定レイアウトのみ動作を確認しています。テンプレートをリキッドレイアウトにしたり、詳細なカスタマイズを行いたい場合はMovable Type テンプレートをご利用ください。 |
使い方
* カッコ内は 3.2 で英語版の StyleCatcher プラグインを利用する場合の項目を表示しています。
下記のURLをコピーして StyleCatcher プラグインの「テーマ/リポジトリへのURL: (Theme or Repository URL)」に設定し、「スタイル検索(Find Style)」をクリックしてください。
サムネール画像が表示されたらそれをクリックし、(複数ブログがある場合のみ)右下のプルダウンメニューから適用するブログを選択(Select a Weblog...)、最後に「デザインを適用(Choose this Design)」でクリックします。
成功すると、
新しいテーマを適用しました(Successfully applied new theme selection.)
というダイアログが表示されます。これで全体を再構築をすれば新しく選択したスタイルがブログに反映されます。
レイアウト切り替え
公開テンプレートと同様、スタイルシートひとつで1カラム?3カラムまでの各レイアウトに対応しています。
レイアウトは、各テンプレートの body 要素の class属性を書き替えることで行います(詳細はMovable Type テンプレートの1項を参照してください)。
なお公開テンプレートと異なる点として、デフォルトレイアウトのカラム名(IDセレクタ)は左から alpha、beta、gamma と指定するようになっています。またそれぞれに xxx-inner という名称のセレクタが存在します。
インストール後のデフォルトレイアウトは、本文に alpha、右カラムに beta という id 属性が割り当てられています。下記はメインページのHTMLマークアップです。
:
(略)
:
<div id="pagebody">
<div id="pagebody-inner" class="pkg">
<div id="alpha">
<div id="alpha-inner" class="pkg">
:
(左カラム:本文)
:
</div>
</div>
<div id="beta">
<div id="beta-inner" class="pkg">
:
(右カラム:サイドバー)
:
</div>
</div>
</div>
</div>
:
(略)
:
これを3カラムに変更するにはHTMLマークアップを下記のように変更します。
:
(略)
:
<div id="pagebody">
<div id="pagebody-inner" class="pkg">
<div id="alpha">
<div id="alpha-inner" class="pkg">
:
(左カラム:サイドバー)
:
</div>
</div>
<div id="beta">
<div id="beta-inner" class="pkg">
:
(中央カラム:本文)
:
</div>
</div>
<div id="gamma">
<div id="gamma-inner" class="pkg">
:
(右カラム:サイドバー)
:
</div>
</div>
</div>
</div>
:
(略)
:
まず、右カラム部分の id 属性名 beta と beta-inner を gamma および gamma-inner に変更します。同様に中央カラムの id 属性名 alpha および alpha-inner を beta と beta-inner に修正します。最後に左カラムになる alpha と alpha-inner という id 属性名の div 要素を追加します。
3カラムレイアウトの各カラムと id 属性の対応は下記のようになります。
- alpha/alpha-inner:左カラム(左サイドバー)
- beta/beta-inner:中央カラム(本文)
- gamma/gamma-inner:右カラム(右サイドバー)
2カラム(左サイドバー)に変更する場合は、
- alpha/alpha-inner:左カラム(サイドバー)
- beta/beta-inner:中央カラム(本文)
となるように修正します。
テーブルタップは
Movable Type + SQLite
3.2-ja では BerkeleyDB 使用による再構築の不具合が発生しておりますが、それを差し引いても BerkeleyDB は根本的に動作が遅いというのは否めません。
ということで、Movable Type + SQLite を使用する場合の設定方法です。DBの設定が簡単&高速なので、特に自宅サーバで BerkeleyDB を使用されている方(で MySQL の環境構築が困難な方)はこちらに乗り換えられることをお勧めします。
以前、MySQL(+PHP) の環境設定でかなりてこずった経験があるので、「SQLite も似たようなもの」という先入観がありましたが、実際に試してみるとその想いは完全に覆されました。後述する Perl モジュールの DBD-SQLite さえインストールできれば、あとの設定は BerkeleyDB 並、つまりディレクトリを作成して、mt-config.cgi にそのパスを記述するだけです。
1項はWindows自宅サーバでの Perl モジュールの DBD-SQLite インストール方法について記しています。レンタルサーバの場合は1項を読み飛ばしてもらえれば結構ですが、DBD-SQLite がインストールされていることが前提となります(使用可否は mt-check.cgi の実行画面から確認してください)。
以下、設定方法です。
1.DBI-SQLite のインストール
SQLite用Perlモジュールの DBI-SQLite をインストールします。Perlがインストールされていることが前提です。
1.1 PPMによるインストール
MS-DOSプロンプトを開いて下記を実行します。下記は5.6.xの例です。
C:¥>ppm
PPM interactive shell (2.2.0) - type 'help' for available commands.
PPM> install DBD-SQLite
Install package 'DBD-SQLite?' (y/N): y
Installing package 'DBD-SQLite'...
Downloading http://ppm.activestate.com/PPMPackages/5.6/MSWin32-x86-multi-thread/DBD-SQLite-1.08.tar.gz ...
Installing C:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.bs
Installing C:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.dll
Installing C:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.exp
Installing C:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.lib
Installing C:¥usr¥html¥site¥lib¥DBD¥SQLite.html
Installing C:¥usr¥site¥lib¥DBD¥SQLite.pm
PPM> quit
1.2 上記がエラーになる場合
使用している Perl のバージョンによって
のいずれかのページを開いて、リストから DBD-SQLite-1.09.zip(5.6.xは1.08が最新の模様)を探し、クリックしてダウンロードします。バージョンは更新適宜されますので、"DBD-SQLite" で検索し、タイムスタンプの新しいバージョンを選ぶと良いでしょう。
ダウンロードしたアーカイブを解凍して DBD-SQLite.ppd があることを確認してください。
次にMS-DOSプロンプトを開き、さきほど解凍した DBD-SQLite.ppd があるフォルダまで移動して、
C:¥> cd DBD-SQLite-1.09_zip
C:¥DBD-SQLite-1.09_zip> ppm install DBD-SQLite.ppd
を実行します。成功すると下記のようなメッセージが表示されます。下記は5.8.xの例です。
====================
Install 'DBD-SQLite' version 1.09 in ActivePerl 5.8.6.811.
====================
Installing D:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.bs
Installing D:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.dll
Installing D:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.exp
Installing D:¥usr¥site¥lib¥auto¥DBD¥SQLite¥SQLite.lib
Installing D:¥usr¥html¥site¥lib¥DBD¥SQLite.html
Files found in blib¥arch: installing files in blib¥lib into architecture dependent library tree
Installing D:¥usr¥site¥lib¥DBD¥SQLite.pm
Successfully installed DBD-SQLite version 1.09 in ActivePerl 5.8.6.811.
メッセージが表示されるまで少し時間がかかるようなので慌てずに待ちましょう。
2.データベースの変換
2.1 Movable Type 新規インストールの場合
任意のエディタで mt-config.cgi(mt-config.cgi-original をリネームまたはコピーしたもの)を開き、
### SQLite Configuration - SQLite requires only the path to your SQLite
# database file.
#
# ObjectDriver DBI::sqlite
# Database /path/to/sqlite/database/file
の部分を設定します。ObjectDriver は行頭の「#」を外します。Database という項目は、行頭の「#」を外し、項目名の後ろに、ルートからの絶対パスでデータベースファイル名までを指定します。
これから設定するデータベースが、
- データベースファイルまでのパス:/hogehoge/MT-3.2/SQLite
- データベースファイル名:mt
である場合、下記のように設定します。
### SQLite Configuration - SQLite requires only the path to your SQLite
# database file.
#
ObjectDriver DBI::sqlite
Database /hogehoge/MT-3.2/SQLite/mt
データベースファイル名は任意の名称で結構です。またデータベースファイルまでのディレクトリは mt.cgi 実行前に予め作成しておいてください。また作成したディレクトリのパーミッションは、CGIスクリプトから書き込めるよう変更(755/777等)をしておきます。
CGIPath および StaticWebPath は説明を割愛しますので適宜設定してください。
これで mt.cgi を実行すればインストールが開始されます。正常に設定されていない場合は mt.cgi 実行後にエラーメッセージが表示されますので、内容を確認して修正・再実行してください。
2.2 Movable Type アップグレード(BerkeleyDB から SQLite へ移行)の場合
ここでは2つの方法を提示します。ひとつは、移行用スクリプト mt-db2sql.cgi を用いた正規の方法です。もうひとつは、mt-db2sql.cgi 実行では500エラーになる可能性があるので、Ogawa::Memoranda さんの mt-db-convert.cgi を利用する方法を紹介します。
個人的には後者の方法をお勧めします。
なお本項(および3項)の作業は、アップグレード前後のどちらの時点でも実施可能です。
2.2.1 mt-db2sql.cgi を使用する場合
任意のエディタで mt-config.cgi(mt-config.cgi-original をリネームまたはコピーしたもの)を開き、移行する前準備のために BerkeleyDB と SQLite の両方のパスを設定します。
- BerkeleyDBのディレクトリ:db
- SQLiteデータベースファイルまでのパス:/hogehoge/MT-3.2/SQLite
- SQLiteデータベースファイル名:mt
とした場合、下記のように設定します。
### SQLite Configuration - SQLite requires only the path to your SQLite
# database file.
#
ObjectDriver DBI::sqlite
Database /hogehoge/MT-3.2/SQLite/mt
#
#
### BerkeleyDB Configuration - BerekelyDB requires only the path to your
# database directory.
#
DataSource ./db
SQLite のデータベースファイル名は任意の名称で結構です。またデータベースファイルまでのディレクトリは mt-db2sql.cgi 実行前に予め作成しておいてください。また作成したディレクトリのパーミッションは、CGIスクリプトから書き込めるよう変更(755/777等)をしておきます。
この後、ブラウザより mt-db2sql.cgi を実行します。
この実行について、自宅サーバで500エラーになる場合は下記のリストのように、MS-DOSプロンプトからの実行に変更してみてください。またその際、mt-config.cgi の Database に設定した場所にファイルが生成されていると思われますので、そのファイルを一旦削除することをお忘れなく。
C:¥> cd hogehoge¥MT-3.2
C:¥hogehoge¥MT-3.2> perl mt-db2sql.cgi
Content-Type: text/html
<pre>
Loading database schema...
Loading data...
MT::Author
1
MT::Blog
1
MT::Category
1
2
3
:
(略)
:
MT::Comment
1
2
3
:
(略)
:
MT::Entry
1
2
3
:
(略)
:
MT::IPBanList
MT::Log
実験した限りでは、ここまで表示されたあと応答が返ってこなくなり、しばらくこのまま放置。エクスプローラーを起動して、新しく作られたDBファイル(mt)のタイムスタンプが更新されないことを確認して Ctrl + c で強制終了させました(この後 Movable Type は正常に動作しました)。
移行が完了したら mt-config.cgi の BerkeleyDB の設定箇所を、
### BerkeleyDB Configuration - BerekelyDB requires only the path to your
# database directory.
#
# DataSource ./db
と、コメントアウト(行頭に「#」を付与します)して、mt.cgi を実行します。
2.2.2 mt-db-convert.cgi を使用する場合
下記のページより mt-db-convert.zip をダウンロードします。
アーカイブを解凍すると mt-db-convert.cgi がありますので、CGIPath(mt.cgi があるディレクトリ)にアップロードします。ブラウザより mt-config.cgi を起動します。
起動画面で下記の項目をそれぞれ設定します。
- Source DB Configuration
- DataSource:BerkeleyDB のパス(mt.cgi または mt.config.cgi の設定を使って自動的に入力されます。このパスは絶対パスになっていることが推奨事項になっています)
- ObjectDriver:BerkeleyDB
- Destination DB Configuration
- ObjectDriver:SQLite
- DataBase:SQLite のパス(2.1項の Database と同じ内容)
SQLite のデータベースファイル名は任意の名称で結構です。またデータベースファイルまでのディレクトリは mt-db-convert.cgi 実行前に予め作成しておいてください。また作成したディレクトリのパーミッションは、CGIスクリプトから書き込めるよう変更(755/777等)をしておきます。
設定が完了したら画面下の「Convert」をクリックします。次ページで変換結果と mt-config.cgi の設定内容
Done copying data from DBM to DBI::sqlite! All went well.
Your recommended setting
-------------------------------------
# DataSource /hogehoge/MT-3.2/db
ObjectDriver DBI::sqlite
Database /hogehoge/MT-3.2/SQLite/mt
-------------------------------------
が表示されます。設定内容(青色)は mt-config.cgi の
### SQLite Configuration - SQLite requires only the path to your SQLite
# database file.
#
ObjectDriver DBI::sqlite
Database /hogehoge/MT-3.2/SQLite/mt
#
#
### BerkeleyDB Configuration - BerekelyDB requires only the path to your
# database directory.
#
# DataSource /hogehoge/MT-3.2/db
の青色部分に該当しますので、それぞれコピー&ペーストします(BerkeleyDB の設定をコメントアウトするのもお忘れなく)。
あとは mt.cgi を実行すればOKです。
下記のエントリーも参考になります。
以上です。
クラムチャウダーに
3.2 アップグレードによるテンプレート変更箇所
3.17-ja(以降)から 3.2-ja にアップグレードされた場合の、各テンプレートの変更箇所をまとめてみました。3.15x-ja からアップグレードされた方は3.2 アップグレードによるテンプレート変更箇所(3.15x用)をご覧ください。
なお 3.2 英語版では、3.1x のテンプレートでコメントが正常に投稿できないという問題がありましたが、3.2 日本語版に 3.17-ja 以降 のテンプレートを設定したところ、この記事の変更を行わなくても正常に投稿できました。ということで無理にこの変更を行う必要はないと思いますが、3.2 では色々と改善されていると思われますのでお勧めレベルの内容です。
また 3.2 がリリースされたかなり早い時期に下記のエントリーがあがっており、参考にさせて頂きました。ありがとうございました。
The blog of H.Fujimoto:Movable Type 3.2でのコメント入力フォームの変更
以下、修正箇所について説明します(不足ありましたらお許しください)。
1.メインインデックス/カテゴリー・アーカイブ/日付アーカイブ
body 要素
コメント・トラックバック欄のMTタグ MTEntryIfAllowPings および MTEntryIfAllowComments(赤色)を MTIfPingsActive および MTIfCommentsActive(青色)に変更します
修正前
<MTEntryIfAllowPings>
:
</MTEntryIfAllowPings>
<MTEntryIfAllowComments>
:
</MTEntryIfAllowComments>
修正後
<MTIfPingsActive>
:
</MTIfPingsActive>
<MTIfCommentsActive>
:
</MTIfCommentsActive>
2.エントリーアーカイブ/コメント・プレビュー/コメント・エラー
head 要素
<head>~</head> にある Remember Me のインクルードは不要ですので下記の行を削除します。
<MTInclude module="Remember Me">
その代わりに、<head>~</head> にJavaScriptのインクルードを追加します。
<script type="text/javascript" src="<$MTBlogURL$>mt-site.js"></script>
コメント・プレビュー/コメント・エラーの場合はさらにもう1行追加します。
<script type="text/javascript" src="<MTStaticWebPath>js/commenter_name.js"></script>
body 要素
body 要素自体にJavaScriptを起動する記述を追加します。<body onload="individualArchivesOnLoad(commenter_name)">
またコメント・トラックバックのMTタグ MTEntryIfAllowPings および MTEntryIfAllowComments(赤色)を MTIfPingsActive および MTIfCommentsActive(青色)に変更します
修正前
<MTEntryIfAllowPings>
:
</MTEntryIfAllowPings>
<MTEntryIfAllowComments>
:
</MTEntryIfAllowComments>
修正後
<MTIfPingsActive>
:
</MTIfPingsActive>
<MTIfCommentsActive>
:
</MTIfCommentsActive>
なお、MTPings MTComments タグについてはこれまで通りですが、コメント・トラックバックが存在しない場合はタグに挟まれたデータは表示されませんのでご注意ください。
3.その他
上記以外の変更箇所は文章での説明が困難ですので、公開テンプレートを例にして、3.1x-ja から 3.2-ja への修正箇所をリストでまとめて表示します。デフォルトテンプレートもほぼ同じ変更で済むと思いますので参考になれば幸いです。削除を赤色、追加を青色で示しています。
エントリーアーカイブ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" />
<meta name="generator" content="http://www.movabletype.org/" />
<title><$MTBlogName encode_html="1"$>: <$MTEntryTitle$></title>
<link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="<$MTBlogURL$>index.rdf" />
<link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTBlogURL$>atom.xml" />
<link rel="start" href="<$MTBlogURL$>" title="Home" />
<MTEntryPrevious>
<link rel="prev" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" />
</MTEntryPrevious>
<MTEntryNext>
<link rel="next" href="<$MTEntryPermalink$>" title="<$MTEntryTitle encode_html="1"$>" />
</MTEntryNext>
<$MTEntryTrackbackData$>
<MTInclude module="Remember Me">
<script type="text/javascript" src="<$MTBlogURL$>mt-site.js"></script>
<MTBlogIfCCLicense>
<$MTCCLicenseRDF$>
</MTBlogIfCCLicense>
</head>
<body onload="individualArchivesOnLoad(commenter_name)">
<div id="box">
<!-- タイトル開始 -->
<div id="banner">
<h1><a href="<$MTBlogURL$>" accesskey="1"><$MTBlogName encode_html="1"$></a></h1>
<h2><$MTBlogDescription$></h2>
</div>
<!-- タイトル終了 -->
<!-- コンテンツ開始 -->
<div id="container">
<div class="blog">
<div id="menu">
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>">« <$MTEntryTitle$></a> |
</MTEntryPrevious>
<a href="<$MTBlogURL$>">メイン</a>
<MTEntryNext>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> »</a>
</MTEntryNext>
</div>
<h2 class="date"><$MTEntryDate format="%x"$></h2>
<div class="blogbody">
<h3 class="title">●<$MTEntryTitle$></h3>
<$MTEntryBody$>
<div id="a<$MTEntryID pad="1"$>more"><div id="more">
<$MTEntryMore$>
</div></div>
<div class="posted">Posted by <$MTEntryAuthor$> at <$MTEntryDate$>
</div><!-- posted -->
</div><!-- blogbody -->
<!-- トラックバックを同一ウィンドウに表示する場合ここから -->
<MTEntryIfAllowPings>
<MTIfPingsActive>
<a id="trackbacks" name="trackbacks"></a>
<div class="comments-head">トラックバックURL</div>
<div class="comments-body">
<p class="techstuff">このエントリーのトラックバックURL:<br />
<$MTEntryTrackbackLink$></p>
</div>
<MTIfNonZero tag="MTEntryTrackbackCount">
<!--
<p>このリストは、次のエントリーを参照しています: <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>:</p>
-->
<MTPings>
<MTPingsHeader><div class="comments-head">トラックバック</div></MTPingsHeader>
<MTPings>
<div class="comments-body">
<p id="p<$MTPingID$>">
» <a href="<$MTPingURL$>"><$MTPingTitle$></a> from <$MTPingBlogName$><br />
<$MTPingExcerpt$> <a href="<$MTPingURL$>">[続きを読む]</a>
</p>
<div class="comments-post">Tracked on <$MTPingDate$></div>
</div><!-- comments-body -->
</MTPings>
</MTIfNonZero>
</MTIfPingsActive>
</MTEntryIfAllowPings>
<!-- トラックバックを同一ウィンドウに表示する場合ここまで -->
<MTEntryIfAllowComments>
<MTIfCommentsActive>
<a id="comments" name="comments"></a>
<MTComments>
<MTCommentsHeader><div class="comments-head">コメント</div></MTCommentsHeader>
<MTComments>
<a id="c<$MTCommentID$>" name="c<$MTCommentID$>"></a>
<div class="comments-body">
<$MTCommentBody$>
<div class="comments-post">Posted by <$MTCommentAuthorLink default_name="Anonymous" spam_protect="1"$> <MTCommentAuthorIdentity> at <$MTCommentDate$></div>
</div>
</MTComments>
<MTEntryIfCommentsOpen>
<MTIfCommentsAllowed>
<div class="comments-head">コメントしてください</div>
<div class="comments-body">
<MTIfRegistrationRequired>
<div id="thanks">
<p>サイン・インを確認しました、
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script><script>document.write(commenter_name);</script>.
さん。コメントしてください。 (<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>)</p>
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<p><label for="url">URL:</label><br />
<input tabindex="1" type="text" name="url" id="url" />
情報を登録する?
<input type="radio" id="remember" name="bakecookie" onclick="rememberMe(this.form)" /><label for="remember">はい</label><input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /><label for="forget">いいえ</label><br style="clear: both;" />
</p>
<p><label for="text">コメント:</label><br />
<textarea tabindex="2" id="text" name="text" rows="10" cols="50"></textarea></p>
<div align="center">
<input type="submit" tabindex="3" name="preview" value=" 確認 " />
<input style="font-weight: bold;" tabindex="4" type="submit" name="post" value=" 投稿 " />
</div>
</form>
</div>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.getElementById('thanks').style.display = 'block';
} else {
document.write('サイン・インしていません。このサイトにコメントをする前に登録してください。 <a href="<$MTRemoteSignInLink static="1"$>"> サイン・イン</a>');
document.getElementById('thanks').style.display = 'none';
}
// -->
</script>
<MTElse> <MTTemplateNote value="Case of registration not required">
<MTIfRegistrationAllowed>
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.write('サイン・インを確認しました、', commenter_name, 'さん。コメントしてください。 (<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>)');
} else {
document.write('TypeKey ID を使って <a href="<$MTRemoteSignInLink static="1"$>"> サイン・イン</a> してください。');
}
// -->
</script>
</MTIfRegistrationAllowed>
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" id="comments_form" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<script type="text/javascript">
writeTypeKeyGreeting(commenter_name, <$MTEntryID$>);
</script>
<MTIfCommentsModerated>
<p class="comments-open-moderated">
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)
</p>
</MTIfCommentsModerated>
<div id="name_email">
<div id="name-email">
<p><label for="author">名前:</label><br />
<input tabindex="1" id="author" name="author" /></p>
<p><label for="email">メールアドレス:</label><br />
<input tabindex="2" id="email" name="email" /></p>
</div>
<MTIfRegistrationAllowed>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.getElementById('name_email').style.display = 'none';
}
// -->
</script>
</MTIfRegistrationAllowed>
<p><label for="url">URL:</label><br />
<input tabindex="3" type="text" name="url" id="url" />
</p><p>
<label for="comment-bake-cookie"><input type="checkbox" id="comment-bake-cookie" name="bakecookie" tabindex="7" accesskey="r" onclick="if (!this.checked) forgetMe(document.comments_form)" value="1" onkeypress="if (!this.checked) forgetMe(document.comments_form)" />情報を保存する?</label>
保存しますか?
<input type="radio" id="remember" onclick="rememberMe(this.form)" name="bakecookie" /><label for="remember">はい</label><input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /><label for="forget">いいえ</label><br style="clear: both;" />
</p>
<p><label for="text">コメント:</label> <MTIfAllowCommentHTML>
(書式を変更するような一部のHTMLタグを使うことができます)</MTIfAllowCommentHTML><br />
<textarea tabindex="4" id="text" name="text" rows="10" cols="50"></textarea></p>
<div align="center">
<input type="submit" name="preview" tabindex="5"
value=" 確認 " />
<input style="font-weight: bold;" type="submit" name="post"
tabindex="6" value=" 投稿 " />
</div>
</form>
</MTElse>
</MTIfRegistrationRequired>
</div><!-- comments-body -->
</MTIfCommentsAllowed>
<script type="text/javascript" language="javascript">
<!--
if (document.comments_form.email != undefined)
document.comments_form.email.value = getCookie("mtcmtmail");
if (document.comments_form.author != undefined)
document.comments_form.author.value = getCookie("mtcmtauth");
if (document.comments_form.url != undefined)
document.comments_form.url.value = getCookie("mtcmthome");
if (getCookie("mtcmtauth") || getCookie("mtcmthome")) {
document.comments_form.bakecookie[0].checked = true;
} else {
document.comments_form.bakecookie[1].checked = true;
}
//-->
</script>
</MTEntryIfCommentsOpen>
</MTIfCommentsActive>
</MTEntryIfAllowComments>
コメント・プレビュー(コメント・エラーは必要箇所を抜粋して変更してください)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" />
<meta name="generator" content="http://www.movabletype.org/" />
<title><$MTBlogName encode_html="1"$>: コメントの確認</title>
<link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" />
<MTInclude module="Remember Me">
<script type="text/javascript" src="<$MTBlogURL$>mt-site.js"></script>
<script type="text/javascript" src="<MTStaticWebPath>js/commenter_name.js"></script>
</head>
<body onload="individualArchivesOnLoad(commenter_name)">
<div id="box">
<!-- タイトル開始 -->
<div id="banner">
<h1><a href="<$MTBlogURL$>" accesskey="1"><$MTBlogName encode_html="1"$></a></h1>
<h2><$MTBlogDescription$></h2>
</div>
<!-- タイトル終了 -->
<!-- コンテンツ開始 -->
<div id="container">
<div class="blog">
<div class="comments-head">コメントの確認</div>
<div class="comments-body">
<$MTCommentPreviewBody$>
<p class="posted">Posted by <$MTCommentPreviewAuthorLink spam_protect="1"$> at <$MTCommentPreviewDate$></p>
<MTIfCommentsAllowed>
<MTCommentFields preview="1" static="1">
</MTIfCommentsAllowed>
</div><!-- comments-body -->
<MTEntryIfCommentsOpen>
<div class="comments-head">コメントしてください</div>
<div class="comments-body">
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" id="comments_form" name="comments_form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
<input type="hidden" name="static" value="1" />
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />
<script type="text/javascript">
writeTypeKeyGreeting(commenter_name, <$MTEntryID$>);
</script>
<MTIfCommentsModerated>
<p class="comments-open-moderated">
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)
</p>
</MTIfCommentsModerated>
<div id="name-email">
<p><label for="comment-author">名前:</label><br />
<input tabindex="1" id="comment-author" name="author" size="30" value="<$MTCommentPreviewAuthor$>" /></p>
<p><label for="comment-email">メールアドレス:</label><br />
<input tabindex="2" id="comment-email" name="email" size="30" value="<$MTCommentPreviewEmail$>" /></p>
</div>
<p><label for="comment-url">URL:</label><br />
<input tabindex="3" id="comment-url" name="url" size="30" value="<$MTCommentPreviewURL$>" />
</p>
<p>
<label for="comment-bake-cookie"><input type="checkbox" id="comment-bake-cookie" name="bakecookie" tabindex="6" accesskey="r" onclick="if (!this.checked) forgetMe(document.comments_form)" value="1" onkeypress="if (!this.checked) forgetMe(document.comments_form)" />情報を保存する?</label>
</p>
<p><label for="comment-text">コメント:</label> <MTIfAllowCommentHTML>
(書式を変更するような一部のHTMLタグを使うことができます)</MTIfAllowCommentHTML><br />
<textarea tabindex="4" id="comment-text" name="text" rows="10" cols="50"><$MTCommentPreviewBody autolink="0" sanitize="0" convert_breaks="0"$></textarea></p>
<div align="center">
<input type="submit" name="preview" tabindex="5"
value=" 確認 " />
<input style="font-weight: bold;" type="submit" name="post"
tabindex="6" value=" 投稿 " />
</div>
</form>
</div><!-- comments-body -->
</MTEntryIfCommentsOpen>
<p></p>
<MTComments>
<MTCommentsHeader><div class="comments-head">以前のコメント</div></MTCommentsHeader>
<div class="comments-body">
<MTComments>
<$MTCommentBody$>
<p class="posted">Posted by <$MTCommentAuthorLink default_name="Anonymous" spam_protect="1"$> at <$MTCommentDate$></p>
</MTComments>
</div><!-- comments-body -->
</MTComments>
</div><!-- blog -->
</div><!-- container -->
<!-- コンテンツ終了 -->
</div><!-- box -->
</body>
</html>
TypeKey のメッセージ表示は、JavaScript の writeTypeKeyGreeting を利用するように変更されています。この関数はインストール直後は空(処理が何もない)の状態ですが、TypeKeyの設定 *1 を行い、再構築を行うと必要な情報が自動的に埋め込まれるようになっています。
2005.10.17 追記
エントリー・アーカイブ/コメント・プレビュー/コメント・エラーの修正を同時に行うことについて追記しました。
2005.10.19追記
コメント・プレビュー/コメント・エラーの修正後イメージが誤ってましたので修正致しました(フォームデータのMTタグ記述もれ)。修正くださった方にはご迷惑おかけして申し訳ございません。
2005.10.20追記
コメント・プレビュー/コメント・エラーをさらに修正しました(input 要素へ p 要素終了タグ追加、div 要素 box 属性の終了タグ追加(既存バグ)、label 要素の for 属性名をそれぞれ修正)。
また修正元のテンプレートは 3.17x以降 のものであったため、本文を若干修正しました。現在 3.151-ja 以前のテンプレート変更箇所は示されておりませんので予めご容赦ください。
2005.10.25追記
エントリーアーカイブ/コメント・プレビュー/コメント・エラーのリストをさらに修正しました(input 要素の cookie 保存のタグを 3.2 のものと入れ替え)。たびたびの修正で申し訳ございません。
*1:「管理メニュー」の[設定] → [コメント/トラックバック] → [認証サービスの設定] → 認証サービスの設定のボタンをクリックして次画面の「return to Movable Type」のリンクをクリックすると、フォームのテキストエリアにトークンが設定されます。これで変更を保存すれば設定完了です。
3.2-ja 再構築時のパフォーマンス(その3)
改善版が出るようですのでお知らせまで。
Berkeley DBの環境下でMovable Type 3.2日本語版をご利用のお客様へのお知らせ
去る9月29日より出荷を開始しました、「Movable Type 3.2日本語版」について、Berkeley DBをご利用のお客様で、以下の現象を確認いたしましたので、ご案内いたします。
本ブログでの関連エントリーも改めて挙げておきます。
先のエントリーでも書いていますが、メモリ増加の不具合については英語版ですでに発生しています。この時点まで顕在化されなかったのは、例えばアーカイブページでメニューリストを表示する・しないという文化の違いがあるのでしょうか。
デフォルトテンプレートのアーカイブページにはそもそもメニューリストがありませんし。
3.2-ja アップグレード方法
3.x-ja から 3.2-ja のアップグレード方法です。1項のバックアップについては一番下に掲載しているベータサイトのリンクが参考になります。また3項の設定ファイルの編集で具体的な設定内容は割愛しておりますので現在使用中の mt.cfg の内容を確認して設定してください。
新規インストールにつきましては、以前書いたMovable Type 3.2 新規インストール方法を参照ください。
1.データのバックアップ
万が一に備えて、これまでのデータのバックアップをとります。エントリーのバックアップは管理メニューの「読み込み/書き出し」をクリックして、次ページの一番下にある「?からエントリーを書き出す」のリンクをクリックします。詳細はMovable Type のバックアップ方法をご覧ください。
2.パッケージのダウンロード
Movable Type 公式サイトのダウンロードのページよりアーカイブをダウンロードします。リンクで進んだ次のページに限定個人ライセンス(無償)があります。なおこれまでのようにアップグレード/フルインストールの区別はありませんので、ZIP形式・tar.gz形式のいずれかを選択します。
3.設定ファイルの編集
パッケージを解凍し、その中にある mt-config.cgi-original を mt-config.cgi にリネーム(またはコピー)して、任意のエディタで開いて編集します。下記は mt-config.cgi で設定が最低限必要な部分を抜粋しています。赤の CGIPath と StaticWebPath は必須項目です。その間に挟まれたデータベースの設定は、MySQL/PostgreSQL/SQLite/BerkeleyDB のいずれかについて、そのまま継続する場合はこれまでに設定されていたものをそのまま転記します。パスワードが必要なデータベースを使用されている場合、mt-db-pass.cgi がなくなりましたので、このファイルに記述していたパスワードを DBPassword に設定します。なお設定を有効にする場合、行頭の # と半角空白は削除してください。
StaticWebPath は3.1xまで任意の項目でしたが3.2より必須となります。mt-static というディレクトリまでをURLで指定します。レンタルサーバの場合、cgi-bin ディレクトリにこのディレクトリをおいても正常に動作しない可能性が高いため、index.html が生成されるURL直下に mt-static ディレクトリを配置すると良いでしょう。
# Movable Type uses the CGIPath setting to construct links back to
# CGI scripts; for example, the MT tag <$MTCGIPath$> is substituted
# with the value of the CGIPath setting. You will need to change this
# value when you first install MT. This should be set to the URL
# used to access mt.cgi but *without* mt.cgi appended to the end.
CGIPath http://www.example.com/cgi-bin/mt/
(MySQL の場合)
### MySQL Configuration - Add the name of your database, username
# password and, optionally database host given to you by your web
# hosting provider.
#
# ObjectDriver DBI::mysql
# Database <database-name>
# DBUser <database-username>
# DBPassword <database-password>
# DBHost localhost
(PostgreSQL の場合)
### PostgreSQL Configuration - Add the name of your database, username,
# password and, optionally database host given to you by your web
# hosting provider.
#
# ObjectDriver DBI::postgres
# Database <database-name>
# DBUser <database-username>
# DBPassword <database-password>
# DBHost localhost
(SQLite の場合)
### SQLite Configuration - SQLite requires only the path to your SQLite
# database file.
#
# ObjectDriver DBI::sqlite
# Database /path/to/sqlite/database/file
(BerkeleyDB の場合)
### BerkeleyDB Configuration - BerekelyDB requires only the path to your
# database directory.
#
# DataSource /path/to/database/directory
:
# If you place all of your MT files in a cgi-bin directory, you
# will need to place the directory containing your static files
# (mt-static) elsewhere, so that the webserver will not try to execute
# them. StaticWebPath is the path to your mt-static directory.
#
# StaticWebPath http://www.example.com/mt-static
4.ファイルのアップロード
解凍したファイルをすべてアップロードします。mt-static/imagesディレクトリ内のファイルはバイナリーモードで、それ以外はASCIIモードでアップロードします(公式サイトの説明より引用)。またCGIスクリプト (拡張子が .cgi のファイル) のパーミッションを755等に設定します。
5.システムのチェック
ブラウザより mt-check.cgi を実行します。「準備が整いました。」というメッセージを表示した場合、無事に作業が終了したことになります(公式サイトの説明より引用)。
6.セットアッププログラムの実行
なお、インストールについては公式サイトにも説明があります。
3.2-ja 再構築時のパフォーマンス(その2)
3.2-ja 再構築時のパフォーマンスで頂いたコメント・トラックバック等の情報より、再構築時に500エラーが発生する原因と対処方法です。
原因は、「BerkeleyDB 使用で recently_commented_on でのメモリ消費が大きい」ということらしいです。具体的な内容につきましては下記に引用させて頂いた通りです。
recently_commented_onはlastnやdaysオプションと一緒に指定することはできませんでしたが(中略)?3.2では指定された範囲のエントリーを対象に最近コメントされたエントリーをリストアップする機能となりました。(中略)これを実現するために追加されたMTへのナイーブなコード追加が甚大な影響を及ぼしています。
(中略)指定された範囲のMT::Entryオブジェクトをすべてメモリ上に読み込んだ後、それら個々のエントリーに付けられた最終コメント時刻の降順にソートし、recently_commented_onオプションで指定した数だけ先頭から取り出すということを行っています。もっと悪いことには、lastnなどで範囲指定することなく使用すると、上記の操作がすべてのエントリーを対象に行われることになります。
ということで、同エントリーにて対処用パッチも提供されております(3日付で最新版が出ています)。それを該当のスクリプトに適用させることでインデックステンプレートの再構築は問題なく実行できることを確認できました。なおパッチは BerkeleyDB で MTEntryNext 等が正常に動作しない問題の対処も含まれています。
パッチの適用方法は、該当の Perl スクリプトを任意のエディタで開き、パッチの行頭左に「+」マークがある行を追加(「+」は除く)し、「-」マークの行を削除します。作業前に予めバックアップをとってください。またパッチのあてかたを間違えると mt.cgi 実行時に 500エラーになりますのでご注意ください(元に戻せば良いので慌てることはありません)。
2005.10.04 追記:勝手ながら下記にパッチの変更箇所を挙げさせて頂きました。赤色を削除して青色を追加します。これはパッチの修正方法が分からない方のための補助的な位置付けです。パッチの内容は適宜変更される可能性がありますので、基本的には原本を参照してください。
正規のパッチ適用方法はAzrael:Tagwire、MT-XSearch、Cygwin導入メモに詳しく書かれています。
lib/MT/Entry.pm
sub comment_latest {
my $entry = shift;
unless ($entry->{__comment_latest}) {
return undef unless $entry->comment_count;
require MT::Comment;
$entry->{__comment_latest} = MT::Comment->load({
my $iter = MT::Comment->load_iter({
entry_id => $entry->id,
visible => 1
}, {
'sort' => 'created_on',
direction => 'descend',
limit => 1,
});
$entry->{__comment_latest} = $iter->();
}
$entry->{__comment_latest};
}
lib/MT/ObjectDriver/DBM.pm
my $idx;
my(%ids, @ids);
my $unlock;
$args->{'sort'} = '' if $args->{'sort'} eq 'id';
if (my $col = $args->{'sort'}) {
my $idx_file = _db_index($driver, $class, $col);
($this_db, $idx, $unlock) =
:
(略)
:
%object_cache = ();
}
use constant MAX_CACHE_SIZE => 1000;
sub load {
my $driver = shift;
$driver->run_callbacks($_[0] . '::pre_load', \@_);
:
(略)
:
unless (wantarray) {
$unlock->();
if ($terms && !(ref $terms)) {
if (exists $object_cache{$class} && (scalar keys %{$object_cache{$class}} > MAX_CACHE_SIZE)) {
# garbage collection
$object_cache{$class} = {};
}
$object_cache{$class}->{$terms} = $obj;
}
return($obj);
アーカイブテンプレートについては再構築時のメモリ問題が引き続き発生しています。3.2-ja 再構築時のメモリ量増加についてではサブカテゴリーが原因と書きましたが、カテゴリーリスト・月別アーカイブリストも影響を及ぼしているようです。
ということで、もう少し真面目に、3.171-ja と 3.2-ja の日別アーカイブおよびエントリーアーカイブの再構築時の最大メモリ量について計測してみました。結果は下表の通りです。
計測は、例えば日別アーカイブの「カレンダー」は、他の(疑いのある)4つのリストはテンプレートに設定せず、中央カラムのエントリーは公開テンプレートと同じ状態で再構築したものです。
実施環境(DB・エントリー・コメント・トラックバック数等)は3.2-ja 再構築時のメモリ量増加についてと同様です。またいずれも 500エラーにならず正常に完了しています。
| 3.171-ja | 3.2-ja | |
| カレンダー | 約23MB | 約31MB |
| エントリーリスト | 約23MB | 約30MB |
| カテゴリーリスト | 約23MB | 約180MB |
| サブカテゴリーリスト | 約23MB | 約330MB |
| 月別アーカイブリスト | 約23MB | 約130MB |
| 3.171-ja | 3.2-ja | |
| カレンダー | 約22MB | 約24MB |
| エントリーリスト | 約22MB | 約28MB |
| コメントリスト | 約23MB | 約64MB |
| トラックバックリスト | 約23MB | 約26MB |
| カテゴリーリスト | 約23MB | 約70MB |
| サブカテゴリーリスト | 約23MB | 約116MB |
| 月別アーカイブリスト | 約23MB | 約56MB |
3.171-ja が22MB?23MB で安定しているのに対し、3.2-ja ではカテゴリーリスト・サブカテゴリーリスト・月別アーカイブリストのメモリ量が増加しています(赤色)。その3つのリストについて、日別アーカイブがエントリーアーカイブの倍近い値になっているのは、再構築数(エントリーアーカイブ:40/日別アーカイブ:80)の違いでしょうか。
青色の個別エントリーアーカイブのコメントリストはやや高めの値ですが、パッチによって劇的に改善されたものです(パッチ適用前は数百MB上昇して500エラー)。
3.2-ja 再構築時のパフォーマンス
再構築時のパフォーマンスについて、昨日に引き続き記します。新規インストールおよびアップグレートの参考にして頂ければ幸いです。
まず、3.2-ja 再構築時のメモリ量増加についてで、他の方から頂いたコメントや、関連すると思われる他サイトの記事および状況をまとめてみました。
- eizo slash blog:Movable Type 3.2日本語版
- 再構築でCPU100%(500MB以上のメモリを使用)
- やむやむ:MovableType3.2-jaにアップグレード
- カテゴリリスト再構築で500エラー発生
- SWEET WATER Web Server:MT3.2 の CPU 使用率
- すべての再構築でCPU使用率ほぼ100%
- + 馬グナカルタ +:骨折り損のくたびれもうけ?
- インデックステンプレートの再構築で500エラー発生
- V.J.Catkick:Movable Type 3.2 日本語版
- MTEntriesタグの中にrecently_commented_onオプションを付けるとリビルド出来なくなり500エラーを返す
次にインデックステンプレートの再構築時におけるCPU使用率およびメモリ使用量を調べました(前回はアーカイブテンプレート)。
| 3.171-ja | 3.2-ja | |
| CPU使用率(最大) | 約88% | 約90% |
| メモリ使用量(最大) | 約14,700KB | 約142,000KB |
最大CPU使用率はどちらも近い値ですが、3.171-ja が再構築直後の瞬間的な値であるのに比べ、3.2の場合は再構築全体で高い値を示しています。また 3.2-ja のメモリ使用量は 3.171-ja の10倍になっています。
英語版3.2まで遡って再構築の確認をしたところ、同じ事象が発生しています。
まとめると、3.2では新規インストール・アップグレードにかかわらず、インデックステンプレート/アーカイブテンプレートに「最近のコメント(recently_commented_onオプションあり)」「サブカテゴリーリスト」等のメニューを設置している場合、500エラーが発生する可能性があります。
3.2-ja 再構築時のメモリ量増加について
別のサイトでの3.2インストールおよび公開テンプレート確認中に、アーカイブテンプレートの再構築でメモリ量が爆発的に増加するという現象が発生しています。
追記:このエントリーは 3.2-ja を元に測定したものです。3.2-ja-2 での対処方法については Movable Type で再構築エラーになる場合の原因と対処をご覧ください。
原因の切り分けを行ってみたところ、日付アーカイブではサブカテゴリーリスト、エントリーアーカイブではさらに「最近のコメント」リストを削除することで正常?に再構築できるようになりました。が、メモリ量の増加率は 3.171 に比較するとそれでもかなり大きいように感じられます。エントリーアーカイブの再構築では最高1.4GB位まで上昇しました(キャプチャすらできず)。
デフォルトのアーカイブテンプレートには、そのようなメニューリストはそもそも設定されていないのですが、試しに日付アーカイブにサブカテゴリーリストを設定して再構築したところ、同じ事象になりました。またこれらのリストをインデックステンプレートとしてモジュール化した場合は問題なく再構築できました。
ということで、アーカイブテンプレートを再構築すると500エラーが発生する可能性があります(Windows以外の環境では不明)。インデックステンプレートでもメモリ量は急増しますが1ページで終了するため、顕在化しないようです。
以上です。なお当方の動作環境は、WindowsXP Perl 5.6.1 BerkeleyDB。使用したエントリー107、コメント154、トラックバック21、カテゴリーは15(すべてトップレベル)です。
以前のMTタグはほぼそのまま使えるという認識でおりますが、誤り等ございましたらお許しください。
2006.05.05 追記
対処方法へのリンクを追記しました。



スタイルシート切り替えをプルダウンメニューで行う方法です。画像のようにプルダウンメニューに表示されたスタイルを選択すると、選択した時点でスタイルが切り替わります。
