« | Home | »

2005.02.19

Movabletypeの軽量化

Blogもエントリー数が増えて、かつ個別アーカイブのページなどにもメインページと表示を合わせるためにサイドパネルを付けていると、Rebuild作業が長くなりイライラする。
このためにMTPagenateというツールを使ってアーカイブの分割を行ったり、最近のコメントの内容をphpファイルでモジュール化して外部に追い出すなどの記事がネット上で多く見られる。
私のところも既にphpが動く環境になっていたので、試みたが従来のhtmlファイルへのアクセスをRedirectしてphpファイルにアクセスを行わせるため.htaccessファイルを作ったり、アーカイブファイルの名前を変えたり手間が掛かる。
その割にはドラスティックな効果とは言えないと思われ、正規に行うべきか否か悩んでいたが、fenrirさんがJavaScriptを使ってサイドパネルの内容を共通化するという記事を見つけ、やってみることにした。
最初はfenrirさんの記事のとおりに最近のコメントを追い出したが、 <MTComments lastn=”10″ sort_order=”descend”>
で、lastnの数を増やすとエラーになり、さんざん悩み、ついにfenrirさんに質問までしたが、最後にエントリータイトルに”(ダブルクォート)が含まれているものが見つかり、文字を変更して綺麗に動作するようになった。

方法を記すと、
テンプレートの一覧の表示画面で、「新しいテンプレートを作る」をクリックし、開いた画面で「テンプレートの名前」に「共通サイドバー」といれ出力ファイル名をsidebar.jsとして、下記の内容を入れて保存する。
fenrirさんと違い、使い慣れたオーソドックスとするため以下のようなものとした。

function getRecentComment(){
var html = "<h2>最近のコメント</h2><ul>";
<MTEntries recently_commented_on="100">
html += "<li><a href='<$MTEntryPermalink$>'><$MTEntryTitle$>
</a><br>";
<MTComments lastn="10">
html += "<$MTCommentAuthor$>
[<$MTCommentDate format="%m/%d %X"$>]<br />";
</MTComments>
html += "</li>";
</MTEntries>
html += "</ul>";
return html;
}

そして、保存に続いてこのファイルを再構築すると、sidebar.jsが吐き出される。
その後、各ページ(メインページ、カテゴリー・アーカイブ、個別エントリーアーカイブ、日付アーカイブ)の<head>の直前に以下を挿入する。

<script language="javascript" type="text/javascript"
src="<$MTBlogURL$>sidebar.js"></script>

さらに、最近のコメントを表示する部分を以下で置き換える。

<script language="javascript" type="text/javascript">
<!--
document.write(getRecentComment());
//-->
</script>

そして、サイトの再構築して、最近のコメントが現れるのを確認して完了。
あまりに、うまくいったのでサイドパネルで「外部リンク」を除き全て追い出した。
「外部リンク」だけ残したのは、リンクの付け方を やっと覚えた初心者を混乱させないためである。
私の作った共通サイドバーの右側部分を示すと以下のとおりである。

function getCounter(){
var html = "<div class="counter"><center>";
html += "<img
src="/cgi-bin/Count.cgi?df=tejima.dat&srgb=00ff00&prgb=ceb684">";
html += "</center></div>";
return html;
}
function getCalendar(){
var html = "<div id="calendar">";
html += "<table><caption><$MTDate
format='%B %Y'$></caption>";
html += "<tr>";
html += "<th abbr='日曜日'>日</th>";
html += "<th abbr='月曜日'>月</th>";
html += "<th abbr='火曜日'>火</th>";
html += "<th abbr='水曜日'>水</th>";
html += "<th abbr='木曜日'>木</th>";
html += "<th abbr='金曜日'>金</th>";
html += "<th abbr='土曜日'>土</th>";
html += "</tr><tr>";
<MTCalendar>
<MTCalendarWeekHeader>
html += "<tr>";
</MTCalendarWeekHeader>
html += "<td>";
<MTCalendarIfEntries>
<MTEntries lastn="1">
html += "<a href='<$MTEntryPermalink$>'><$MTCalendarDay$>
</a>";
</MTEntries>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries>
html += "<$MTCalendarDay$>";
</MTCalendarIfNoEntries>
<MTCalendarIfBlank>
html += " ";
</MTCalendarIfBlank>
</MTCalendar>
html += "</td></tr></table></div>";
return html;
}
function getTrackBack(){
var html = "<h2>最近のトラックバック</h2>";
html += "<ul>";
<MTPings lastn="10">
html += "<li><a href='<$MTPingURL$>'><$MTPingTitle$></a>";
html += "<br> from <$MTPingBlogName$></li>";
</MTPings>
html += "</ul>";
return html;
}
function getRecentComment(){
var html = "<h2>最近のコメント</h2><ul>";
<MTEntries recently_commented_on="100">
html += "<li><a href='<$MTEntryPermalink$>'><$MTEntryTitle$>
</a><br>";
<MTComments lastn="10">
html += "<$MTCommentAuthor$>[<$MTCommentDate
format="%m/%d %X"$>]<br />";
</MTComments>
html += "</li>";
</MTEntries>
html += "</ul>";
return html;
}

これで、表示部分は以下のように、すっきりしたものとなる。

<script language="javascript" type="text/javascript">
<!--
document.write(getCounter());
document.write(getCalendar());
document.write(getTrackBack());
document.write(getRecentComment());
//-->
</script>

左側のサイドパネルの要素も追加して、ブログ全体の再構築を行ったら、実行時間が大幅に短縮され、感動的であった。
さいごに、下記に私のところの共通サイドバーの全体を載せておく:Download file

コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)