パルコで
チャレンジ! Movable TypeをCMSとして使ってみよう!(第8回 ブログ記事リストテンプレートを使って,カテゴリ別絵本一覧ページを作る・第9回 パンくずナビゲーション部分を作る・第10回 ブログ記事リストテンプレートを完成させる)
またまた遅くなりましたが、フリーランスWebデザイナー・黒野明子さんの gihyo.jp で Movable Type の連載第8回~第10回が公開されています。
チャレンジ! Movable TypeをCMSとして使ってみよう!- 第8回 ブログ記事リストテンプレートを使って,カテゴリ別絵本一覧ページを作る
第8回の「ブログ記事リストテンプレートを使って,カテゴリ別絵本一覧ページを作る」は、ブログ記事リストテンプレートの中で、Ifタグを使ったカテゴリ名の判定で「最新情報カテゴリ」ページと「それ以外の」ページの再構築処理を振り分ける方法が紹介されています。
チャレンジ! Movable TypeをCMSとして使ってみよう!- 第9回 パンくずナビゲーション部分を作る
第9回の「パンくずナビゲーション部分を作る」は、制御系タグと(主に)カテゴリ系タグを使ったパンくずリストの生成方法が詳しく解説されています。
チャレンジ! Movable TypeをCMSとして使ってみよう!- 第10回 ブログ記事リストテンプレートを完成させる
第10回の「ブログ記事リストテンプレートを完成させる」は、第8回で作成したカテゴリの条件分岐部分のサブテンプレートの作成と、カテゴリ一覧のリストの作成方法が紹介されています。
だんだん記事の丸め方が多くなってすいません。最後まで頑張って追いかけます。
PowerPoint でスライドごとにマスタを切り替える方法
PowerPoint でスライドごとにマスタ(スライドマスタ)を切り替える方法です。
今まで、PowerPoint でプレゼン資料を作成するとき、「すべてのスライドには一種類のスライドマスタしか適用できない」と思っていましたが、今さらながら、スライドごとにマスタを選択する方法を知りました。
スライドごとにマスタが切り替えられると一体何が便利かというと、作成した PowerPoint 資料に、マスタの異なる別の PowerPoint 資料を添付するときに重宝します。
ということで、ここではPowerPoint 2003での設定方法を紹介します。
なお、PowerPoint 2000では、スライド毎のデザインテンプレート(スライドマスタ)は変更できないみたいです。
1.設定方法(その1)
これが一番簡単な方法です。
まず、自分で作成したPowerPoint 資料(①)を用意します。

次に他のPowerPoint 資料(②)を用意します。

②から必要なスライドを選択してコピーし(ここではすべて)、①のPowerPoint 資料の左ペインにペーストします。この段階では、ペーストした②(スライド3・スライド4)のマスタは①のマスタになっています。

ペーストしたスライドの下にある四角をクリックして、「元の書式をそのまま使う」を選択します。

これで、①の資料にコピーした②のスライドに、②のマスタが適用されます。

2.設定方法(その2)
もうひとつの方法は、スライドマスタ自体をコピーして利用する方法です。「その1」の3つめの画像までは同じ手順です。
そのあと、②のマスタを①のマスタに追加します。マスタは、メニューバーの「表示」→「マスタ」→「スライドマスタ」で、マスタが表示されるので、②のマスタを、左ペインですべて(ここでは2枚)を選択しコピーします。

①についても、メニューバーの「表示」→「マスタ」→「スライドマスタ」でマスタを表示し、さきほどコピーした②のマスタを、①のマスタの左ペインにペーストします。

小さく表示されているウィンドウ(ここには掲載していません)の「マスタを閉じる」をクリックして、マスタ表示を終了して元の状態にし、マスタを変更したいスライド、ここでは②の2枚のスライドを左ペインで選択状態にします。

①のウィンドウをアクティブにして、メニューバーの「書式」→「スライドのデザイン」を選択し、右側にマスタが表示されるので、適用したいマスタを右クリックするか、カーソルをあてると右側にバーが表示されるので、その部分をクリックします。
画像をクリックすると、すべてのスライドに同じマスタが適用されるので注意してください。

「選択したスライドに適用」を選択します。

これで、①の資料にコピーした②のスライドに、②のマスタが適用されます。

ちなみに、「その1」の方法も、②のマスタは裏で①にコピーされています。
3.参考サイト
下記です。ありがとうございました。
Movable Type 4 のコミュニティ機能(その2:サインアップユーザーの権限自動付与とロールのカスタマイズ)
コミュニティブログ・コミュニティ掲示板では、新規ユーザーはブログ画面上からサインアップすることができます。
そしてサインアップしたユーザーは、管理画面ではなく、ブログのページ上からブログ記事の投稿やトピックの作成が行なえます。
その前段として、新規ユーザーがサインアップしたときに、自動的に必要な権限を与える設定を行なっておけば、管理者は登録ユーザーの権限を手動jで毎回与える必要はなくなります。
上記の権限の自動付与のために必要な設定を紹介します。なお、Movable Type のインストール時にメールの設定が行なわれていることが前提です(メールは環境変数を利用すれば後で設定することも可能ですがここでは割愛します)。
1.システムのメールアドレスを設定する
まず、前提として、システム管理画面の「設定」→「全般」でシステムのメールアドレスを設定します。この設定を行なわないと、ユーザー登録時に、登録ユーザーが入力したメールアドレスに確認用のメールが送信されないようです。

2.サインアップユーザーに権限を自動付与する
システム管理画面の「一覧」→「ユーザー」→「権限」、またはブログ管理画面の「システムメニュー」→「ユーザー」→「権限」で権限設定画面に進み、「ユーザーに権限を付与」をクリック。

「(新規ユーザー)」を選択して「次へ」をクリック。

ここでは「ライター」を選択して、「確認」をクリック。

登録後の権限画面はこのように表示されます。

サインアップしたユーザーがサインインすればブログ記事投稿画面が表示されます。

3.ロールのカスタマイズ
ただし、「ライター」の権限には「ブログ記事の公開」という権限がありません。つまりブログ記事を投稿しても、管理者の承認がなければブログ記事は公開されません。投稿後は「投稿を受付ました」となります。

ブログ記事一覧画面上は承認待ちになります。自分で公開状態を変更することはできません。

下の画面は、公開権限のないユーザーでサインインしたときのブログ記事編集画面です。

ちなみにこれは、公開権限のあるユーザーでサインインしたときのブログ記事編集画面です。

コミュニティユーザーの権限は「ブログ記事の作成」「ブログ記事の公開」「コメント投稿」のようですが、この3つを同時に与え、なおかつ他の権限を与えないというロールは、デフォルトでは用意されていないようです。
ということで、「コミュニティ」という新しいロールを作り、そのロールで権限の自動付与を行なうようにカスタマイズします。
システム管理画面の「一覧」→「ユーザー」→「ロール」で「新しいロールを作成」をクリック。

ロール名に「コミュニティ」、権限の一覧にある「ブログ記事の作成」「ブログ記事の公開」「コメントの送信」をチェックして、「変更を保存」をクリック。

これで「コミュニティ」というロールができたので、「新規ユーザーに権限を自動付与する設定をする」の作業をやり直し、作成作業の中で、「コミュニティ」を選択します。

権限画面はこうなります。

新規ユーザーでサインアップして、サインイン後、ブログ記事を投稿すると「投稿を公開しました」と表示されます。

ブログ記事が自動的に公開されました。

ちなみにこの権限であればブログ記事の編集もできます。「すべてのブログ記事の編集」という権限を与えてしまうと、ブログ管理画面にログインしたときに、他のユーザーのブログ記事も編集できてしまうので気をつけましょう。
本文と追記を切り替える Web2.0(折りたたみの先頭位置にジャンプ)
「本文と追記を切り替える Web2.0」のカスタマイズで、切り替えたときに折りたたみの先頭位置にジャンプする方法を紹介します。
このカスタマイズは記事が長い場合(記事本文や追記がブラウザの縦幅に収まらない場合)に有効です。
折りたたみの機能概要については「本文と追記を切り替える Web2.0」をご覧ください。
1.サンプル
次のサンプルにある最初の記事の「続きを読む ≫」をクリックしてみてください。追記を表示すると、追記の先頭に移動し、「続きを隠す ≫」をクリックすると、「続きを読む ≫」の辺りに移動します。
2.script.aculo.us のインストール
script.aculo.us のページの「get it already!」の下にある「Downloads page」のリンクをクリック。

次のページで「current version」の下にある「scriptaculous-js-1.7.0.zip(または拡張子が tar.gz / tar.bz2)」のリンクをクリック。バージョン 1.7.0 は2007年3月現在です。

ダウンロードアーカイブを解凍して内容をサーバのメインページと同じディレクトリにアップロード。ここでは下記のような配置になっていることを前提に話を進めます。
/scriptaculous
/lib
prototype.js
/src
controls.js
effects.js
scriptaculous.js
scriptaculous というディレクトリは解凍後のディレクトリ名を変更しています。lib と src はアーカイブのままの構成です。src 配下にはここで利用しないファイルも含まれていますので、まとめてアップロードしておくといいでしょう。
3.テンプレートの修正1(HTMLヘッダ修正)
折りたたみをしたいテンプレートの編集画面を開き、</head> の直前に下記を追加します。
<script type="text/javascript" src="<$MTBlogURL$>scriptaculous/lib/prototype.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>scriptaculous/src/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="<$MTBlogURL$>scriptaculous/src/effects.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>scriptaculous/src/controls.js"></script>
<script type="text/javascript">
Effect.DefaultOptions = {
transition: Effect.Transitions.sinoidal,
duration: 0.5, // seconds
fps: 60.0, // max. 60fps due to Effect.Queue implementation
sync: false, // true for combining
from: 0.0,
to: 1.0,
delay: 0.0,
queue: 'parallel'
}
function ajaxShowHide(entryID, url) {
element = $('Text' + entryID);
if(element.style.display == 'none') {
options = {
afterFinish: function(effect) {
$('Link' + entryID).firstChild.innerHTML = '≪ 続きを隠す';
Element.show(effect.element);
location.href = url + '#Link' + entryID;
}
};
Effect.BlindDown(element, options);
} else {
options = {
afterFinish: function(effect) {
$('Link' + entryID).firstChild.innerHTML = '続きを読む ≫';
Element.hide(effect.element);
location.href = url + '#Link' + entryID;
}
};
Effect.BlindUp(element, options);
}
element = $('Body' + entryID);
if(element.style.display == 'none') {
options = {
afterFinish: function(effect) {
Element.show(effect.element);
}
};
Effect.BlindDown(element, options);
} else {
options = {
afterFinish: function(effect) {
Element.hide(effect.element);
}
};
Effect.BlindUp(element, options);
}
}
</script>
6行目以降は script 開始・終了タグを外して外部ファイルにしても構いません(その場合インクルードするための script タグは effct.js をインクルードしている script 要素の下に記述してください)。
折りたたみ速度を変更する場合は、
duration: 0.5, // seconds
の数値を変更します。0.5 はスライドアップ・スライドダウンに 0.5 秒かかることを意味します。
この Effect.DefaultOptions = { ... } の部分は scriptaculous ライブラリの設定の上書きですので、速度を変更しない場合はここから削除しても構いません。ちなみにデフォルトは1秒に設定されています。
4.テンプレートの修正2(追記文章表示用 MT タグ修正)
追記部分を修正します。デフォルトテンプレートと公開テンプレートの変更例を示します。
変更前(デフォルトテンプレート)
<MTIfNonEmpty tag="EntryMore" convert_breaks="0">
<p class="entry-more-link">
<a href="<$MTEntryPermalink$>#more">続きを読む "<$MTEntryTitle$>" »</a>
</p>
</MTIfNonEmpty>
変更前(公開テンプレート)
<MTEntryIfExtended>
<div class="entry-more">
<a href="<$MTEntryPermalink$>#more">続きを読む "<$MTEntryTitle$>"</a>
</div>
</MTEntryIfExtended>
変更後(デフォルトテンプレート/公開テンプレート共通)
<div id="Body<$MTEntryID$>"><$MTEntryBody$></div>
<MTIfNonEmpty tag="EntryMore" convert_breaks="0">
<div id="Link<$MTEntryID$>" class="ajax-entry-more-link"><a href="<$MTEntryPermalink$>" name="<$MTEntryID pad="1"$>" onclick="ajaxShowHide('<$MTEntryID$>', '<$MTEntryLink$>');return false;">続きを読む ≫</a></div>
<div id="Text<$MTEntryID$>" style="display: none">
<$MTEntryMore$>
</div>
</MTIfNonEmpty>
ブログ記事アーカイブは下記の内容を利用してください。JavaScript が OFF でも追記部分が読めるよう、noscript タグで追記を表示するようにしています。
変更後・ブログ記事アーカイブ(デフォルトテンプレート/公開テンプレート共通)
<div id="Body<$MTEntryID$>"><$MTEntryBody$></div>
<MTIfNonEmpty tag="EntryMore" convert_breaks="0">
<div id="Link<$MTEntryID$>" class="ajax-entry-more-link"><a href="<$MTEntryPermalink$>" name="<$MTEntryID pad="1"$>" onclick="ajaxShowHide('<$MTEntryID$>', '<$MTEntryLink$>');return false;">続きを読む ≫</a></div>
<div id="Text<$MTEntryID$>" style="display: none">
<$MTEntryMore$>
</div>
<noscript>
<div id="more" class="entry-more"><$MTEntryMore$></div>
</noscript>
</MTIfNonEmpty>
上記のスクリプトは貼り付けた後、編集しても構いませんが、div 開始タグと a 開始タグの間に改行を含まないようにしてください(Firefox で正常に動作しなくなります)。
5.CSS
「続きを読む」「続きを隠す」のリンクに class 属性 ajax-entry-more-link を与えています。必要に応じて設定してください。
.ajax-entry-more-link {
/* 任意のプロパティを設定 */
}
6.その他
HTML ページの1行目に XML 宣言がある場合、IE6 では動作がややスムーズではありません(開く瞬間と閉じた瞬間にビクッとなります)。サンプルの公開テンプレートは XML 宣言を外しています。
dTree カテゴリーリストにブログ記事数を表示する
Category:[JavaScript, カテゴリー, 新着表示]
Tag:[Customize, dTree, MovableType]
Permalink
Movable Type に表示する dTree カテゴリーリストに、ブログ記事数を表示するカスタマイズです。このカスタマイズを行なえば、dTree のカテゴリーリストにブログ記事が公開されているカテゴリーにブログ記事数を表示します。

ご要望を頂きましたので、本エントリーにて紹介致します。なお、このカスタマイズは「dTree サブカテゴリーリスト + 新着表示 for Movable Type」のカスタマイズを元にしています。
以下、サブテンプレートのみ示します。
「dTree サブカテゴリーリスト + 新着表示 for Movable Type」のひとつめのリストは、次の内容に変更してください。
<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<mt:setVar name="cat_number" value="1" />
<mt:setVar name="level" value="1" />
<mt:topLevelCategories>
<mt:setVar name="cat_number" op="++" />
<mt:setVar name="tree[$level]" value="$cat_number" />
<mt:if name="level" eq="1">
d.add(<mt:getVar name="cat_number" op="--" />, 0,'<mt:categoryLabel escape="html" /><mt:if tag="CategoryCount"> [<$mt:CategoryCount$>]</mt:if> <span class="new"><mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries></span>','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>');
<mt:else>
d.add(<mt:getVar name="cat_number" op="--" />, <mt:setVar name="tmp" value="$level" /><mt:setVar name="tmp" op="--" /><mt:getVar name="tree[$tmp]" op="--" />,'<mt:categoryLabel escape="html" /><mt:if tag="CategoryCount"> [<$mt:CategoryCount$>]</mt:if> <span class="new"><mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries></span>','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>');
</mt:if>
<mt:setVar name="level" op="++" />
<mt:subCatsRecurse />
<mt:setVar name="level" op="--" />
</mt:topLevelCategories>
document.write(d);
</script>
</div>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
<!--
// passage time
var pass = 24;
// display content
var content = 'New!!';
var currentDate = new Date();
var spans = document.getElementsByTagName('span');
for (i = 0; i < spans.length; i++) {
if (spans[i].getAttribute('class') == 'new' ||
spans[i].getAttribute('className') == 'new') {
if (spans[i].childNodes[0]) {
time = spans[i].childNodes[0].nodeValue.split(":");
var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
var now = (entryDate.getTime() - currentDate.getTime())/(60*60*1000);
now = Math.ceil(now);
if(-now <= pass){
spans[i].innerHTML = content;
spans[i].style.display = 'inline';
}
}
}
}
//-->
</script>
「dTree サブカテゴリーリスト + 新着表示 for Movable Type」のふたつめのリストは、次の内容に変更してください。
<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<mt:setVar name="cat_number" value="1" />
<mt:setVar name="level" value="1" />
<mt:topLevelCategories>
<mt:setVar name="cat_number" op="++" />
<mt:setVar name="tree[$level]" value="$cat_number" />
<mt:if name="level" eq="1">
d.add(<mt:getVar name="cat_number" op="--" />, 0,'<mt:categoryLabel escape="html" /><mt:if tag="CategoryCount"> [<$mt:CategoryCount$>]</mt:if>','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>','<mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries>');
<mt:else>
d.add(<mt:getVar name="cat_number" op="--" />, <mt:setVar name="tmp" value="$level" /><mt:setVar name="tmp" op="--" /><mt:getVar name="tree[$tmp]" op="--" />,'<mt:categoryLabel escape="html" /><mt:if tag="CategoryCount"> [<$mt:CategoryCount$>]</mt:if> ','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>','<mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries>');
</mt:if>
<mt:setVar name="level" op="++" />
<mt:subCatsRecurse />
<mt:setVar name="level" op="--" />
</mt:topLevelCategories>
document.write(d);
</script>
</div>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
<!--
// passage time
var pass = 24;
// display content
var content = 'New!!';
var currentDate = new Date();
var spans = document.getElementsByTagName('span');
for (i = 0; i < spans.length; i++) {
if (spans[i].getAttribute('class') == 'new' ||
spans[i].getAttribute('className') == 'new') {
if (spans[i].childNodes[0]) {
time = spans[i].childNodes[0].nodeValue.split(":");
var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
var now = (entryDate.getTime() - currentDate.getTime())/(60*60*1000);
now = Math.ceil(now);
if(-now <= pass){
spans[i].innerHTML = content;
spans[i].style.display = 'inline';
}
}
}
}
//-->
</script>
PowerEdit プラグイン v0.05
公開中の「PowerEdit プラグイン」をバージョンアップしました。
1.改善内容
無効化していたタグのテキストフィールドに入力できるようになります。
変更前

変更後

2.ダウンロード
最新版のプラグインは下記のページよりダウンロードしてください。今回入れ替えるのは、4項の「alt-tmpl.zip」と、5項の「PowerEdit.zip」の両方です。
4.1 で利用する場合は CMSContext プラグインのインストールも忘れないでください(インストールおよび設定手順は上記の記事に掲載しています)。
ニューモデルが
Movable Type 4 のコミュニティ機能(その1:プロフィール画面)
Movable Type 4 のコミュニティ機能について、少しずつ紹介していきます。
1.動作を確認するときの注意事項
コミュニティ機能は、プロフィールページなど、ログイン状態をチェックして表示を変更するようになっています。
インストールしたコミュニティの動作確認や実験を行うときは、異なるブラウザを2つ以上開き、
- ひとつは管理画面を操作するために使用する
- 他はコミュニティ機能を確認する(例えばプロフィールページなどの参照)ために使用する
としてください。
同じ種類のブラウザを2枚開いたり、異なるタブで開いても、同一のクッキーを参照するので、期待する動作にならない可能性があります。
2.プロフィールページの動作
まず、プロフィールのページから調べていきます。
2.1 サインインしている状態の自分のプロフィールページ
自分のプロフィールページには、ユーザー名とプロフィール画像と「ユーザー情報の編集」というリンクを表示します。

プロフィール画像は、これまではシステム管理画面からのアップロードが必要でしたが、「ユーザー情報の編集」をクリックした次の画面の「プロフィール画像」からアップロードできます。

アップロード直後の画面です。

プロフィールのページにも反映されます。

サイドバーの「注目」「被注目」は、「お気に入り」への追加、あるいは mixi の「マイミク」のようなものです。他のユーザーを注目している場合、あるいは注目されている場合に、そのユーザーがこの欄に表示されます(表示方法は後述)。初期状態は誰も注目、被注目していないので、このように表示されます。

2.2 サインインしている状態の他のユーザーのプロフィールページ
プロフィールページには、「注目する」というリンクが表示されます。このリンクをクリックすると、先ほどのサイドバーの「注目」に注目したユーザーが表示されます。

「注目」をクリックすると、Ajax によって即座に表示が変わります。

自分のプロフィールページのサイドバーもこのように表示が変わります。

2.3 サインインしていない状態のすべてのユーザーのプロフィールページ
プロフィールのページにはユーザー名と画像のみが表示されます。

3 注意事項
コミュニティのテンプレートセット(コミュニティブログ・コミュニティ掲示板)で新たにブログを作成した場合、新たに作成したブログにも他のユーザーのプロフィールが表示されるようです。
タグ検索を絞り込む(その2:カスタマイズ)
「タグ検索を絞り込む(その1)」の続きで、Movable Type 4 でのカスタマイズ方法です。
1.タグの絞り込み検索の仕組み
タグ検索は CGI(mt-search.cgi)を実行します。実行したURLのクエリー文字列の「tag=」の部分に、検索するタグ名を与えることでタグ検索が行なわれます。
例えば、タグ「Movable Type」による初回のタグ検索は次のようなURLを実行します。
http://user-domain/mt/mt-search.cgi?blog_id=1&tag=MovableType&limit=20&IncludeBlogs=1
このクエリー文字列「tag=」の右辺に、「 AND (ANDの前後に半角スペース)」を与えれば、複数のタグによる検索が可能になります。
例えば、タグ「Movable Type」と「Customize」で検索を行なうには、次のURLを実行します。
http://user-domain/mt/mt-search.cgi?blog_id=1&tag=MovableType%20AND%20Customize&limit=20&IncludeBlogs=1
「 AND 」はいくらでも連結できます。検索文字列と「AND」の間の「%20」は、半角スペースをURLエンコードしたものです。
つまり、前回のタグ検索文字列と今回のタグ検索文字列を「 AND 」で連結するサブテンプレートを作れば、この絞り込み検索の仕組みが実現できる訳です。
2.カスタマイズ
このカスタマイズでは Split プラグインを事前にインストールしてください。
その後、2.1~2.3に該当するいずれかの設定を行なってください。該当しない場合は、それらしき部分に追加してください。
なお、デザインはすべて確認できておりませんので、不具合がありましたらご連絡ください。
2.1 4.2 以降の「既定のブログ」の場合
次のサブテンプレート(青色)を、テンプレートモジュールの「ブログ記事の概要」に追加してください。
<mt:If name="entry_archive">
<mt:EntryIfTagged>
<div class="entry-tags">
<h4>タグ<span class="delimiter">:</span></h4>
<ul>
<li><mt:EntryTags glue='<span class="delimiter">,</span></li> <li>'><a href="javascript:void(0)" onclick="location.href='<$mt:TagSearchLink encode_js="1"$>';return false;" rel="tag"><$mt:TagName$></a></mt:EntryTags></li>
</ul>
<mt:searchString setvar="tag_name" />
<mt:if name="tag_name" like=" AND ">
<mt:getVar name="tag_name" split=" AND " setvar="tag_list">
<mt:else>
<mt:setVarBlock name="tag_list[0]"><mt:getVar name="tag_name"></mt:setVarBlock>
</mt:if>
<mt:setVar name="tag_data" value="" />
<mt:entryTags>
<mt:setVar name="tag_flag" value="0" />
<mt:loop name="tag_list">
<mt:if tag="TagName" eq="$__value__">
<mt:setVar name="tag_flag" value="1" />
</mt:if>
</mt:loop>
<mt:unless name="tag_flag">
<mt:setVarBlock name="tag_data" append="1"><a href="<mt:searchScript />?blog_id=<mt:blogID />&tag=<mt:searchString>%20AND%20<mt:tagName />&limit=20&IncludeBlogs=<mt:blogID />" rel="tag" title="<mt:searchString />と<mt:tagName />のタグ一覧へ"><mt:tagName /></a>,</mt:setVarBlock>
</mt:unless>
</mt:entryTags>
<h4>絞り込みタグ<span class="delimiter">:</span></h4>
<ul>
<li><mt:getVar name="tag_data" regex_replace="/(.*),$/","$1" /></li>
</ul>
</div>
</mt:EntryIfTagged>
</mt:If>
2.2 4.0 ~ 4.1 の場合
次のサブテンプレート(青色)を、テンプレートモジュールの「タグ」に追加してください。
<MTEntryIfTagged>
<div class="entry-tags">
<h4 class="entry-tags-header">タグ<span class="delimiter">:</span></h4>
<ul class="entry-tags-list">
<li class="entry-tag"><MTEntryTags glue='<span class="delimiter">,</span></li> <li class="entry-tag">'><a href="<$MTTagSearchLink$>&IncludeBlogs=<$MTBlogID$>" rel="tag"><$MTTagName$></a></MTEntryTags></li>
</ul>
<mt:searchString setvar="tag_name" />
<mt:if name="tag_name" like=" AND ">
<mt:getVar name="tag_name" split=" AND " setvar="tag_list">
<mt:else>
<mt:setVarBlock name="tag_list[0]"><mt:getVar name="tag_name"></mt:setVarBlock>
</mt:if>
<mt:setVar name="tag_data" value="" />
<mt:entryTags>
<mt:setVar name="tag_flag" value="0" />
<mt:loop name="tag_list">
<mt:if tag="TagName" eq="$__value__">
<mt:setVar name="tag_flag" value="1" />
</mt:if>
</mt:loop>
<mt:unless name="tag_flag">
<mt:setVarBlock name="tag_data" append="1"><a href="<mt:searchScript />?blog_id=<mt:blogID />&tag=<mt:searchString>%20AND%20<mt:tagName />&limit=20&IncludeBlogs=<mt:blogID />" rel="tag" title="<mt:searchString />と<mt:tagName />のタグ一覧へ"><mt:tagName /></a>,</mt:setVarBlock>
</mt:unless>
</mt:entryTags>
<h4 class="entry-tags-header">絞り込みタグ:<span class="delimiter">:</span></h4>
<ul class="entry-tags-list">
<li class="entry-tag"><mt:getVar name="tag_data" regex_replace="/(.*),$/","$1" /></li>
</ul>
</div>
</MTEntryIfTagged>
2.3 小粋空間テンプレートの場合
次のサブテンプレート(青色)を、テンプレートモジュールの「タグ」に追加してください。
<mt:entryIfTagged>
<div class="entry-tags">
<h3 class="entry-tags-header">タグ:</h3>
<ul class="entry-tags-list">
<mt:entryTags>
<li class="entry-tag"><a href="<mt:tagSearchLink />&IncludeBlogs=<mt:blogID />" rel="tag"><mt:tagName /></a></li>
</mt:entryTags>
</ul>
<mt:searchString setvar="tag_name" />
<mt:if name="tag_name" like=" AND ">
<mt:getVar name="tag_name" split=" AND " setvar="tag_list">
<mt:else>
<mt:setVarBlock name="tag_list[0]"><mt:getVar name="tag_name"></mt:setVarBlock>
</mt:if>
<mt:setVar name="tag_data" value="" />
<mt:entryTags>
<mt:setVar name="tag_flag" value="0" />
<mt:loop name="tag_list">
<mt:if tag="TagName" eq="$__value__">
<mt:setVar name="tag_flag" value="1" />
</mt:if>
</mt:loop>
<mt:unless name="tag_flag">
<mt:setVarBlock name="tag_data" append="1"><a href="<mt:searchScript />?blog_id=<mt:blogID />&tag=<mt:searchString>%20AND%20<mt:tagName />&limit=20&IncludeBlogs=<mt:blogID />" rel="tag" title="<mt:searchString />と<mt:tagName />のタグ一覧へ"><mt:tagName /></a>,</mt:setVarBlock>
</mt:unless>
</mt:entryTags>
<h3 class="entry-tags-header">絞り込みタグ:<span class="delimiter">:</span></h3>
<ul class="entry-tags-list">
<li class="entry-tag"><mt:getVar name="tag_data" regex_replace="/(.*),$/","$1" /></li>
</ul>
</div>
</mt:entryIfTagged>
3.サブテンプレート解説
2項のサブテンプレートの機能は、検索結果に表示されているブログ記事のタグから、現在の検索結果ページの検索タグを除外して表示します。そして、CGI(mt-search.cgi)のURLに、今回までの検索タグを「tag=」のクエリーに与えます。
このサブテンプレートを、いくつかのブロックに分けて解説します。
3.1 検索タグを分割して配列変数に設定
<mt:searchString setvar="tag_name" />
<mt:if name="tag_name" like=" AND ">
<mt:getVar name="tag_name" split=" AND " setvar="tag_list">
<mt:else>
<mt:setVarBlock name="tag_list[0]"><mt:getVar name="tag_name"></mt:setVarBlock>
</mt:if>
最初の MTSearchString タグで、今回表示されているタグ検索結果を変数 tag_name に保存します。変数 tag_name に「 AND 」が含まれていたら、split モディファイアを利用して、配列変数tag_listに、これまでのすべての検索タグを保存します。「 AND 」が含まれていない場合は、後続の処理で MTLoop タグを利用できるように、配列変数 tag_list の先頭に入れなおします。
3.2 ブログ記事に含まれるタグ一覧から、配列変数に設定されたタグを除外
<mt:setVar name="tag_data" value="" />
<mt:entryTags>
<mt:setVar name="tag_flag" value="0" />
<mt:loop name="tag_list">
<mt:if tag="TagName" eq="$__value__">
<mt:setVar name="tag_flag" value="1" />
</mt:if>
</mt:loop>
<mt:unless name="tag_flag">
...中略...
</mt:unless>
</mt:entryTags>
変数 tag_data を初期化し、MTEntryTag タグで、タグ検索でヒットしたブログ記事に含まれる、タグの一覧を処理します。変数 tag_flag は、これまでに使われた検索タグを出力から除外するためのフラグです。
フラグを設定する処理は、MTLoop タグを使って配列変数 tag_list をサーチすることで実現しており、これまでに使われた検索タグをみつけたら、変数 flag に 1 を設定します。
変数 tag_flag に 1 が設定されたら、次の MTUnless タグブロック内は実行せず、まだ検索タグとして登場していないタグだけを MTUnless タグブロック内で出力します。
3.3 ブログ記事に含まれるタグ一覧を変数に設定
<mt:unless name="tag_flag">
<mt:setVarBlock name="tag_data" append="1"><a href="<mt:searchScript />?blog_id=<mt:blogID />&tag=<mt:searchString>%20AND%20<mt:tagName />&limit=20&IncludeBlogs=<mt:blogID />" rel="tag" title="<mt:searchString />と<mt:tagName />のタグ一覧へ"><mt:tagName /></a>,</mt:setVarBlock>
</mt:unless>
MTUnless タグ内部では、タグ検索用のリンクを出力します。href 属性の値に、前回までの検索タグを MTSearchString タグ、そして今回の検索タグを MTTagNameタグ で与え、その間を「%20AND%20」で区切ります。リンクは直接出力せず、MTSetVarBlock タグを使って、変数 tag_data に一旦保存します。理由はあとで説明します。
3.4 ブログ記事に含まれるタグ一覧を出力
絞り込みタグ:<mt:getVar name="tag_data" regex_replace="/(.*),$/","$1" />
すべての処理が終わったら、変数 tag_data を出力します。
出力するタグの区切り文字をカンマ「,」にしているのですが、一番最後の「,」を、MTUnless タグブロック内の処理で出力しない制御がかなり面倒(=出力するタグが繰り返しの最後であることを判定するのが面倒)だったので、出力結果を一旦変数に保持し、変数を出力するときに regex_replace モディファイアで最後の1文字、つまりカンマを除去しています。
今回のタグ検索で使ったタグは、次のタグ検索結果ページの MTSearchString タグで取得できるので、再帰的な検索が行なえます。
タグ検索を絞り込む(その1)
タグ検索を絞り込む方法を紹介します。
1.「タグの絞込み」という考えについて
「タグ」という新しい分類方法が登場して以来、
「タグによる検索を絞り込むことができれば、ものすごく便利では?」
という考えをずっと持っていました。
主旨は大体お分かりと思いますが、タグを絞り込む例を図に示します。ブログに、「tag-A」「tag-B」「tag-C」という3つのタグをつけたエントリーが複数あると仮定します。
最初に「tag-A」というタグ名で検索すると、左上の円に属するエントリーが検索でヒットします。

「tag-A」をつけたエントリーの中には、「tag-B」がついているものもあります。両方のタグをつけたエントリーを検索できる方法があれば、下図のように検索範囲を絞り込むことができます。

同様に、「tag-A」「tag-B」をつけたエントリーの中に、「tag-C」をつけたものもあり、最終的に、3つのタグをつけたエントリーを検索できる方法があれば、さらに絞り込むことができます。

単に、「tag-A」「tag-B」「tag-C」という3つのタグを別々に検索を行なっても、3つの円が交わった部分を見つけるのは困難ですが、タグの絞込み検索を行なうことができれば、サイトを訪れたユーザーが目的のページに素早くアクセスできる可能性が高くなります。
もう少し具体例を挙げると、次のようなタグがついているエントリーがある、うちのようなサイトで、閲覧ユーザーが
「Movable Type で、プラグインを使ったカスタマイズの記事を読みたい(緑色の部分)」
というケースの場合、大変有効である考えます。

2.実際のタグの絞込み検索
そういうわけで、当ブログでは、タグ検索の絞込みができるリンクを公開しています。エントリーのタグをクリックした次の検索結果のページに、絞込み候補のタグがあれば「Tagを絞り込む」という欄に表示します。

試しに、エントリータイトルの右下にある任意のタグをクリックしてください。ここではリストをツリー表示するライブラリ「dTree」のタグをクリックしたと仮定します。

検索結果には「dTree」関連の記事が9件ヒットします。

この検索結果には、WordPress の記事と Movalbe TYpe の記事が混在しています。そこで、Movalbe TYpe の記事の「Tagを絞り込む」にある「Movable Type」をクリックします。

検索結果に「「dTree AND MovableType」の検索結果」が表示され、絞り込み検索が行なわれたことが分かります。これで「dTree」かつ「Movable Type」の記事を4件に絞り込むことができました。

「エントリーに適切なタグをつけてください」というツッコミはなしで(笑)。
Movable Type 4 でのカスタマイズ方法については別途解説します。
Split プラグイン
Movable Type 4 でPerl の split 機能を提供するグローバルモディファイアを作りました。
1.Split プラグインのダウンロード
下記の Split.zip をクリックして、プラグインアーカイブをダウンロード。
2.Split プラグインのアップロード・インストール
プラグインアーカイブを展開し、中にある Split フォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロード。
システム管理画面のプラグイン一覧で、「Split ~」が表示されればインストール完了です。

3.使用例
split モディファイアの値に区切り文字を設定すれば、区切り文字で split した配列変数を返却します。
次のサブテンプレートを例に示します。これは変数 foo に設定した、「a AND b AND c」という値を「 AND 」で区切り、「a」「b」「c」を配列変数 bar に設定します。
<mt:setvar name="foo" value="a AND b AND c" />
<mt:getVar name="foo" split=" AND " setvar="bar">
<mt:loop name="bar">
<mt:getVar name="__value__" /><br />
</mt:loop>
このサブテンプレートの出力結果は、
a
b
c
となります。
以上です。あまりエレガントな動作ではありませんので、予めご了承ください。
このグローバルモディファイアを利用した具体的な使用例は別途エントリーします。
「最近のコメント」をネイティブタグのみで適正に表示する
Movable Type 4 で「最近のコメント」を、ネイティブタグだけを使ってブログ記事別に並び替えるカスタマイズです。

1.概要
これまで、「最近のコメント」をブログ記事別に正しく(=古いコメントを含まずに)表示するには、MTCollate などのプラグインの利用が必要でしたが、Movable Type 4 では、ネイティブタグのみで同様の機能が実現できるようになりました。
実現方法は色々あると思いますが、ここではハッシュ変数と配列変数を組み合わせて利用する方法を紹介します。
なお、ここで紹介するサブテンプレートは、「Movable Type 4.2 パーフェクトガイド」の 6.13 に掲載しているものとほぼ同じものです。
![]() | Movable Type 4.2 パーフェクトガイド 荒木 勇次郎 毎日コミュニケーションズ 2008-07-31 売り上げランキング : 60270 Amazonで詳しく見る by G-Tools |
2.「最近のコメント」用サブテンプレート
当サイトの配布テンプレートのデザインにあわせた「最近のコメント」用サブテンプレートは次の通りです。
下記のサブテンプレートをウィジェットまたは、テンプレートモジュールなどに貼り付けて再構築すれば「最近のコメント」が表示できます。
<mt:comments sort_order="descend" lastn="10">
<mt:commentEntry>
<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:commentEntry>
<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: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>
1行目の「10」を変更すれば、表示するコメント数を変更できます。また、dt 要素・dd 要素やclass 属性値を変更すれば他のテンプレートのデザインにあわせることができます。
3.サブテンプレートの解説
下の図は、冒頭の「最近のコメント」に対応させた、処理で用いている各変数の対応を示しています。以下の解説と照らし合わせて、理解の補助にしてください(画像をクリックすればドラッグすることができます。もう一度クリックすると元の位置に戻ります)。
サブテンプレートでは、まず、Commentsタグと CommentEntry タグを組み合わせて、ブログ記事タイトルとパーマリンクを変数 entry_titleに、コメント情報(コメント投稿者、コメント投稿日、コメントへのフラグメントつきのパーマリンク)を変数 entry_comment に保持します。
<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>
この2つの変数の値を、ハッシュ変数 comment_list に設定します。ハッシュのキーには変数 entry_title、ハッシュの値には変数 entry_comment を設定します。
値を設定するときには prepend モディファイアを利用し、2回目以降のハッシュ変数への設定で、同じキー(=ブログ記事タイトル)の値は上書きせず、先に設定した値の先頭に追加していきます。この繰り返しで、ハッシュのキーにブログ記事タイトルの一覧、ハッシュの値に、ブログ記事に属するコメントの一覧ができあがります(図のカッコ内は設定順序を示しています)。
<mt:setVar name="comment_list{$entry_title}" value="$entry_comment" prepend="1" />
ただし、このハッシュは、ブログ記事タイトルの表示順序を保持していないので、配列変数 title_list に対し、ブログ記事タイトルを出現順に設定していきます。
また、一度出現したブログ記事タイトルは重複して書きこまないよう、MTLoop タグで、配列変数を読み出し、同じブログ記事タイトルがある場合は変数 flag に1を設定します。変数 flag の値が0のときだけ、配列変数 title_list に設定します。
<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>
最後に MTLoop タグで配列変数 title_list を読み出し、特殊変数 __value__ で、ブログ記事タイトルを出力し、ハッシュ変数 comment_list のキーに、特殊変数 __value__ を用いて、コメントの一覧を出力します。
<mt:loop name="title_list">
<li>
<mt:getVar name="__value__" />
<ul>
<mt:getVar name="comment_list{$__value__}" />
</ul>
</li>
</mt:loop>
4.コメントを降順に出力する
コメントの順序を昇順から降順に入れ替えるには prepend モディファイアを append モディファイアにします。
<mt:setVar name="comment_list{$entry_title}" value="$comment" prepend="1" />
<mt:setVar name="comment_list{$entry_title}" value="$comment" append="1" />
5.ブログ記事タイトルをを昇順に出力する
ブログ記事の表示順序を降順から昇順に入れ替えるには、push 関数を unshift 関数にします。
<mt:setVar name="push(title_list)" value="$entry_title" />
<mt:setVar name="unshift(title_list)" value="$entry_title" />
上記の方法は、ブログ内に同じブログ記事タイトルがないことが前提です。もし、同じブログ記事タイトルが存在するならば、ブログ記事IDを組み合わせると良いでしょう。
2010.09.28
MT5で正常に動作するよう、MTCommentsタグに「sort_order="descend"」を追加しました。
最強のボードゲーム「カタン」
ボードゲーム「カタン」の紹介です。「カタン」はボードゲーム大国であるドイツで1995年に誕生した、開拓をテーマにしたボードゲームで、国際的な人気を誇っています。
といっても、私自身、このゲームの存在すら知らなかったのですが、昨日、兄夫婦の家に遊びに行ったときに姪と一緒に遊び、結構夢中になって遊んでしまいました。
兄いわく、「おもちゃ屋に売ってないので Amazon で購入した」らしいです。現在までの Amazon の評価もすべて満点で、人気の高さを示しています。
| スタンダードカタン | |
![]() | おすすめ平均 ![]() 評判通りの傑作ゲームです! 暇つぶしでは済まないゲーム ボードゲームブームの火付け役 ボードゲームはじめました。 2人でもできるAmazonで詳しく見る by G-Tools |
以前は東京のゲーム輸入販売店メビウス社が「カタンの開拓者たち」という名称で輸入販売していたようで、2002年よりカプコン社より「カタン」という名前でデザインを一新して発売されました。
カタンは発売当時の1995年あたりで、多くの賞を受賞しています。
- 1995年 ドイツ年間ゲーム大賞(Spiel des Jahres)大賞
- 1995年 ドイツゲーム大賞(Deutscher Spiele Preis)1位
- オリジンズ賞 (Origins Award) 外国語翻訳ボードゲーム部門
以下、ゲームの基本的な部分だけを箇条書きで説明します。
- 3~4人用
- 1ゲーム30分から60分
- 最初に六角形の資源(木、土、羊、麦、鉄、砂漠が各数枚)を適当に並べて未開拓の島を作る
- 各土地には2から12(7を除く)の数字を対応づける
- 各土地の継ぎ目には「道」「家(1点)」「街(2点)」を建てることができる(各プレイヤーが自分の持ち駒として配置する)
- 開始前に各プレイヤーは資源の交点に一対の「道」「家」を配置できる
- プレイヤーは2つのサイコロを振り、出た目に対応する土地に隣接している家(または街)があれば、その資源の札をもらえる(他のプレイヤーも)
- 札を組み合わせれば「道」「家」「街」と交換でき、それらを開拓地に配置することで点数を増やし、さらに資源をゲットできるチャンスも増える
- 先に10点になれば勝ち
- その他、「盗賊」「バースト」「チャンスカード」などがある
遊んだ感想は、自分がサイコロを振る番でなくても、資源がもらえたり、札をとられたりと、暇にならない楽しさや、得た札(資源)を「道」や「家」やチャンスカードなどに交換して、開拓していく戦略のバリエーションの多さが面白く感じました。
ということで、是非一度遊んでみてください。
Wireless Notebook Optical Mouse 3000
正月に帰省したときにマウスを持って帰るのを忘れ、帰省先で急遽購入したワイヤレスマウスです。
![]() | Microsoft Wireless Notebook Optical Mouse 3000 マイカブラック 62Z-00008 マイクロソフト 2006-04-14 売り上げランキング : 3596 Amazonで詳しく見る by G-Tools |
ワイヤレスマウスは、電池の分重くなるのがあまり好きではないので使わないのですが、持った感触が結構気に入ったので衝動買い。Amazon だと2300円です。後継機種(下)も 2600円程度です。
![]() | Microsoft Wireless Notebook Optical Mouse 4000 ブラック B2P-00008 マイクロソフト 2005-11-18 売り上げランキング : 10715 Amazonで詳しく見る by G-Tools |
握る部分がラバーコートなので、電池の分の重さが加わっても、滑らずに持ち上げることができます。また、レシーバー部はマウス裏側に収納できるようになっており、収納するとマウスの電源も切れるように設計されています。持ち運びに便利です。
Microsoft が好きな訳ではないのですが、私が普段使っているのは「Microsoft Compact Optical Mouse」で、3つくらい持ってます。
![]() | Microsoft Compact Optical Mouse Black マイクロソフト 2004-01-23 売り上げランキング : 28634 Amazonで詳しく見る by G-Tools |
dTree サブカテゴリーリスト + 新着表示 for Movable Type
Category:[JavaScript, カテゴリー, 新着表示]
Tag:[Customize, dTree, MovableType]
Permalink
「dTree」というエクスプローラー風のツリー表示スクリプトを利用した、Movable Type のサブカテゴリーリストのツリー化カスタマイズを、下記のエントリーで以前紹介しました。
今回は、ご要望を頂き、dTree サブカテゴリーリストに新着表示を組み合わせてみました。このカスタマイズを行なえば、次のように新着ブログ記事のあるカテゴリーに対し「New!」マークを表示します。

なお、このカスタマイズでは、dTree の処理上、新着マークにアンカーがついてしまいます。

そこで、JavaScript を改変して、新着マークにアンカーを表示しない方法も併せて紹介します。

なお、以下のカスタマイズを行なう前に「dTree によるサブカテゴリーリスト for Movable Type」の4項までの作業を事前に行なってください。
また、新着表示についての詳細は「新着エントリーのあるカテゴリーに New マークをつける」を参照してください(リンク先のカスタマイズを行なう必要はありません)。
1.新着マークにアンカーをついたままにする
サブカテゴリーリストに次の内容を適用してください。これで再構築すれば新着マークが表示されます。デフォルトの設定では24時間以内の投稿に新着マークを表示します。
<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<mt:setVar name="cat_number" value="1" />
<mt:setVar name="level" value="1" />
<mt:topLevelCategories>
<mt:setVar name="cat_number" op="++" />
<mt:setVar name="tree[$level]" value="$cat_number" />
<mt:if name="level" eq="1">
d.add(<mt:getVar name="cat_number" op="--" />, 0,'<mt:categoryLabel escape="html" /> <span class="new"><mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries></span>','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>');
<mt:else>
d.add(<mt:getVar name="cat_number" op="--" />, <mt:setVar name="tmp" value="$level" /><mt:setVar name="tmp" op="--" /><mt:getVar name="tree[$tmp]" op="--" />,'<mt:categoryLabel escape="html" /> <span class="new"><mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries></span>','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>');
</mt:if>
<mt:setVar name="level" op="++" />
<mt:subCatsRecurse />
<mt:setVar name="level" op="--" />
</mt:topLevelCategories>
document.write(d);
</script>
</div>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
<!--
// passage time
var pass = 24;
// display content
var content = 'New!!';
var currentDate = new Date();
var spans = document.getElementsByTagName('span');
for (i = 0; i < spans.length; i++) {
if (spans[i].getAttribute('class') == 'new' ||
spans[i].getAttribute('className') == 'new') {
if (spans[i].childNodes[0]) {
time = spans[i].childNodes[0].nodeValue.split(":");
var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
var now = (entryDate.getTime() - currentDate.getTime())/(60*60*1000);
now = Math.ceil(now);
if(-now <= pass){
spans[i].innerHTML = content;
spans[i].style.display = 'inline';
}
}
}
}
//-->
</script>
2.新着マークにアンカーをつけずに表示する
まず、dtree.js に下記のパッチをあてます。「パッチが分からない」とか、うまくいかない場合はこの先を読んでください。
--- dtree.js.bak Tue Jan 06 00:00:25 2009
+++ dtree.js Tue Jan 06 00:00:40 2009
@@ -22,7 +22,7 @@
// Node object
-function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
+function Node(id, pid, name, url, mark, title, target, icon, iconOpen, open) {
this.id = id;
@@ -32,6 +32,8 @@
this.url = url;
+ this.mark = mark;
+
this.title = title;
this.target = target;
@@ -134,9 +136,9 @@
// Adds a new node to the node array
-dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) {
+dTree.prototype.add = function(id, pid, name, url, mark, title, target, icon, iconOpen, open) {
- this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
+ this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, mark, title, target, icon, iconOpen, open);
};
@@ -285,6 +287,8 @@
str += node.name;
if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
+
+ if (node.mark) str += '<span class="new">' + node.mark + '</span>';
str += '</div>';
直接 dtree.js をエディタ上で編集する場合は、下記の青色部分を追加してください。
...前略...
// Node object
function Node(id, pid, name, url, mark, title, target, icon, iconOpen, open) {
this.id = id;
this.pid = pid;
this.name = name;
this.url = url;
this.mark = mark;
this.title = title;
...中略...
// Adds a new node to the node array
dTree.prototype.add = function(id, pid, name, url, mark, title, target, icon, iconOpen, open) {
this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, mark, title, target, icon, iconOpen, open);
};
...中略...
// Creates the node icon, url and text
dTree.prototype.node = function(node, nodeId) {
...中略...
str += node.name;
if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
if (node.mark) str += '<span class="new">' + node.mark + '</span>';
str += '</div>';
if (node._hc) {
...中略...
そして、サブカテゴリーリストに次の内容を適用してください。これで再構築すれば新着マークが表示されます。デフォルトの設定では24時間以内の投稿に新着マークを表示します。
<script type="text/javascript">
d = new dTree('d');
d.config.useCookies=false;
d.add(0, -1,'Categories','javascript: void(0);');
<mt:setVar name="cat_number" value="1" />
<mt:setVar name="level" value="1" />
<mt:topLevelCategories>
<mt:setVar name="cat_number" op="++" />
<mt:setVar name="tree[$level]" value="$cat_number" />
<mt:if name="level" eq="1">
d.add(<mt:getVar name="cat_number" op="--" />, 0,'<mt:categoryLabel escape="html" />','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>','<mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries>');
<mt:else>
d.add(<mt:getVar name="cat_number" op="--" />, <mt:setVar name="tmp" value="$level" /><mt:setVar name="tmp" op="--" /><mt:getVar name="tree[$tmp]" op="--" />,'<mt:categoryLabel escape="html" />','<mt:if tag="CategoryCount"><mt:categoryArchiveLink /><mt:else>javascript: void(0);</mt:if>','<mt:entries lastn="1"><mt:entryDate format="%Y:%m:%d:%H:%M:%S" /></mt:entries>');
</mt:if>
<mt:setVar name="level" op="++" />
<mt:subCatsRecurse />
<mt:setVar name="level" op="--" />
</mt:topLevelCategories>
document.write(d);
</script>
</div>
<p style="text-align:center"><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
<!--
// passage time
var pass = 24;
// display content
var content = 'New!!';
var currentDate = new Date();
var spans = document.getElementsByTagName('span');
for (i = 0; i < spans.length; i++) {
if (spans[i].getAttribute('class') == 'new' ||
spans[i].getAttribute('className') == 'new') {
if (spans[i].childNodes[0]) {
time = spans[i].childNodes[0].nodeValue.split(":");
var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
var now = (entryDate.getTime() - currentDate.getTime())/(60*60*1000);
now = Math.ceil(now);
if(-now <= pass){
spans[i].innerHTML = content;
spans[i].style.display = 'inline';
}
}
}
}
//-->
</script>
Movable Type で他のブログのテンプレートモジュール・ウィジェットを利用する
Category:[テンプレートタグ]
Tag:[MovableType, MTInclude, MTMultiBlogLocalBlog]
Permalink
Movable Type で複数ブログを作成した場合、他のブログのテンプレートモジュールやウィジェットを利用する方法です。

ここではブログBのテンプレートモジュール「hoge」を、ブログAで利用する方法を例に解説します。
1.ブログAの設定
ブログAの任意のテンプレートで、ブログBのテンプレートモジュール「hoge」を呼び出すために、MTInclude タグを記述し、blog_id モディファイアでブログBのブログIDを指定します。
...前略...
<mt:Include module="hoge" blog_id="ブログBのブログID" />
...後略...
または、MTInclude タグを MTMultiBlog タグで括り、include_blogsモディファイア(または blog_ids モディファイア)でブログBのブログIDを指定します。この場合は表示する内容によって、2項の設定が必要になります。
...前略...
<mt:MultiBlog include_blogs="ブログBのブログID">
<mt:Include module="hoge" />
</mt:MultiBlog>
...後略...
いずれの方法でも、ブログBのテンプレートモジュール「hoge」が、ブログAから呼び出せます。
2.ブログBの設定
1項で MTMultiBlog タグを使った場合、ブログBのテンプレートモジュール「hoge」を、MTMultiBlogLocalBlog タグで括ると、テンプレートモジュール「hoge」に記述されているテンプレートタグに対し、ブログAの情報が反映されます。MTMultiBlogLocalBlog タグで括らない場合は、ブログBの情報が反映されます。
<mt:MultiBlogLocalBlog>
もともとの「hoge」の内容
</mt:MultiBlogLocalBlog>
MTInclude タグに blog_id モディファイアでブログBを指定した場合は、この設定は不要です。
3.MultiBlogLocalBlog タグについて
MTMultiBlogLocalBlog タグの解説は、公式ドキュメントでは、それぞれ次のようになっています。
テンプレートタグリファレンス - MTMultiBlogLocalBlog
MTMultiBlog ブロックタグで定義している中で、一時的にローカルブログ (MTMultiBlog ブロックタグを利用して他のブログの内容を表示させたいブログ) の内容を表示したい場合に利用します。
つまり、この場合、MTInclude タグで呼び出しているブログAの情報を、ブログBのテンプレートモジュールに表示させることができる、というわけです。
ちなみに、テンプレートモジュール「hoge」を、MTMultiBlogLocalBlog タグで括らないと、例えば、テンプレートモジュール「hoge」の中に MTBlogName タグがある場合、再構築したときに MTBlogName タグは、「ブログB」と表示されます。
つまり、他のブログのテンプレートモジュールをインクルードしたときに、インクルード先のテンプレートを、
- 自ブログの情報を出力したい:MTMultiBlogLocalBlog タグで括る
- 他のブログの情報を出力したい:MTMultiBlogLocalBlog タグで括らない
という使い分けもできます。
4.その他
MTMultiBlogLocalBlog タグで括ったテンプレートモジュールやウィジェットは、自ブログではそのまま使えるようです。
次の記述では再構築NGになります。
...前略...
<mt:MultiBlog include_blogs="ブログBのブログID">
<mt:MultiBlogLocalBlog>
<mt:Include module="hoge" />
</mt:MultiBlogLocalBlog>
</mt:MultiBlog>
...後略...
MTInclude タグに identifier モディファイアを指定すれば、インデックステンプレートも呼び出せるかもしれません。
5.参考サイト
参考サイトは下記です。ありがとうございました。
Movable Type 4 の再構築で「Can't call method "id" on unblessed reference」が発生する問題について
Category:[トラブルシューティング]
Tag:[MovableType, MTEntriesWithSubCategories, MTTopLevelCategories, TroubleShooting]
Permalink
Movable Type 4 の月別カテゴリーアーカイブの再構築時に、次のようなエラーが発生する場合があります。

これは、「『新着エントリーの New マークを親カテゴリーに表示する』で再構築エラーになります」というご質問を頂いたのが発端です。
以下、本エントリーにて解消方法を展開します。なおこの問題は、バージョン 4.23 で確認しています。
1.問題
切り分けを行なったところ、月別カテゴリーアーカイブが再構築エラーになるのは、MTTopLevelCategories タグと MTEntriesWithSubCategories タグを次のように組み合わせた場合のようです。
<MTTopLevelCategories>
<MTEntriesWithSubCategories>
</MTEntriesWithSubCategories>
</MTTopLevelCategories>
MTSubCatsRecurse タグの有無は関係ありません。
2.解決策
とりあえず、MTEntriesWithSubCategories タグの振る舞いに問題がありそうなので、MTEntriesWithSubCategories タグの代わりに、MTEntries タグを使い、さらに category モディファイアとinclude_subcategories モディファイアを組み合わせます。
「新着エントリーの New マークを親カテゴリーに表示する」のサブテンプレートを例に、修正内容を示します。
変更前
<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <span class="new"><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span><MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <span class="new"><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span>
<MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
変更後
<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <span class="new"><MTCategoryLabel setvar="cat"><MTEntries category="$cat" include_subcategories="1" lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntries></span><MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <span class="new"><MTCategoryLabel setvar="cat"><MTEntries category="$cat" include_subcategories="1" lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntries></span>
<MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
ピンポイントで抜き出すと以下のようになります。
変更前
<MTEntriesWithSubCategories lastn="1">
<$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$>
</MTEntriesWithSubCategories>
変更後
<MTCategoryLabel setvar="cat">
<MTEntries category="$cat" include_subcategories="1" lastn="1">
<$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$>
</MTEntries>
変更後のサブテンプレートですが、まず、MTCategoryLabel タグに setvar モディファイアを与えて、変数 cat に処理中のカテゴリー名を設定します。
その後、MTEntries タグの category モディファイアに変数 cat を与えることで、処理中のカテゴリだけを対象にします。
さらに include_subcategories モディファイアに 1 を与えることで、category モディファイアで指定したカテゴリー配下のサブカテゴリーも処理対象にします。
Windows Vista Service Pack 1 にアップグレード
遅ればせながら、手持ちのノートPCを Windows Vista から Windows Vista Service Pack 1 にアップグレードしました。
ちなみに持っているノートPCは「ThinkPad X61(厳密には7675A31)」です。
![]() | レノボ・ジャパン ThinkPad X61 7675A82 Lenovo 2008-06-13 売り上げランキング : 57795 Amazonで詳しく見る by G-Tools |
以下、備忘録でアップグレード手順を残しておきます。
まず、アップグレード前に「スタート」→「コンピュータ」を右クリック→「プロパティ」を選択したウィンドウ(「コントロールパネル」→「システム」からの表示も可)は表示内容は次の通りです。
タスクバーの更新プログラムのインストール用のアイコンをクリック。
![]()
「更新プログラムのインストール」をクリック。
「次へ」をクリック。
「ライセンス条項に同意します」をチェックして、「次へ」をクリック。
「インストール」をクリック。
インストールが開始します。
「更新プログラムは正常にインストールされました。」が表示されたら「今すぐ再起動」をクリック。この後、再起動するまでに「Service Pack をインストールしています。ステージ1/3(~3/3)」という表示がされ、これが終わるのに1時間弱かかります。
これで正常にインストールされました。最初の画面に「Service Pack 1」が追加表示されています。
なお、アップグレードによって体感できるような大きな変化はありませんでした。改善点は下記の記事が参考になると思います。
Google マップの埋め込み HTML でふきだしを消す方法(新)
Google マップをブログなどに埋め込むときの HTMLコードに含まれるふきだしを消す方法です。
ふきだしを消して、マーカーを残したい場合は「Google マップの埋め込み HTML でふきだしを消してマーカーを残す方法」を参照してください。
1.問題点
Google マップから検索などで特定の地域を表示させて、HTMLコードを取得して、ブログに埋め込むと、検索したときの情報がふきだしとして含まれてしまいます(下)。

実は、以前「Google マップの埋め込み HTML でふきだしを消す方法」をエントリーしたのですが「その方法ではふきだしが消えませんでした」というコメントを頂きました。
どうやら前回のエントリーからしばらく経ったこともあり、その間に Google マップの UI が変更されたようです。ということで、新しい技を紹介します。
2.解消方法
Google マップで検索結果が表示されます。ここでは「東京駅」で検索した結果を表示しています。

表示結果の中央地点にある赤色のマーカーを右クリックして「ここからのルート」を選択します。

表示結果の中央地点にある赤色のマーカーが緑色になるので、これをさらに右クリックして、「この地点を削除」を選択します。

これで余分なパーツはすべて消えました。この状態で、右上にある「このページのリンク」をクリックします。

HTMLコード(反転部分)を取得します。

取得したHTMLコードをご自身のブログに貼り付ければ、ふきだしは表示されなくなります。

検索で複数のマーカーが表示された場合も、任意のマーカーを右クリックして「ここからのルート」を選択し、緑色になったマーカーを右クリックして「この地点を削除」を選択すれば、同じように消すことができます。

以上です。
余談ですが、埋め込みHTMLのマークアップを object 要素に変更したい方は「Google マップの貼り付け用 HTML を valid にする」スクリプトをご利用ください。
Amazon 2008年12月の注文ランキング
2008 年 12 月の Amazon 注文ランキングです。 手前味噌で恐縮ですが、拙著「Movable Type 4.2 パーフェクトガイド」がまだまだ売れてます。ありがとうございます。
1位:Movable Type 4.2 パーフェクトガイド
![]() | Movable Type 4.2 パーフェクトガイド 荒木 勇次郎 毎日コミュニケーションズ 2008-07-31 売り上げランキング : 1457 Amazonで詳しく見る by G-Tools |
2位:Movable Type 4.x 本格的CMSサイトを構築するためのMTスーパーテクニック クリエイターが身につけておくべき新・100
![]() | Movable Type 4.x 本格的CMSサイトを構築するためのMTスーパーテクニック クリエイターが身につけておくべき新・100の法則。 加藤 善規 インプレスジャパン 2008-09-12 売り上げランキング : 3547 Amazonで詳しく見る by G-Tools |
2位:携帯サイト制作 WEBデザインの新しいルール
![]() | 携帯サイト制作 WEBデザインの新しいルール ファーストビット 翔泳社 2008-10-22 売り上げランキング : 655 Amazonで詳しく見る by G-Tools |
4位:GriffinTechnology iTalk Pro GRI-IP-000063
![]() | GriffinTechnology iTalk Pro GRI-IP-000063 Griffin Technology 2006-11-10 売り上げランキング : 314 Amazonで詳しく見る by G-Tools |
4位:CMSとして使うMovable Typeガイドブック
![]() | CMSとして使うMovable Typeガイドブック 黒野 明子 翔泳社 2008-03-14 売り上げランキング : 6429 Amazonで詳しく見る by G-Tools |
4位:基本からしっかりわかる Movable Type 4.2 カスタマイズブック(Web Designing Books)
![]() | 基本からしっかりわかる Movable Type 4.2 カスタマイズブック(Web Designing Books) 大藤 幹 毎日コミュニケーションズ 2008-09-20 売り上げランキング : 6281 Amazonで詳しく見る by G-Tools |
7位:さあ、才能(じぶん)に目覚めよう―あなたの5つの強みを見出し、活かす
![]() | さあ、才能(じぶん)に目覚めよう―あなたの5つの強みを見出し、活かす 田口 俊樹 日本経済新聞出版社 2001-12-01 売り上げランキング : 12 Amazonで詳しく見る by G-Tools |
7位:実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~
![]() | 実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~ 市瀬 裕哉 技術評論社 2008-11-29 売り上げランキング : 12228 Amazonで詳しく見る by G-Tools |
9位:センチュリー 裸族の村 CRM35-H705
![]() | センチュリー 裸族の村 CRM35-H705 センチュリー 売り上げランキング : 2694 Amazonで詳しく見る by G-Tools |
BlogIDViewer プラグイン
Movable Type 4.x/Movable Type 5.x で、ブログIDを管理画面に表示するプラグインです。
1.「ブログID」について
「ブログID」は、ブログに割り当てられる、システムで一意の値です。インストール時に作成するブログIDは1で、その後、ブログを作成するごとに、2、3、・・・と新しい番号が割り当てられます。ブログIDは MTBlogID タグで表示することができます。
2.プラグイン作成理由
ブログIDは、ブログ管理画面のアドレスバーのURL(blog_id=x)に含まれますが、ブログIDを利用するのは、
- テンプレートタグの blog_ids モディファイア、include_blogs モディファイア、exclude_blogs モディファイアなどで、自ブログ以外のブログを指定する
- MultiBlog プラグインの設定で、ポータルブログに含める(または除外する)ブログを指定する
など、自ブログの管理画面を表示して作業しているときに、「他のブログのブログIDを知りたい」というケースが少なくありません。
管理画面左上のブログ切り替え用のドロップダウンメニューにマウスをポイントすれば、ブラウザのステータスバーにURLが表示されるので、そこから知ることはできますが、もう少し明示的に表示するのもありかと思い、作成しました。
3.BlogIDViewer プラグインの機能
MT4.xでは、ブログ選択用ドロップダウンメニューのブログ名の左側にブログIDを表示します。

また、システムメニューのブログ一覧にブログIDを表示します。

MT5.xでは、次のように、各メニューのウェブサイト名・ブログ名の左側にブログIDを表示します。
ウェブサイト・ブログの表示

ウェブサイト・ブログ選択メニュー

ブログ一覧画面(MT5.0まで。MT5.1よりデフォルト機能でID表示)

ウェブサイト一覧画面(MT5.0まで。MT5.1よりデフォルト機能でID表示)

4.BlogIDViewer プラグインのダウンロード
下記のリンクをクリックして、プラグインアーカイブをダウンロードします。
2009.01.05 初版
2010.06.28 MT5.0対応
2011.08.18 MT5.1対応
- BlogIDViewer.zip(MT4.x用)
- BlogIDViewer_0_11.zip(MT5.0x/MT5.1x用)
プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
5.BlogIDViewer プラグインのアップロード・インストール
プラグインアーカイブを展開し、中にある BlogIDViewer フォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロードします。
システム管理画面のプラグイン一覧で、「BlogIDViewer ~」が表示されればインストール完了です。

これで設定はすべて完了です。3項の通り、ブログIDが表示されていることを確認してください。
6.注意事項
ブログをひとつしか作成していない場合、ブログ選択用ドロップダウンメニューには表示されません。
MTMultiBlog タグブロック内での MTInclude タグの入れ子について
現在、Movable Type の MultiBlog プラグインでポータルブログの実験中ですが、MTInclude タグの入れ子があると再構築でエラーになるようです。
確認したのは 4.23 + Windows ローカル環境のみで、他の環境は確認できていません。
まず、ポータルブログにするブログのメインページに次のようなサブテンプレートがあります。
<mt:Entries>
<$mt:Include module="ブログ記事の概要"$>
</mt:Entries>
サブテンプレートからインクルードしている「ブログ記事の概要」テンプレートモジュールでは、さらに MTInclude タグを使って「ブログ記事のメタデータ」テンプレートモジュールをインクルードしています。メタデータには投稿日時や投稿者、コメント件数やトラックバック件数など、ブログ記事の投稿情報が含まれます。
次に、ポータルブログの収集対象となるブログの作成と、各ブログの MultiBlog プラグインの設定を行ったあと、上記のサブテンプレートを MTMultiBlog タグで括り、
<mt:multiBlog mode="loop">
<mt:Entries>
<$mt:Include module="ブログ記事の概要"$>
</mt:Entries>
</mt:multiBlog>
とすると、メインページの再構築時に次のエラーが発生します。

MTInclude でインクルードしている内容を元テンプレートに貼り付けると、再構築エラーは解消します。
「ブログ記事の概要」テンプレートモジュールでは「カテゴリ」テンプレートモジュール、「タグ」テンプレートモジュールをインクルードしていますが、それらについても同様です。
要約すると、MTMultiBlog タグから1回のインクルードは大丈夫ですが、入れ子のインクルードがあると再構築エラーになるようです。大雑把な説明ですいませんが、当方の設定ミス等がありましたらご指摘ください。
ハワイの人
Google chrome でリンクの下線を消す方法
出遅れましたが、Google chrome でリンクの下線を消す(非表示にする)方法を紹介します。
私はどのブラウザでもリンクの下線を非表示にする設定をしています。Firefox であれば、「ツール」→「オプション」→「コンテンツ」→「配色設定」で開いたウィンドウの「リンクに下線を表示する」のチェックをはずせば、非表示にすることができます(下)。

ところが、Google chrome の標準機能にはリンクの下線を非表示にする機能はないので、下のように、ページのリンクには下線が表示されっぱなしです。個人的には非表示のスタイルになれてしまっているので、サンプルページのようにスカスカならいいのですが、行間が詰まっていると結構見辛いです。
リンクに下線が表示された状態

が、このエントリーのカスタマイズを行うことで、次のようにリンクの下線を消すことができます。カスタマイズでは Greasemetal を利用します。カスタムスタイルシートを利用します。
リンクに下線を非表示にした状態

Greasemetal は、Firefox 定番のアドオン「Greasemonkey」と同等の機能を Google Chrome で使えるようにするものです。Greasemetal 経由でユーザーが作成したスクリプトを読み込み、新しい機能を追加することができます。
以下、設定方法です。キャプチャに XP の画面と Vista の画面が混在していますが気にしないでください。
設定方法
2011.03.03 設定方法が大幅に変わったため、内容を更新しました。
「C:\Documents and Settings\ユーザー名\Local Settings\Application Data\Google\Chrome\User Data\Default\User StyleSheets\Custom.css」を開いて、以下の内容を設定。
a,a:link{
text-decoration: none;
}
a:hover{
text-decoration: underline;
}
Custom.cssを保存すれば再起動せずに設定が反映されます。これで完了です。
※以降の内容は過去のもので、参照する必要はありません。
1.Greasemetal のダウンロード
Greasemetal のページにアクセスして、「GreasemetalInstaller.exe」をクリック。

ファイルを任意のフォルダに保存します。
2.Greasemetal のインストール
保存した「GreasemetalInstaller.exe」をダブルクリックすると、インストールウィザードが開始するので「Next」をクリック。
![]()
「I accept the agreement」を選択して「Next」をクリック。
![]()
インストール先のフォルダを設定して「Next」をクリック。デフォルトは「C:¥Program Files¥Greasemetal」です。
![]()
スタートメニューフォルダ名を設定して「Next」をクリック。デフォルトは「Greasemetal」です。
![]()
デスクトップにアイコンを作成します。チェックボックスがチェックされた状態で「Next」をクリックしてください。Google chrome はこのデスクトップアイコンから起動します。
![]()
「Install」をクリック。これでインストールが開始します。
![]()
インストールはすぐに完了します。そのまま「Finish」をクリック。
![]()
Google chrome が立ち上がりっぱなしだと次のようなメッセージが出ますので、Google chrome を終了させてください(Google Chrome は再起動させないでください)。

デスクトップアイコンにある Greasemetal をダブルクリックすると、Google chrome が起動し、次の画面が表示されます。これで Greasemetal のインストール完了です。Google chrome は起動したままにしておいてください。

3.textdecoration_none.user.js のインストール
下記のページにアクセスして、「textdecoration_none.user.js」のリンクを右クリック。

2項でインストールした Greasemetal のフォルダ(デフォルトのままであれば、C:¥Program Files¥Greasemetal)配下に「userjs」というフォルダがあるので、そこに保存。

これで Google chrome に表示されているページをリロードすれば、リンクが消えると思います。
直接 Google chrome を起動してもリンクは非表示にならないので、Greasemetal 経由で Google chrome を起動してください。
カウンタを更新しました
あけましておめでとうございます。本年もどうぞよろしくお願い致します。
さて、昨年の6月頃に原因不明の0クリア事件で、それまでのアクセス数が消えてしまったサイドバーのカウンタですが、消去前の値とその後の平均アクセス数からおおざっぱに算出をして、元旦から気分も新たに7000000でスタートすることにしました。

これで以前のキリ番企画も復活させます。次回は777万7777アクセスです。
















