今日の覚え書き
昨日に続きまして、本テンプレートご利用サイト「今日の覚え書き」さんのご紹介です。
管理者のお名前はもそさん。昨年10月16日に当サイトへコメントを頂いておりまして、テンプレートのご利用歴は約4.5ヶ月。実際のブログ歴はもっと長いのではないかと思います。
当初からご自身でサイトデザインを次々と変更されて、1pxもゆるがせにしないレイアウトで素晴らしいサイトになっていきました。さらに新しいアイデアを盛り込まれ、現在ではご覧の通り機能的な2カラムへと変貌致しました。CSSも入念に設計されており、カスタマイズ記事も豊富ですので参考になるのではないでしょうか。実際同じデザインを利用されているサイトさんもいらっしゃるようです。
少なくとも公開テンプレートより適用ブラウザ多いかと(爆)。
そのカスタマイズ関連の最近の記事「プルダウン式メニューバーになりました」取り上げさせて頂きます。
折りたたみメニューは一度クリックしないと開きませんが、こちらはメニューのリンクにマウスオンするだけでプルダウン式のメニューが表示されるというもので、サイト上部にあるリンクがその設定になっています。企業サイトではこのような方式のメニューをよく見かけますがブログサイトではあまり目にすることがありません。カスタマイズ方法もしっかり書いてくださってますので、興味のある方はご利用されてみてはいかがでしょうか。
もうひとつ取り上げさせていただいたエントリーは「初松屋」。読ませて頂いて、「以前は女性が牛丼店に入るというのは男性が一人でケーキ専門店に入って食べるよりもありえなかった」というのを思い出しました。当時はまだ男性と女性の生活する境界線がはっきり分かれていた時代だったのでしょうね。今は「松屋」で女性が食べていない店を見つける方が困難になりました。女性の皆さんもきわめて普通に食べられていますし、違和感ありません。
逆に女性の領域へ、看護士さんや保父さんのように男性が女性しかいなかった世界に入り込んだりと、境界線はどんどん消えていくようです。ブログでは性別関係ありませんが運営されているのは感覚的に女性の方が多いような気がします。
ちなみに私は「松屋」ではもっぱらカレーを食べてます(安いので)。
ということで、今後もさらなるデザインの進化を期待しています。
己でサイトジャック
昨日に続きまして、本テンプレートご利用サイト「己でサイトジャック」さんのご紹介です。
かなり印象的なサイト名とダーク系(というか黒)のデザインがなかなかにマッチしています。サイト名の由来は機会があれば一度聞いてみたいと思っていますが、機会があるかどうかは定かではありません(笑)。
管理者のお名前はhideさん。大方の予想を裏切って普通のハンドルネームです。ブログ歴約3ヶ月。1月16日にテンプレートのエントリーへご利用のコメントを頂いておりますので、現在のデザインに変わってから約1ヶ月余りといったところでしょうか。実はもっと長いお付き合いのような気がしていたのですが、以外に短くて今更ながら驚いています。
真鍋かをりさんと同学年だそうです。
私が音楽に携わっていることもあり、気になるエントリーはなんといっても「ギターのおっさん」でしょうか。途中、残像が激しく何をやっているのか分からない部分があるほどの超絶技巧のギターソロです。何という奏法なのか、個人的に興味津々です。
クラシックギター界でも近年、様々な奏法が登場しており、ライトハンドやエレクトリックベースのスラップ奏法(チョッパー)を備えた興奮度満点な楽曲も少なくありません。クラシックギターは業界人だけで成り立っている(偏見?)せいか、一般大衆にはいまひとつメジャーな存在ではなく、また昔の名残から演歌系というイメージが払拭できない楽器ですが、素晴らしい曲も多いので是非一度耳にされることをお勧めします。
それにしても、何回見ても飽きのこない画像です。
もうひとつ気になった記事は「英数字って半角?全角?」。そういえば私のサイトも英数字は基本的に半角を用いてますね。記事を探していたら ARTIFACT?人口事実?:英数字は半角にしないと気が済まない が見つかりましたが、この辺りを読むと経験や携わった業務等に依存するのかもしれませんね。
それとは別に、Webから何かの申し込みをする時のフォーム入力で「住所の番地や電話番号は全角・半角どっちだ?」と悩むことは時々あります。経験上、住所は全て全角で電話番号は半角というのがデファクトスタンダードっぽいです。
サイト紹介するつもりがサイトジャックになりそうなので、この辺で。
うだうだうだ
突然ですが、本テンプレートご利用サイト「うだうだうだ」さんのご紹介です。ご紹介の理由等につきましてはkazunoblogさんの記事を参照ください。
管理者のお名前はわっちゅさん。一度耳にするとなかなか忘れられない印象的なハンドルネームです。このようなハンドルネームから性別を判断するのはなかなか困難です(笑)が、記事をお読み頂ければお分かりになるかと思います。そういえば他のサイトで「男性だろうな」と思って拝見していたら、かなり後になって女性の方であることが分ったり、その逆の方もいらっしゃったりで「ブログ界恐るべし!」という感じです(バカ)。
こちらのサイト、途中でサーバクラッシュによるデータ喪失のため、現在は新たにカスタマイズされたもので運用されているようです(お疲れ様でした!)が、テンプレート記事への最初のコメントを2004年10月8日にいただいておりますので、実質的には5ヶ月以上のブログ歴をお持ちの方です。画像からお分かりの通り黒を基調とされたデザインで、テンプレートご利用者では最初にダーク系にカスタマイズされた方と記憶しております。
「絵本発表会」というエントリーでは絵本の大切さを改めて感じさせられました。またこのような発表会があるということ自体、新鮮でした。絵本は(本当にたまーに)目にすることがあり、子供にとってはなくてはならないものですが、大人が読んでも忘れてしまった大切なことを思い出させてくれますね。
私事で恐縮ですが、随分以前に友人(保母さん)から「『ぐりとぐら』という絵本の文に曲をつけて欲しい」という依頼があり、どのシリーズか忘れましたが2ヶ所を抜粋して作曲をした記憶があります。役に立ったかどうかは別として、「絵本と音楽」という形で子供達との接点になる機会を頂けたのは嬉しかったです。
エントリーで紹介くださっている「ちょっとだけ」、もし機会があれば是非読んでみたい一冊です。
タイムスリップグリコ・思い出のマガジン
![]() たまにはゆるいネタで。 他には、花とゆめ/Olive/ARENA37℃/鉄道ファン/月間平凡/POPEYE/少年画報/CAR GRAPHIC等。 |
コメントスパム対策(その6)
再び Ogawa::Memoranda さん提供のスパム対策プラグインに対し、下記の改変を行いました。
- プラグイン:Quasi-Spam Filter Plugin 改変内容:コメントの投稿者(MTCommentAuthor)の文字列をフィルタ対象に加える
これまでのコメントスパムは本文にフィルタ文字列が含まれていましたが、数日前、本文ではなく投稿者にフィルタ文字列が含まれるスパムが10通ほど到来しました。プラグインは(コメントについては)本文のみのチェックとなっていますので、投稿者に設定された文字列もチェックするように改変してみました。
修正については、ソースを下記の赤字部分から青字のものに置き換えてください(2番目の赤字部分はさらに1行追加がありますのでご注意ください)。なお今回の改変コードはOgawaさんの案を頂きました。ありがとうございました。
sub comment_filter {
my ($eh, $app, $comment) = @_;
return !is_comment_spam($comment->text);
return !is_comment_spam($comment->text . ' ' . $comment->author);
}
sub comment_throttle_filter {
my ($eh, $app, $entry) = @_;
my $comment = $app->{query}->param('text');
my $author = $app->{query}->param('author');
return !is_comment_spam($comment);
return !is_comment_spam($comment . ' ' . $author);
}
sub comment_error {
my $app = shift;
my $q = $app->{query};
my $mode = $q->param('__mode') || $app->{default_mode};
return if $mode ne 'post';
if (is_comment_spam($q->param('text'))) {
if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
$app->add_methods(post => sub { });
$app->error("Spam Comment!");
}
}
sub comment_long_error {
my $app = shift;
my $q = $app->{query};
my $mode = $q->param('__mode') || $app->{default_mode};
return if $mode ne 'post';
if (is_comment_spam($q->param('text'))) {
if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
$app->add_methods(post => sub { $_[0]->handle_error("Spam Comments!") });
}
}
sub comment_redirect {
my $app = shift;
my $q = $app->{query};
my $mode = $q->param('__mode') || $app->{default_mode};
return if $mode ne 'post';
if (is_comment_spam($q->param('text'))) {
if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
$app->add_methods(post => sub { });
$app->redirect($URL);
}
}
sub comment_evil_redirect {
my $app = shift;
my $q = $app->{query};
my $mode = $q->param('__mode') || $app->{default_mode};
return if $mode ne 'post';
if (is_comment_spam($q->param('text'))) {
if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
$app->add_methods(post => sub { });
$app->redirect($q->param('url') || $URL);
}
}
コメント画面からの投稿については動作の正常性をを確認しておりますが、適用に際しましては個人の責任で行ってくださいますよう、よろしくお願い致します。
リアルタイムカレンダー(画像表示版)
ご要望がありましたのでリアルタイムカレンダー(改)を改造して作ってみました。今回の改造に際しまして下記のサイトを参考にさせて頂きました。ありがとうございました。
本カレンダーの仕様は、本日の日付に画像だけを表示するというものです(日を表示しません)。日付の背景に画像を表示する場合はリアルタイムカレンダーのスタイルシートに
.today {
background-image :url( "画像のURL");
background-repeat: no-repeat;
}
というような設定を行えば動作します(多分)。赤字部分に表示したい画像のURLを設定してください。
ここでは通常カレンダー・月送りカレンダー・縦型カレンダー・横型カレンダーの4つのケースについて説明しています。また使用されるアーカイブの拡張子が .php になっていることが前提です。.php になっていない場合は下記のエントリーの3項から始めてください。
また月送りカレンダーにつきましては本エントリーとは別にカスタマイズが必要ですのでご注意ください。
通常カレンダー・月送りカレンダー・横型カレンダーについては、カレンダー設定がされている各テンプレートの <MTCalendar>~</MTCalendar> の部分を下記のスクリプトに変更します。縦型カレンダーは <table>~</table> で括られていることを前提に作っておりますので、該当部分を置き換えてください。また縦型カレンダーのスタイルシートは
- 全体:calendar
- 月表示:calendar-head
- 日表示:calendar-day
という指定になっています。スタイルシートの設定は適宜設定くださいますよう、お願い致します。
いずれも赤字部分に表示したい画像のURLを設定してください。
現状では、Windows2000・IE6.0/Firefox1.0/Opera7.23で動作の正常性を確認しています。
1.通常カレンダー
<?php
$day = date("j");
$img = "画像のURL";
?>
<MTCalendar>
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<MTCalendarIfEntries>
<?php
$d="<$MTCalendarDay$>";
?>
<td align="center">
<?php
if($day != $d) {
print "<span class=\"calendar\">";
}
?>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>">
<?php
if($day != $d) {
print $d;
} else {
print "<img src=\"" . $img . "\" align=\"middle\" border=\"0\" />";
}
?>
</a>
</MTEntries>
<?php
if($day != $d) {
print "</span>";
}
?>
</td>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries>
<td align="center">
<?php
if($day != <$MTCalendarDay$>) {
print "<span class=\"calendar\"><$MTCalendarDay$></span>";
} else {
print "<img src=\"" . $img . "\" align=\"middle\" />";
}
?>
</td></MTCalendarIfNoEntries>
<MTCalendarIfBlank><td> </td></MTCalendarIfBlank>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>
2.月送りカレンダー
<?php
$day = date("j");
$year = date("Y");
$month = date("m");
$img = "画像のURL";
?>
<MTCalendar month="this">
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<MTCalendarIfEntries>
<?php
$y = "<$MTCalendarDate format='%Y'$>";
$m = "<$MTCalendarDate format='%m'$>";
$d = "<$MTCalendarDay$>";
?>
<td align="center">
<?php
if($year == $y && $month == $m && $day == $d) {
print "<span class=\"calendar\">";
}
?>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>" target="_top">
<?php
if($year == $y && $month == $m && $day == $d) {
print "<img src=\"" . $img . "\" align=\"middle\" border=\"0\" />";
} else {
print $d;
}
?>
</a>
</MTEntries>
<?php
if($year == $y && $month == $m && $day == $d) {
print "</span>";
}
?>
</td>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries>
<td align="center">
<?php
$y = "<$MTCalendarDate format='%Y'$>";
$m = "<$MTCalendarDate format='%m'$>";
$d = "<$MTCalendarDay$>";
if($year == $y && $month == $m && $day == $d) {
print "<img src=\"" . $img . "\" align=\"middle\" />";
} else {
print "<span class=\"calendar\"><$MTCalendarDay$></span>";
}
?>
</td></MTCalendarIfNoEntries>
<MTCalendarIfBlank><td> </td></MTCalendarIfBlank>
<MTCalendarWeekFooter></tr></MTCalendarWeekFooter>
</MTCalendar>
3.縦型カレンダー
<table width="100%" class="calendar" cellpadding="2" cellspacing="4" summary="カレンダー">
<tr>
<td class="calendar-head"><$MTDate format="%B"$>月</td>
</tr>
<?php
$day = date("j");
$img = "画像のURL";
?>
<MTCalendar>
<MTCalendarIfEntries>
<?php
$d="<$MTCalendarDay$>";
?>
<tr><td align="center">
<?php
if($day != $d) {
print "<span class=\"calendar-day\">";
}
?>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>">
<?php
if($day != $d) {
print $d;
} else {
print "<img src=\"" . $img . "\" align=\"middle\" border=\"0\" />";
}
?>
</a>
</MTEntries>
<?php
if($day != $d) {
print "</span>";
}
?>
</td></tr>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries>
<tr><td align="center">
<?php
if($day != <$MTCalendarDay$>) {
print "<span class=\"calendar-day\"><$MTCalendarDay$></span>";
} else {
print "<img src=\"" . $img . "\" align=\"middle\" />";
}
?>
</td></tr></MTCalendarIfNoEntries>
</MTCalendar>
</table>
4.横型カレンダー
<?php
$day = date("j");
$img = "画像のURL";
?>
<MTCalendar>
<MTCalendarIfEntries>
<?php
$d = "<$MTCalendarDay$>";
if($day != $d) {
print "<span class=\"calendar\">";
}
?>
<MTEntries lastn="1">
<a href="<$MTEntryLink archive_type="Daily"$>">
<?php
if($day == $d) {
print "<img src=\"$img\" border=\"0\" />";
} else {
print " $d";
}
?>
</a>
</MTEntries>
</MTCalendarIfEntries>
<MTCalendarIfNoEntries>
<?php
$d = "<$MTCalendarDay$>";
if($day != $d) {
print "<span class=\"calendar\"> $d";
} else {
print "<img src=\"$img\" border=\"0\" />";
}
?>
</MTCalendarIfNoEntries>
<?php if($day != $d) { print "</span>"; } ?>
</MTCalendar>
設定終了後、それぞれ保存・再構築してください。
2005.02.26 追記
月送りカレンダーにtypoがありましたので修正しました。
2005.03.11 追記
横型カレンダーを追加しました。
2005.05.02 追記
月送りカレンダーに month="this" の設定がもれていましたので追記しました。
2005.08.07 追記
Apache のログにPHPエラーが出ていたためスクリプトを一部修正しました。
BlogPeople Tags
BlogPoeple Tags というオンラインブックマークサービスが本日より提供されています。というのは下記の記事で知りました。素早い情報ありがとうございます。 |
私のおおざっぱなイメージですが、まずブックマーク表示用のホームページを取得します。次に
あるサイト(何でもOKらしい)をブックマークする時にサイトの付加情報として「フォルダ」と「タグ」という2つの要素を設定します。例えば、
- Aサイト:フォルダ「ショッピング」 タグ「ファッション」
- Bサイト:フォルダ「ショッピング」 タグ「音楽」
- Cサイト:フォルダ「チケット」 タグ「音楽」
の3サイトをそれぞれのフォルダ名およびタグ名でブックマークします。これが新しく取得するBlogPeople上のホームページで表示されるのですが、フォルダ「ショッピング」で選択するとA、Bサイトが表示され、タグ「音楽」で選択するとB、Cが表示されるという仕組みらしいです。またタグを介して他の方のブックマークを参照することができ、RSS検索も可能なようです。
とりあえず「ホームページ名」だけ取得した方がいいかも知れません。
Google AdSense を設置しました
すでにお気づきのことと思われますが、昨年からユーザ登録していた Google AdSense を設置致しました。個別エントリーアーカイブの本文下にどーんと置いてます。 |
今更ですが、最初に Google AdSense の説明です(ご存知の方は読み飛ばしてやってください)。
Google AdSense は一言で申し上げると「広告」です。Google AdSense には「コンテンツ向けAdSense」「検索向けAdSense」があり、前者については、「Googleの検索技術を駆使し、Webサイトの?(中略)?内容を解析してキーワードを抽出。これにマッチしたテキスト広告をサイト上に配信・表示する。いったんページ内にタグを設定すれば、あとは的確な広告がダイナミックに配信されるようになっており、サイトオーナーにとってメンテナンスフリー?(後略)? *1」ということ、そして「広告がクリックされた回数に応じて支払いを行います *2」ということです。
つまり記事の内容に関連した広告を表示し、その広告がクリックされると収入になるというものです。
Google AdSense を利用するには、まずユーザ登録を行います。承認されれば Google AdSense のサイトにログインして、貼り付ける広告の設定(広告のタイプやデザイン等の設定)を行います。設定が終わったらページに表示されている広告表示用の JavaScript を自サイトに貼り付けることで広告を掲載することができます。
下記のサイトに詳しい説明があります。
設置を保留していた理由は、配置位置およびサイトとの親和性の2点です。
1点目の配置については当初サイドバーに配置する案を考えていましが、例えば個別エントリーアーカイブのサイドバーに配置するとアーカイブページ間のメニュー配置が崩れるのが不満でした(個別エントリーアーカイブにメニューが必要かという疑問はありますが)。かといってサイドバーの最下部に配置するのは視覚的に良くないだろうと思い、先人の知恵をお借りして本文の真下に配置することにしました。
また当サイトはサイドバーの幅を155に設定しているのですが、サイドバー用になる広告の幅は120/125/160/180の4種類。125では左右に隙間があきますし、かといって一番近い160タイプにサイドバーの幅を合わせたくなかったのもボツにした理由の一つです。
本文下であれば横長で2広告表示の「バナー(468×60)」というタイプが非常に手頃なのですが、なにぶんサイズ可変のため、固定サイズのオブジェクトを配置すると(ブラウザの幅を狭くしたら)ある時点から中央カラムの右区切り線が動かなくなるという問題があります。そういう訳で、ブラウザを狭くしても差し支えない幅であること、また「Ads by Goooooogle」というタイトルは広告タイプによって上についているものと下についているものがあるのですが、他の項目タイトルとのバランスから上についていること、の2点に着目して選ぶことにしました。
これらの条件を満たすタイプとして「レクタングル(300×250)」「スクエア(250×250)」がありました。で後者はやや見た目がスカスカなため、消去法的に前者が残りました。
もうひとつの「サイトとの親和性」は要するに配色なのですが、「Ads by Goooooogle」の文字色以外は自由に変更できることが途中で判明しましたので、サイトの配色に合わせました。
実際に配置してみると左右の空間がわりと小粋(意味不明)で気に入ってます。というか広告であることがまあ分かりやすく、紛らわしくないのがいいです。このタイプで広告数が2つか3つのものがあるといいのですが、残念ながらこれしかありません。
- *1:INTERNET Watch:Google、サイト向け広告配信プログラム「AdSense」の日本提供を公式発表
- *2:Google AdSense:コンテンツ向けAdSense概要
Creative Commons License を適用します
Creative Commons License(以下CCL) を適用することに致しました。対象はサイト全体ですが、テンプレートやプログラムに対する扱いについては別途検討する予定です。
画像をクリックすると条件が表示されます。この条件であれば記事を現状通り再利用および改変でき、またその行為について誤解を招かれることもないと考えています。
CCLの表示自体は昨年の秋頃から考えておりましたが、適用方法について理解不足のため保留にしていました。がここ最近、記事コピーの話題が浮上したことや、私自身他サイトで公開されているパッケージの改変に対する認識不足もあり、自分のサイトにも何らかのルールを設ける必要性を感じました。
どこかに「転載OK」と書いても良いのですが、とりあえず Movable Type がデフォルトで用意しているCCLの利用が妥当と判断致しました。
円滑なブログ運営のための手助けになればと思います。
記事の引用・転載について
ブログ記事の引用・転載について個人的な見解を述べたいと思います。
まずは、発端となったご近所のサイトでの引用についての記事(下記)です。単なる羅列になってしまっていること、予めお詫び申し上げます。
- Caramel*vanilla:blogの引用について/blogの引用について…波紋と再考
- Stupid excuse!!:コピペについて考えるという話
- Nonsense?:trackfeedとfeedmeterを設置
- 我楽:track feed をつけてみる。
- 今日の覚え書き:トラックバックについて思う事
あげあしとりで申し訳ありませんが、まず「記事の引用」については下記サイトにある説明の通りです。
ということで、以下「引用」は「転載」という解釈で話を進めたいと思います(私自身これまで「引用」という言葉を使ってましたので反省)。ケースとして本文の転載もあると思いますが、ここではMTタグやJavaScript,php等の転載に着目します。パッケージやパッケージに対する改変については別途エントリーしたいと思います。
ブログ、特にMovable Typeを使われている方はデフォルトテンプレートから何らかのカスタマイズを行って使われている方が少なくないと思います。そういう時は検索エンジンからカスタマイズ方法を探すことで自サイトのデザインや利便性を向上させていると思います。
そしてカスタマイズ内容の転載という行為は、ブログの普及率という観点から考えるとかなり貢献しているのではないかと思います。利用者の立場では、とにかく該当する記事が早くみつかればいい訳で、特に公開元のリンクが切れていたり異なる言語である場合は、公開元でない他のサイトの記事や翻訳されたサイトがあると助かります。
備忘録として掲載されている方も少なくないと思います。私も例外ではありません。
で現状ですが、私のカスタマイズを利用くださっている方は、クレジットの明示、つまりカスタマイズの出所が当サイトであることを明示くださっていますので、カスタマイズ内容を転載されることについて言及するようなことはありません(とはいってもリンクされていなければそもそも調べる手段がないのですが)。
またコメントやトラックバックについてはネットワークコミュニケーションの一手段という認識ですので、個人的には必須ではありません(もちろん頂けると嬉しいです)。厳密に言えばURLが自動検出される場合のトラックバックであればクレジットを表示くださっている可能性はありますが、結局そのサイトを拝見しなければ状況は判断できません。
結論としてはこれまで通り転載くださって構いません。なお、それを見られた方が(転載について)「問題」と思われないような対処は行いたいと考えています。新たな制限を設けるのではなく、転載を正当化させるための手段をこちらで用意したいということです。
その他、検索でみつけた記事です
- 電脳くおりあ:ブログと引用について
- Wired News:人気ウェブログは頻繁に「無断引用」――ウェブログ間の情報の流れを解析
- HOUTAL:ネットJ「くらしの法律相談」バックナンバー
- Present 日本新聞協会:ネットワーク上の著作権について―新聞・通信社が発信する情報をご利用の皆様に
やっつけで書いたのと認識誤り等含め、内容については適宜変更する可能性あります。予めご容赦ください。
2005.02.20 追記
「カスタマイズのタグやスクリプトは著作物ではありません」というコメントに伴ってCCL利用に関する文章を削除しております。
ファイルのアップロードで上書きを有効にする
Movable Type ではFTPツールを利用せずに、管理メニューの「ファイルのアップロード」からファイルをアップロードすることができです。ただしデフォルト状態で /tmp が存在しない環境ではファイルの上書きができない(アップロード画面でエラーとなります)ため、やや不便に感じます。
上書き可能にするためには /tmp ディレクトリを作成するか、あるいは mt.cfg の TempDir を有効にし、アップロードしたファイルを一時保存するためのディレクトリを設定します。後者の場合の設定方法は下記の通りです。
変更前
# When processing uploaded files, if Movable Type notices that the file you
# uploaded already exists, it will allow you to overwrite the original file,
# by first asking for your confirmation. To do this, MT needs to write the
# uploaded data to a temporary file. That temporary file is stored in the
# directory specified by the TempDir setting; the value defaults to /tmp.
#
# TempDir /tmp/
#
変更後
# When processing uploaded files, if Movable Type notices that the file you
# uploaded already exists, it will allow you to overwrite the original file,
# by first asking for your confirmation. To do this, MT needs to write the
# uploaded data to a temporary file. That temporary file is stored in the
# directory specified by the TempDir setting; the value defaults to /tmp.
#
TempDir /~/tmp/
#
"~"の部分にはファイルを一時保存するtmp ディレクトリまでの絶対パスを記述します(試していませんが相対パスも有効かもしれません)。また配置するための tmp ディレクトリも予め作成しておきます。例えばローカル・サイト・パス配下に tmp というディレクトリを作成し、そこを参照するようにするのが良いのではないでしょうか。
なお上書きされる場合は「上書きしますか」という確認画面が表示されるので、そこで「いいえ」を選択すれば誤って上書きされることはありません。
2005.02.19 追記
Linux や UNIX のレンタルサーバの場合、システムデフォルトで /tmp が存在するので、本設定は不要と思われます。
テキストエリアのデータを1クリックで選択する
テンプレート公開エントリー(3カラム固定/3カラム可変)にあるテキストエリアのデータをコピーするためには、先頭(または最後)からドラッグまたは「Ctrl+A」のいずれかで全てを選択する必要がありましたが、1クリックで全選択状態にできるように修正致しました。修正内容は下記の青色部分の追加です。
<textarea rows="10" readonly="readonly" onfocus="this.select()">
:
</textarea>
これは巷で有名な「トラックバックURLを1クリックで選択状態にするカスタマイズ(例えば「今日の覚え書き」さんの記事)」の応用ですが、この部分へ適用できることに気がついていませんでした(バカ)。
以前、テンプレートのコピーが中途半端で表示に不具合が生じるというケースがありましたので、この改善でそういった事象が削減されることを期待しています。
テンプレートの保存・再構築を同時に行うボタンを追加
デフォルトの管理画面で修正したテンプレートを表示に反映させるには、一旦保存した後「再構築」ボタンをクリックしなければならないのですが、このボタンを追加することでテンプレートの保存・再構築を同時に行えるようになります。*1これで再構築した結果が素早く確認できるようになります。精神衛生的にも良いでしょう。 |
参考サイトは下記です。ありがとうございました。
ここでは上記のカスタマイズ内容からの差分のみを掲載しておきます。差分は「保存&再構築」ボタンを画像のように一番左へ配置したことと、フォームボタンおよびメッセージの日本語表示です。下記に示す該当のファイルに赤字部分を削除し、青字部分をそれぞれ追加してください。
なお対象となるテンプレートは「インデックス・テンプレート(メインページ・スタイルシート等)」です。
lib/MT/App/CMS.pm
764行目付近
:
$param{rebuild_me} = defined $obj->rebuild_me ?
$obj->rebuild_me : 1;
$param{sr} = 1 if($q->param('sr')) ;
} elsif ($type eq 'blog') {
:
1177行目付近
sub save_object {
my $sr = 0;
my $app = shift;
my $q = $app->{query};
my $type = $q->param('_type');
my $id = $q->param('id');
:
1340行目付近
:
$obj->text($text);
## Save and Rebuild
if($q->param('sr')){
$sr = 1;
$app->rebuild_indexes( BlogID => $obj->blog_id, Template => $obj, Force => 1 )
or return;
}
} elsif ($type eq 'blog') {
if ($q->param('cfg_screen')) {
:
1550行目付近
:
} else {
return $app->redirect($app->uri .
'?__mode=view&_type=' . $type . '&id=' . $obj->id .
'&blog_id=' . $blog_id . '&saved=1');
if($sr == 1){
return $app->redirect($app->uri .
'?__mode=view&_type=' . $type . '&id=' . $obj->id .
'&blog_id=' . $blog_id . '&sr=1');
$sr = 0;
} else {
return $app->redirect($app->uri .
'?__mode=view&_type=' . $type . '&id=' . $obj->id .
'&blog_id=' . $blog_id . '&saved=1');
}
}
}
sub list_objects {
:
tmpl/cms/edit_template.tmpl
45行目付近
<TMPL_IF NAME=SR>
<div class="message">
<MT_TRANS phrase="Your template changes have been saved and your template has been rebuilt.">
</div>
</TMPL_IF>
<form method="post" action="<TMPL_VAR NAME=SCRIPT_URL>">
<input type="hidden" name="id" value="<TMPL_VAR NAME=ID>" />
<input type="hidden" name="blog_id" value="<TMPL_VAR NAME=BLOG_ID>" />
<input type="hidden" name="type" value="<TMPL_VAR NAME=TYPE>" />
<input type="hidden" name="__mode" value="save" />
<input type="hidden" name="_type" value="template" />
tmpl/cms/edit_template.tmpl(フォームボタンの配置場所変更)
130行目付近
<TMPL_UNLESS NAME=NEW_OBJECT>
<TMPL_UNLESS NAME=BUILD_DYNAMIC>
<TMPL_IF NAME=HAS_REBUILD>
<input type="submit" name="sr" value="<MT_TRANS phrase="Save & Rebuild">" />
</TMPL_IF>
</TMPL_UNLESS>
</TMPL_UNLESS>
<input type="submit" value="<MT_TRANS phrase="Save">" />
<TMPL_UNLESS NAME=NEW_OBJECT>
<TMPL_UNLESS NAME=BUILD_DYNAMIC>
<TMPL_IF NAME=HAS_REBUILD>
<input type="button" onclick="doRebuildOne(<TMPL_VAR NAME=ID>)" value="<MT_TRANS phrase="Rebuild">" />
</TMPL_IF>
</TMPL_UNLESS>
</TMPL_UNLESS>
lib/MT/L10N/ja.pm(フォームボタン・メッセージの日本語化)
523行目付近
'Your template changes have been saved.' => '変更したテンプレートを保存しました。',
'Your template changes have been saved and your template has been rebuilt.' => '変更したテンプレートを保存・再構築しました。',
541行目付近
'Rebuild' => '再構築',
'Save & Rebuild' => '保存&再構築',
*1:スタイルシートについては再構築不要なカスタマイズが公開されています(下記)が、本カスタマイズで同様の効果が得られます。
- Magic White:スタイルシートの変更簡単に
- ARTIFACT ―人工事実―:MTでのスタイルシート変更を楽に
- the girlie matters:link that stylesheet(オリジナル)
2005.02.17 追記
インデックステンプレート以外のテンプレート編集画面で「保存&再構築」ボタンが表示される不具合を修正、および typo修正(いずれも tmpl/cms/edit_template.tmpl)。
2005.08.11 追記
元記事のカスタマイズ内容を追加しました。本記事のみで全てのカスタマイズを行うことができます。
LinuxWorld 3月号に Movable Type 特集
ということで、これからブログを始められる方はもちろん、その他の方もMovable Typeの解説書として読めそうな特集です。左上の画像リンクをクリックして、真中辺りにある「月刊誌最新刊」の「Linux world」をクリックすれば(ちょっとだけですが)雑誌の紹介が表示されます。
「テンプレートのページ」作成
公開中のテンプレートについては、エントリーと「このサイトについて」の一部でご紹介しておりましたが、テンプレートに関する利用方法やこれまでに頂いた質問等をまとめて専用のページを作成しました。ドラフト版ですがとりあえず公開致します。
maketree.js 1.01 リリース
ツリー化スクリプトの maketree.js をマイナーバージョンアップしました。
今回の修正はツリー状のリスト(ul-li-ul-liという構造)に対する対処です。1.00ではサブカテゴリーリストにしか対応していなかったため、これを他のツリー状リストに対応させるように修正致しました。端的に申し上げますとユーザー・マニュアルメニューリストに対する対処です。
ユーザー・マニュアルを表示していない、またはツリー化表示しない場合、アップグレードの必要はありません。またアップグレードされても既存の動作には影響ありません。
アップグレードされる場合は下記のリンクでスクリプトのページへジャンプし、そこからダウンロードしてください。
以下、ユーザー・マニュアルで利用する場合のカスタマイズ方法を記します。
1.id 属性の変更
ユーザー・マニュアル表示用タグの id 属性(赤字部分)を、同ページの他の id 属性と重複しない任意の文字列に修正してください。ここでは hogehoge という id 属性にした例です。
<div class="sidetitle" id="manualname">
Official User's Manual
</div>
<div class="side" id="manuallist">
<div id="categorieshogehoge">
2.スタイルシートの追加
サブカテゴリー用のスタイル定義をコピー&ペーストして同じスタイルシートの任意の位置に追加し、id 属性(赤字部分)を1項で付与した名称に変更します。
.side #categorieshogehoge ul {
padding-left: 15px;
margin: 0px;
margin-bottom: 0px;
}
.side #categorieshogehoge ul ul {
margin-bottom: 0px;
}
.side #categorieshogehoge li {
margin-top: 0px;
margin-bottom: 0px;
list-style-type: circle;
}
3.maketree.js起動スクリプト追加
ユーザー・マニュアル表示用タグの下に下記を追加します。
<script type="text/javascript">
<!--
generateTreeForTreeStructure('hogehoge');
//-->
</script>
以上です。
2006.04.04 追記
リストから language 属性を削除しました(HTML4.01/XHTMLで非推奨あるいは廃止されているため)。
Movable Type ワークショップ(ブログデザイン編)開催
Movable Type のサイトにニュースが出ていました。以下引用です。
みなさまよりご好評をいただいているMovable Type ワークショップの第 2 弾として、「ブログデザイン 1」を、来る 2 月 24 日に開催します(主催:ネオテニーベンチャー開発株式会社)。 このワークショップでは、多くの方から強いご要望をいただいている Movable Type のカスタマイズについて、テンプレートファイルの修正方法を具体的にご紹介します。講師は「Movable Type標準ハンドブック」(インプレス 2/28 発売) の著者の関根元和氏です。 実機を使った講習会ですので、この機会を逃さずに!!
テンプレートファイル修正方法ということで個人的には興味津々。お申し込みは先のページからです。
「最近のエントリー」の日別表示
Category:[3.151-ja, テンプレートタグ, 最近のエントリー]
Tag:[Customize, Entry, MovableType, MTDateFooter, MTDateHeader, MTEntryDate]
Permalink
公開テンプレートの「Recent Entries(最近のエントリー)」というタイトルのメニューリストは、デフォルト状態では直近の10エントリーを単純に並べて表示するだけです。ここではこれを日別に分割して表示するためのカスタマイズをご紹介致します。

カスタマイズ方法ですが、各テンプレートにある「Recent Entries」を表示するMTタグの該当部分について、下記のように青色部分を追加します。修正後のリストは元記事からの引用です。
<div class="sidetitle">
Recent Entries
</div>
<div class="side">
<MTEntries lastn="10">
<MTDateHeader>
<$MTEntryDate format="%m/%d"$><br />
</MTDateHeader>
└ <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
</MTEntries>
</div>
MTEntryDateのformat属性は "mm/dd"(例えば02/11)と表示されるように設定しています。この部分の修正で日付表示を変更することができます。フォーマットの詳細はユーザー・マニュアル:日付タグのフォーマットをごらんください。
先日投稿したサイドメニューのツリー化スクリプトに対応させる場合は下記をご利用ください。
<div class="sidetitle">
Recent Entries
</div>
<div class="side">
<MTEntries lastn="10">
<MTDateHeader>
<ul><$MTEntryDate format="%m/%d"$>
</MTDateHeader>
<li><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a></li>
<MTDateFooter>
</ul>
</MTDateFooter>
</MTEntries>
</div>
最初のリストとの主な変更点を青色で示しています。リスト表示用HTMLタグへの変更と、同日の複数エントリーを構造化する時に利用するMTDateFooterタグを加えています。div タグの id 属性は必要に応じて適宜追加してください。
カテゴリーリストをサブカテゴリー表示に切り替える
公開テンプレートのサイドメニューのカテゴリーリストですが、デフォルト状態では一括表示するように設定しています。これをサブカテゴリー表示に変更する方法を本エントリーにて記します。
サブカテゴリー表示に変更する場合、サブカテゴリー表示にしたいテンプレートのカテゴリーリスト用MTタグを下記のいずれかの方法で変更します。
カテゴリーリスト表示用のMTタグは下記です。「Categories」で検索すると良いでしょう。
<div class="sidetitle">
Categories
</div>
<!-- 全カテゴリー用 -->
<div class="side">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<!-- 全カテゴリー用 -->
<!-- サブカテゴリー用
<div class="side">
<div id="categories">
<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</div>
</div>
サブカテゴリー用 -->
なんとなくお分かりかと思いますが一番上がメニューリストのタイトルです。その下がメニューリスト表示用MTタグで、一括表示用の部分とサブカテゴリー表示用の部分に分かれています。デフォルトではサブカテゴリー表示部分を無効にしておりますので、これを有効にすればOKです。
一括表示のMTタグを残しておかなくて良い場合は赤線部分の行を単純に削除します。
<div class="sidetitle">
Categories
</div>
<!-- 全カテゴリー用 -->
<div class="side">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<!-- 全カテゴリー用 -->
<!-- サブカテゴリー用
<div class="side">
<div id="categories">
<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</div>
</div>
サブカテゴリー用 -->
一括表示のMTタグを残しておきたい場合は下記の通り赤色部分を削除し、青色部分を追加します。これはHTMLの「コメントアウト」という機能を利用してMTタグの有効・無効を制御しています。
<div class="sidetitle">
Categories
</div>
<!-- 全カテゴリー用 -->
<div class="side">
<MTCategories>
<a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br />
</MTCategories>
</div>
<!-- 全カテゴリー用 -->
<!-- サブカテゴリー用 -->
<div class="side">
<div id="categories">
<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</div>
</div>
<!-- サブカテゴリー用 -->
なおリストをサブカテゴリー表示に変更した場合、上記のMTタグをデフォルト状態で使用するとカテゴリーアーカイブページにジャンプした時、カテゴリーリストには表示されているカテゴリー配下のカテゴリーしか表示されません。この問題を解消するためには下記のエントリーを参照ください。
またインポート(管理メニューの「読み込み/書き出し」)を利用してエントリーを読み込んだ場合は以前のサブカテゴリー構成が解除されておりますので、管理メニューの「カテゴリー」をクリックした次のページで再度サブカテゴリーの設定が必要になります。
設定方法は、まず別のカテゴリーのサブカテゴリーとして移動したいカテゴリーの右側にある「移動」をクリックします。クリックするとページが切り替わりますので、親カテゴリーにしたいカテゴリーの左側にあるラジオボタンをクリックすればOKです。
サイドメニューのツリー化スクリプト(改)
|
1.maketree.js ダウンロード
下記のリンクをクリックしてスクリプトのページへジャンプしてください。そこで maketree.js をクリックし、同じファイル名でご自身のPCに保存してください。
本スクリプトはUTF-8で記述していますので、ブログで使用している文字コードがUTF-8以外の場合(Shift_JIS/EUC-JP等)は保存後、文字コードを適宜変更して再保存してください。この問題につきましては js ファイルのインクルード時、script タグにcharset 属性を指定することで文字コードを変更しなくても良いという記事を見つけましたが動作実績がありませんのでこのような記述にしています。
scriptタグの設定については3項に記してますのでお試し頂ければ幸いです。
2.maketree.js 配置
maketree.js をローカル・サイト・パスに配置してください。「配置」とはレンタルサーバの場合はFTPツール等によるアップロード、自宅サーバの場合は単なるコピーを示します。
3.リスト表示用タグ修正およびJavaScript起動用スクリプト設定
ツリー化を行いたい各テンプレートのサイドバーのメニューリストのMTタグを修正します。注:MTタグは ul と li を用いたリスト形式になっていることが前提です。一部のリストは公開テンプレートのタグを入れ替える必要があります。
下記に主要なツリー化用メニューリストのMTタグサンプルおよびJavaScriptを掲載します。黒字部分がMTタグ(公開テンプレートからの変更イメージ)で、青字部分が新たに追加するid属性およびJavaScript起動スクリプトです。
Recent Entries(最近のエントリー)
<div class="side" id="entrylist">
<ul>
<MTEntries lastn="10">
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</div>
<script type="text/javascript">
<!--
generateNormalTree("entrylist");
//-->
</script>
Recent Entries(最近のエントリー:日別表示用)
<div class="side" id="entrylist">
<MTEntries lastn="10">
<MTDateHeader>
<ul><$MTEntryDate format="%m/%d"$>
</MTDateHeader>
<li><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a></li>
<MTDateFooter>
</ul>
</MTDateFooter>
</MTEntries>
</div>
<script type="text/javascript">
<!--
generateNormalTree("entrylist");
//-->
</script>
Recent Comments(最近のコメント)
<div class="side" id="commentlist">
<MTEntries recently_commented_on="5">
<a href="<$MTEntryLink$>"><MTEntryTitle></a>
<ul>
<MTComments lastn="5">
<li><a href="<$MTEntryLink$>#<$MTCommentID$>">
<MTCommentAuthor></a> <$MTCommentDate format="%m/%d"$></li>
</MTComments>
</ul>
</MTEntries>
</div>
<script type="text/javascript">
<!--
generateNormalTree("commentlist");
//-->
</script>
Recent Trackbacks(最近のトラックバック)
<div class="side" id="trackbacklist">
<ul>
<MTPings lastn="10">
<li><a href="<$MTPingURL$>" target="_blank"><$MTPingTitle$></a><br/>
from <$MTPingBlogName$> <$MTPingDate format="%m/%d %X"$></li>
</MTPings>
</ul>
</div>
<script type="text/javascript">
<!--
generateNormalTree("trackbacklist");
//-->
</script>
Categories(カテゴリーリスト:一括表示用)
<div class="side" id="categorylist">
<ul>
<MTCategories>
<li><a href="<$MTCategoryArchiveLink$>">
<$MTCategoryLabel$></a> [<$MTCategoryCount$>]<br /></li>
</MTCategories>
</ul>
</div>
<script type="text/javascript">
<!--
generateNormalTree("categorylist");
//-->
</script>
Categories(カテゴリーリスト:サブカテゴリー表示用) *MTタグは修正不要です
<div class="side">
<div id="categories">
<MTSubCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
</div>
</div>
<script type="text/javascript">
<!--
generateSubcategoryTree();
//-->
</script>
注:サブカテゴリーのツリー化ではdivタグにある"categories"というデフォルトの id 属性をスクリプトで使用しています。もしこの名称を変更されている場合は maketree.js で categories という文字を検索(2ヶ所1ヶ所しかありません)し、その部分を使用されている文字と置き換えてください。
Monthly Archives(月別アーカイブリスト)
<div class="side" id="monthlylist">
<ul>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>
</div>
<script type="text/javascript">
<!--
generateNormalTree("monthlylist");
//-->
</script>
赤字部分は名称がそれぞれ一致するように指定してください。id 属性はサイドメニューの折りたたみ等で設定済であればそのままご利用ください。サブカテゴリーリストはMTタグの下にスクリプトを追加するのみで大丈夫です。またサブカテゴリーリストの折りたたみを利用されている場合は
<script type="text/javascript">
<!--
<MTTopLevelCategories>
<MTHasSubCategories>FoldNavigation('subcategories<$MTCategoryID$>','on',false);</MTHasSubCategories><MTHasSubCategories></MTHasSubCategories>
<MTSubCatsRecurse max_depth="3">
</MTTopLevelCategories>
//-->
</script>
の前後どちらに起動スクリプトを挿入してくださってもかまいません。
ツリー構造リスト(ユーザー・マニュアル等)
<div class="sidetitle" id="manualname">
Official User's Manual
</div>
<div class="side" id="manuallist">
<div id="manual">
:
(中略)
:
</div>
</div>
<script type="text/javascript">
<!--
generateTreeForTreeStructure('manual');
//-->
</script>
4.maketree.js インクルード文挿入
ツリー化スクリプトを利用する各テンプレートの <head>~</head> の間に下記のタグを追加してください。charset 属性は maketree.js の文字コードを指定してください。
<script type="text/javascript" src="<$MTBlogURL$>maketree.js" charset="utf-8"></script>
5.画像のダウンロード
下記のファイルをダウンロードしてください。これはツリーを表示するための画像で、実線・点線の2種類を用意しています。それぞれ2つの画像がありますのでご注意ください。
保存方法は、(IEの場合)リンクをクリックして一旦画像を表示し、その後に「ファイル」→「名前をつけて保存」で保存するか、リンクを右クリックして「対象をファイルに保存」を選択します。なお実線につきましては我楽さんより提供いただきました。ありがとうございました。
なお実線を公開テンプレートに適用した場合、Mozzila系ブラウザ(Netscape/Firefox)で線が途切れる事象が確認されています。スタイルシートの設定で解消されるかもしれませんが予めご了承ください。
6.画像の配置
ダウンロードした画像をローカル・サイト・パスに配置してください。「配置」とはレンタルサーバの場合はFTPツール等によるアップロード、自宅サーバの場合は単なるコピーを示します。
7.スタイルシート追加
スタイルシート(styles-site.css)の.sideの下辺りに下記のクラス指定を追加します。
ul.tree {
margin: 0!important;
padding: 0!important;
font-size: 9px;
list-style: none!important;
}
ul.tree ul {
margin: 0!important;
padding: 0!important;
}
ul.tree li {
margin: 0!important;
padding: 0 0 0 16px!important;
background-image: url(tree_lst.gif);
background-repeat: no-repeat!important;
list-style: none!important;
}
ul.tree li.end {
background-image: url(tree_end.gif);
list-style: none;
}
赤字部分については、先ほどダウンロードした画像のファイル名にそれぞれ変更するか、画像のファイル名をスタイルシートに設定されているファイル名に修正してください。また上の設定はスタイルシートと同じディレクトリ(=ローカル・サイト・パス)に画像を配置した場合です。異なるディレクトリに配置する場合は http://? のようにURLで画像を指定してください。
8.スタイルシート修正(必要な場合のみ)
ツリー化するリストに改行されたリンクが存在する場合、IE系のブラウザではリンクをポイントした時、あるいはポイントを外した時に横にあるツリー画像が消えるという不具合が確認されています(これで3日ほど悩みました)。
その場合はスタイルシート(styles-site.css)の先頭の方にあるリンクの設定で
/* リンク文字設定 */
:
a:link {
color: #8FABBE;
background: none;
}
a:visited {
color: #8FABBE;
background: none;
}
a:active {
color: #8FABBE;
background: none;
}
a:hover {
color: #006699;
background: none;
}
の赤字部分をコメントアウトまたは削除してください。
以上です。
9.FAQ
Q:ツリーが表示されません
A:主に下記の原因が考えられます。
- maketree.js 起動スクリプトの設定(5項)が誤っている
- ツリーを表示するリストが ul - li の形式になっていない、あるいは ul - li タグが正常に閉じられていない。
- 画像がアップロードされていない(6項の設定もれ)
- 4項が設定されていない
- 4項で設定したパスに maketree.js が存在しない(トップページからHTMLソースを参照し、maketree.js をインクルードしている script 要素の src 属性(URL)をマウスコピーして、ブラウザで直接指定して実行し、ダウンロード等ができればOK)
- ブログと maketree.js の文字コードが一致していない
- 6項で指定した位置に画像が存在しない(スタイルシートで指定した画像ファイルのURLを指定してダウンロードできればOKです。http://?という形式で指定していない場合はスタイルシートと同じディレクトリに配置されていることが必要です)
- 公開テンプレートでサブカテゴリーリストが表示されない場合、リスト全体がコメントアウトされている(詳細はカテゴリーリストをサブカテゴリー表示に切り替えるをご覧ください)
- HTMLまたはスタイルシートのフォーマットが誤っている。Another HTML-lint gateway や W3C CSS 検証サービスで致命的なエラーがないかご確認ください
- 3項で追加したスクリプトのフォーマット誤り(「"」が抜けている、HTMLタグが「<<?」になってしまっている等)
- 3項で設定した id 属性値とスクリプトを起動する時のパラメータが一致していない(要するに赤色の名称が不一致)
Q:ツリーの終端が閉じません(途中に表示されるものと同じものが表示される)
A:サブカテゴリーのツリー化で generateSubcategoryTree(); が使われていない可能性があります。言い換えると、サブカテゴリーのツリー化で generateNormalTree("~") を使うと質問の症状になります。
ここで解決しない場合、コメント欄に他の解決内容がありますのでご一読頂ければ幸いです。
2005.02.11 追記
「最近のエントリー」の日別表示用タグを追加しました。
2005.02.12 追記
サブカテゴリーリストのツリー化での注意書きを追記しました。
2005.02.13 追記
ツリー構造リストのツリー化について記述を追記しました。
2005.08.02 追記
FAQを追加しました。
2005.09.05 追記
Recent Comments のソースを XHTML valid になるよう修正しました。
2006.04.04 追記
リストから language 属性を削除しました(HTML4.01/XHTMLで非推奨あるいは廃止されているため)。また9項のFAQを修正しました。
2006.04.21 追記
9項のFAQを追加しました。
Movable Type 3.151-ja アップグレード
3.151-ja が出ましたので3.15-ja からアップグレードしました。
ここでの内容は自宅サーバ用のアップグレード手順です。今回は軽微な修正ということで、差分ファイルのみを差し替えました。3.15-ja からのアップグレードですので 3.15-ja 以前からのアップグレードには本内容は適用されません。また正規のアップグレード方法ではありませんので適用される場合は個人の責任のもとで行ってやってください。
1.パッケージのダウンロード
Six Apart.よりフルインストールまたはアップグレード用のパッケージ(ダウンロード画面直前でフルインストールかアップグレードかを決めます)をダウンロードし、解凍します。
2.ファイルのコピー
3.15-jaとの差分があった下記のファイルをそれぞれ差し替え(3.15-jaと3.151-jaの内容をフリーソフトで比較した結果ですが誤りがありましたらご容赦ください)。
- docs/mtchanges.html ← 3.151-jaバージョンアップ内容の追記
- lib/MT.pm ← バージョン表記の変更
- php/mt.php ← バージョン表記の変更
- php/lib/block.MTComments.php ← ダイナミックパブリッシングの問題対処
- tmpl/cms/list_ping.tmpl ← 日本語表示問題対処
3.再構築
3.1xからのアップグレードではCGIを起動する必要はありませんので、各アーカイブページをいつも通り再構築するだけです。これで各ページのバージョン表示が更新されます。バージョン表示部分のMTタグをモジュール化されている場合は、モジュール単体での再構築が必要な場合があります(私は以前これにひっかかりました)。再構築後
- Movable Type 3.151-ja
が表示されればOKです。
以上です。アップグレードされているテンプレートユーザさんは後ほど追記させて頂きます。今のところ当サイトでは正常に動作しています。
トラックバックスパム対策(その2)
Ogawa::Memoranda さんご提供のスパム対策プラグインに対し、下記の改変を行いました。
- プラグイン:Quasi-Spam Filter Plugin 改変内容:トラックバックのタイトル文字列をフィルタ対象に加える
事後になってしまいましたが改変についてOgawaさんご本人の許諾を頂けましたので、引き続き本エントリーにて公開したいと思います(経緯の詳細等は追記をご覧ください)。
以下、元の記事です。
オリジナルのプラグインは、トラックバックについては概要(excerpt)のみがフィルタ対象となっています。ということで、タイトル(title)にはフィルタ文字列が存在するのですが本文にフィルタ文字列が含まれないトラックバックスパムが到来しました。
本文に含まれる文字列をフィルタ対象にするという手もありますが、本文に特異な文字列が存在していないこととタイトル部分もフィルタ対象に含めた方が効率良さそうなので、quasi-spamfilter.pl を下記の通り修正しました。
sub tbping_filter {
my ($eh, $app, $ping) = @_;
return !is_tbping_spam($ping->excerpt);
return !(is_tbping_spam($ping->excerpt) | is_tbping_spam($ping->title));
}
sub tbping_throttle_filter {
my ($eh, $app, $tb) = @_;
my $q = $app->{query};
return !is_tbping_spam($q->param('excerpt'));
return !(is_tbping_spam($q->param('excerpt')) | is_tbping_spam($q->param('title')));
}
sub tbping_error {
my $app = shift;
my $q = $app->{query};
my $mode = $q->param('__mode') || $app->{default_mode};
return if $mode ne 'ping';
if (is_tbping_spam($q->param('excerpt'))) {
if (is_tbping_spam($q->param('excerpt')) || is_tbping_spam($q->param('title'))) {
$app->add_methods('ping' => sub { });
$app->_response(Error => 'Spam TBPing!', Code => 403);
}
}
動作は一応確認しておりますが適用に際しましては個人の責任で行ってくださいますよう、よろしくお願い致します。なお本改変に対する改善案をOgawaさん本人より頂きいておりますので、興味のある方は該当記事のコメント欄をご覧になってください。
2005.02.17 追記
本改変について「(CCLの条件から外れた形で許諾なしに)改変を掲載しているのはまずいのではないか?」というトラックバックを頂きまして、確かにご指摘の通りでしたので著作権者のOgawaさんにお詫びと許諾の旨、ご連絡致しました。
頂いた回答を引用させて頂きますと「Quasi-Spam Filter Plugin はブログ本体とは異なり、Artistic License に基づいて配布しています」とのことで、
- Quasi-Spam Filter Pluginに基づいていること
- 改変内容の明記
を条件に許諾いただきました。これを受けて記事を若干修正致しました。
なお無断で改変を行っていたことは事実ですので、このような記事を投稿しましたこと、謹んでお詫び申し上げます。
Movable Type 3.15-ja アップグレード
3.121-ja から 3.15-ja にアップグレードしました(ってすでに何日か経ってますが)。
ここでの内容は自宅サーバ用のアップグレード手順です。今回は
を参考にさせて頂きました。ありがとうございました。
1.ダウンロード
Six Apart.よりアップグレード用のパッケージ(ダウンロード画面直前でフルインストールかアップグレードかを決めます)をダウンロードし、解凍します。
2.ファイルのコピー
解凍したフォルダにある下記のフォルダおよびファイルをそれぞれ対応するフォルダ(ファイルはローカル・サイト・パス)にコピーします。なお赤字のものはコピー対象外にしました(配下のファイルを変更または追加しており元の情報が上書きされてしまうため)。
- docs/
- extlib/
- images/
- lib/
- php/
- plugins/
- schemas/
- search_templates/
- tmpl/
- tools/
- LICENSE-COMMERCIAL
- LICENSE-COMMERCIAL-JA
- LICENSE-PERSONAL
- LICENSE-PERSONAL-JA
- mt.cgi
- mt.js
- mt-add-notify.cgi
- mt-atom.cgi
- mt-check.cgi
- mt-comments.cgi
- mt-db2sql.cgi
- mt-search.cgi
- mt-send-entry.cgi
- mt-set-reg.cgi
- mt-tb.cgi
- mt-view.cgi
- mt-xmlrpc.cgi
- styles.css
ずらずらと書きましたが、結局3.1xからのアップグレードの場合で不要なものは
- mt-upgradecheck.cgi
- mt-upgrade20.cgi
- mt-upgrade21.cgi
- mt-upgrade221.cgi
- mt-upgrade25.cgi
- mt-upgrade26.cgi
- mt-upgrade30.cgi
- mt-upgrade31.cgi
です。これらをコピーする必要はありませんので削除します。
赤字の plugins フォルダはプラグインを何も加えていない場合、また search_templates は配下のファイルを変更していなければコピー対象に加えてください。
なお正規のアップグレード手順は docs 配下の mtupgrade.html に記載されています。ちなみにここには「extlibディレクトリ内のファイルをアップロードするときは、以前Movable Typeをインストールしたときにインストールしたライブラリをどれも上書きしないよう注意してください。」と書かれてますが、今回も思いきり上書きしました。
3.セキュリティ脆弱性対策プラグイン削除
Movable Typeの脆弱性と対策についてで公開されているプラグイン patch-20050124-mail-spam.pl を plugins フォルダに設定している場合は削除します。
4.再構築
3.1xからのアップグレードではCGIを起動する必要はありませんので、各アーカイブページをいつも通り再構築するだけです。これで各ページのバージョン表示が更新されます。バージョン表示部分のMTタグをモジュール化されている場合は、モジュール単体での再構築が必要な場合があります(私は以前これにひっかかりました)。再構築後
- Movable Type 3.15-ja
が表示されればOKです。
5.編集画面のテキストエリア拡張
アップグレードとは直接関係ありません。テンプレート編集画面およびエントリー投稿画面のテキストエリアが狭く感じるので個人的に毎回広げてます。テンプレート編集画面、エントリー入力画面ともに縦幅を拡張します。各ファイルの修正行は
- /tmpl/cms/edit_template.tmpl:128行 /tmpl/cms/edit_entry.tmpl:200行
です。具体的な内容は
を参照ください。
以上です。たしかに管理画面のレスポンスが向上しているようです。
トラックバックスパム対策(その1)
数日前に発生した突然のトラックバックスパムは色々なサイトに送信されていたみたいですね。ご近所のサイトをみたところ
より
がありました。
個人的には先日より利用させて頂いているコメントスパム対策が活用できるのではないか?と考えてましたが、考えるだけです(笑)。と思っていたところ、
がバージョンアップされてまして、トラックバックスパムにも対応するようになっていました。
ということでこちらを利用させて頂くことに。
前回との差分は、
# Set your spam pattern
our $COMMENT_PATTERN = '<h1>|<a\s'; # H1 or A elements
our $TBPING_PATTERN = '<h1>|<a\s'; # H1 or A elements
と、トラックバック用の変数が追加されています。赤字の部分を
our $TBPING_PATTERN = 'hoge1|hoge2|hoge3';
とし、最近受けたトラックバックに含まれる一部の文字列に変更しています。
手作りパソコンの価格
他で既に話題になっているかも知れませんが、下記のサイトで興味深い記事をみつけました。
こちらのエントリー内のリンクにある
が本題です。
このページで質問者の方は、パソコンに精通していると思われる友人に10万円でPCの製作を頼み、届けられた品に対して文句を言っています。これに対し半ば反論めいた回答が大量に届くというものですが、質問者と回答者の方々の、PCに対する認識のギャップから生じる会話のすれ違いと、意味不明な数値に翻弄される有識者の方々の文言が印象的です。
テンプレートご利用200サイト達成
当サイトで公開しているテンプレートのご利用者(コメント・トラックバック・BlogPeople等の登録で私が知ることができたもの)が200サイトを超えました。今回は変動が激しく、前回から約2ヶ月半での達成となりました。月並みではございますがご利用くださっている皆様には本当に感謝しております。この場をお借りして改めまして御礼申し上げます。ありがとうございます。m(__)m
また今回はmixiの「小粋なユーザコミュニティ」メンバーの方々がサイトのテンプレート利用状況チェックをお手伝いくださいました。サイトの紹介も含めお礼に代えさせて頂きます。お忙しい中、どうもありがとうございました。
- [k]kazunoblog:kazさん
- やむやむ:さえらさん
- うだうだうだ:わっちゅさん
- 今日の覚え書き:もそさん
- Daily note:miaowさん
- 宵待小桜餅:さくらもちさん
- [O*]**ORANGE**:mayumiさん
- Magic White:みよたんさん
ということで、いつもの通り、昨日時点でのご利用サイト様(更新停止またはテスト中と思われるサイトは外してます)を紹介させて頂きます。大体ですが数字・アルファベットおよび五十音順(ひらがな・カタカナ・漢字別)に並べ替えてます。またタイトルはトップページのタイトルを基本にしておりますが誤り等ございましたらご連絡ください。最近流行りの簡易表記はかなりもれているかもしれません。予めご了承ください。
- 05
- 29歳のしゅふlog volume2
- 3足のわらじ
- 404
- 84xx.daa.jp
- // A4web //
- @olog
- a n i
- Air Blog
- angeli-x ++ monologue
- A's -D
- B*note
- BEAT ZONE
- beeカメラ
- Blogのような日記のような
- blog・PC・HP奮闘記【プロの道具屋さん】
- Blue Mint
- bublog
- camera verde blog
- Carefree Field
- Centree's Blog
- Cherry-Radio
- Ciao*
- Cococcino Days*
- CocoNuts Days
- COLOR NO.A
- comi☆Log.
- Cool Gaming weBlog
- Страх Кино
- Daily note
- Daily stlyle*
- DB blog
- Dontkoi OMG! ヽ(; ̄▽ ̄)ノ
- D'sDinner@Blog
- [EF] Electric Flower
- emo.com
- Eternal Forest ?悠久の森?
- existence Uhheri Edition
- EXPECT THE UNEXPECTED
- :: Figaro_express ::
- Fourseasons
- From Narita Airport
- gの徒然Blog
- GF*days
- Grip Blog
- -h@tezone-
- hilari blog
- HiMAT
- HINATA
- Honey*moon
- HONGKONG+fish Hyper×2
- IdeOnline
- iRodoRi@BLOG
- kazunoblog
- KEEP THE FAITH
- KeiBlog
- KH Weblog
- L・E・L・S
- Livlog*
- LOVE SWIMMING Blog
- LUNCH BOX note*
- M*C?B Version?
- M*s Cafe-Blog-
- Magic White
- MAHALO
- Maio's Weblog
- MandraChips
- Minologue
- Mo-jah's Blog
- monochrome green
- Monochrome Recollections
- moon & apple
- MovableType@きりるーむ
- [美]Musabi Diary - a-bit-
- My Sweet Moana
- N-blog
- Nachtigall
- neko no 肉球@BLOG
- NEOといっしょ
- NO DOUBT
- nobubu Eyes
- Nonsence?
- NOP DAYS
- **ORANGE**
- ++Open My Heart++
- patapata:blog
- Peco Net
- PHAT∴LOVESICK
- pmLabo
- P's Blog
- /PEN/
- RaCCI's ブログ
- Release Candidate 2
- ROBI@HK>>blog
- S.O.O.S.blog
- SAKSAK RECORDS WEB SITE
- Saloon's Bar :: Weblog
- sands2kの諸々
- Sanssouci
- Search the happy way
- SEYA.ORG
- **Silver Heart**
- Slip-on Way
- Slow but Sure*
- SOYGRAPH
- STARLIT SKY
- Stupid excuse!!
- Suzie World
- Sweetly Blog *
- the end
- TOKYO Runabout
- TOY COZY MUSEUM 別館
- Treasure
- vanilla_cafe*
- /var/tmp/blog
- vvhappy-roadvv
- ■□ WAY OF LIFE □■
- weblog@nigiyakana jikan
- WInds of Cemetery
- zora*
- あっぷるじゅ?す
- あふなびブログ
- うだうだうだ
- えてぽんの部屋
- お気楽草紙
- おちこじんち。
- ++お花ダイスキ!++
- くまダーツ( ̄(エ) ̄)v(仮)
- ぐぅたら
- *だらだら雑記*
- ちびちっく!
- とってちってた★
- とりとめなき日記
- * どんぐりころころ *
- にゃ?ごろ
- のんべサラリーマン
- はいねぶ
- ひばり座ブログ
- ひびのつぶやき
- 『ふたつのしっぽ』
- ふわふわ
- ふんわり堂
- ほたるすたいる
- ぼくたび BLOG
- ぼけぼけどっとこむ
- まんがboo(漫画部)
- +みゅみゅうさ+
- やむやむ
- ゆきのきもち
- ゆるゆる学習帳
- よろずブログ
- わいるどで行こう
- アイドルの草鞋
- オナカン
- ギャンブル三昧!
- チップを弾むから勇気を分けてくれないか
- チョコチッブログ
- ツキヘノトビラ
- ドール・ヒステリア
- ナリモノイリ
- ボクはちゃんとビジネス本読んでます!
- ポポタム!
- マクロな日々
- ラパンdeドライブ宙-WEiRD-
- リンゴ庵blog
- 青い自転車とどこまでも。
- 馬に蹴られて
- 己でサイトジャック
- ?風を追いかけて?
- 我楽
- 喜怒哀楽
- 気ままな旅人になれたなら
- 今日の覚え書き
- 黒鱒 - weblog
- 激安!サーフショップ
- 越中のケツ、森嶋の髪。
- 後藤真希 ワオワオ記念日
- 雑貨*Zakka*サーチねっとMEMO
- 社会分析的ブログ
- 洒落のひとり言
- 秀丞写文庫
- 匠悟録
- 初心者のためのデジカメ活用入門
- 体験手記レポート部
- 月夜の浜辺
- 適宜更新
- 天上月苑
- 時は流れても・・・
- 夏海の恋愛事情。
- 寝言、戯言、独り言。
- 脳内物質大流室inBLOG
- 海苔部落
- 遙か彼方のラヴラヴライフ
- 毘沙門天
- 日々一歩-裏-
- 深い雪
- 迷える子うさぎ何処へゆく?
- 無線LANテック
- 野心と欲望の分家
- 宵待小桜餅
- 螺子式少年
- 蘭のきまぐれblog
- 零式改
なお本リストは「小粋なUserList」として公開しております。下記のスクリプトをBlogPeople等と同じ要領でサイドメニューに貼り付ければOKです。
<script language="javascript" type="text/javascript" src="http://rpc.blogrolling.com/display.php?r=2102d144aab85284beaa02142f672f72"></script>
リストの文字コードはUTF-8ですのでご注意ください。またリストにあるご自身のサイト情報を更新させる場合は
- http://rpc.blogrolling.com/pinger/
へ更新pingを送信してください。
テンプレートご利用者の方にお役立て頂ければ幸いです。
Blogユーザがチェックする人気Blog:2位
![]() おかげさまをもちまして、BlogPeopleのトップページ右下にある「Blogユーザがチェックする人気Blog」で、本日堂々の第2位にランキングされました。 ここはBlogPeopleに登録した当初よりなんとなく気に入っているランキングで、いつのまにか当サイトもランクされるようになりました。昨日はトラックバックスパムの影響で小一時間ほどサーバを止めてしまっておりましたが、そのようなアクシデントをものともせず、通常のアクセス数を遥かに上回ったようです。クリックしてくださった皆様、本当にありがとうございました。 このような節目を公にする・しないは別として、モチベーションを維持する糧になっているのは確かです。また今回もありえない順位でしたし、さらに上位に食い込むことなどまずありえないでしょう。それらの意味を込めての記念エントリーです。 |
プルダウンメニューに表示されたアーカイブリンクの選択状態を保持する
Category:[3.15-ja, プルダウンメニュー, ユーザビリティ]
Tag:[Customize, MovableType, PulldownMenu, Usability]
Permalink
具体的な動作は、プルダウンメニュー化された月別アーカイブリストやカテゴリーアーカイブリストから任意のアーカイブリンクを選択すると、自動的に選択したアーカイブページにジャンプし、ジャンプ先にある同じプルダウンメニューに、選択されたアーカイブリンクを表示します(通常のプルダウンメニューは他のページにジャンプすると選択状態が元に戻ってしまいます)。このカスタマイズを行うことでプルダウンメニューの直感的な操作が可能になります。左の図は月別アーカイブリストから「2004年11月」を選択した後、リンク先のページで2004年11月が選択状態になっていることを示しています。 以下のカスタマイズはJavascriptを外部ファイルにする場合・しない場合の2パターンで記述しています。外部ファイルにしない場合は1項を、する場合は2項を実施してください。 |
1.JavaScriptを外部ファイルにしない場合のカスタマイズ
1.1 月別アーカイブリストの変更
テンプレートの「日付アーカイブテンプレート」を選択し、サイドメニューの月別アーカイブ("Monthly Archives"というタイトルのタグ)が設定されている直下に青色のタグおよびスクリプトを挿入します。
<script type="text/javascript">
<!--
function selectUrl(sel){
if(sel.options[sel.selectedIndex].value){
location.href = sel.options[sel.selectedIndex].value;
}
}
//-->
</script>
<div class="sidetitle">
Monthly Archives
</div>
<div class="side" id="monthlylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<MTArchiveList archive_type="Monthly">
<option value="<$MTArchiveLink$>"><$MTArchiveTitle$> [<$MTArchiveCount$>]</option>
</MTArchiveList>
</select>
</form>
</div>
<script type="text/javascript">
<!--
var data ="<$MTArchiveTitle$>";
var year = data.substring(0,4);
var month = data.substring(12,14);
var nodes = document.getElementById('monthlylist').getElementsByTagName("option");
for (var i = 0; i < nodes.length; i++) {
var selectYear = nodes[i].innerHTML.substring(0,4);
var selectMonth = nodes[i].innerHTML.substring(5,7);
if(year == selectYear && month == selectMonth){
nodes[i].selected = true;
}
}
//-->
</script>
リストは公開テンプレートを例にしていますがデフォルトテンプレートも大体同じです。緑色部分はデフォルトからセレクトボックスへの変更、および選択時に該当URLにジャンプするためのスクリプトです。既にセレクトボックスが設定済みであれば修正は不要ですので必要に応じて修正してください。また赤色で示す id属性名が他で使用中の場合は、異なる属性名に適宜変更してください。
月別アーカイブをモジュール化(日付アーカイブテンプレートより php または MTInclude タグを用いてインクルード)している場合は、スクリプトをインクルードしている行の直下に設定します。緑色のJavaScriptはどちらに記述しても大丈夫です。
なお、サイドメニューの折りたたみを利用されている方はそちらの id属性名を用いますので、先の
<div class="side" id="monthlylist">
の設定は不要です。ただし現在設定されている id属性名と一致するように、リスト内の赤字部分を適宜修正してください。サイドメニュー折りたたみ用スクリプトが設定されている場合は、上記スクリプトの後方に配置してください。
上記のリストは、図のように先頭から「yyyy年mm月」と表示されているものを前提にカスタマイズしています。先頭に他の文字列を含んでいる場合や年月が「yyyy/mm」等にしている場合は、
var selectYear = nodes[i].innerHTML.substring(0,4);
var selectMonth = nodes[i].innerHTML.substring(5,7);
の赤色部分を修正してください。例えば上の行は「0文字目から4文字目の直前(つまり3文字目)までを取得」という意味です(通常の1文字目はプログラム上「0」と数えます)。
リストをツリー形式にされている場合(例えば該当行のHTMLに月しか表示してない場合)は、先の2行を
var selectYear = nodes[i].value.substring(44,48);
var selectMonth = nodes[i].value.substring(49,51);
として、value属性のURL内にある年月を取得するようにします。赤色部分の値は適宜変更してください。
さらに年月以外のoptionタグが存在する場合は、value属性値(つまりURL)の文字列長をチェックして
for (var i = 0; i < nodes.length; i++) {
var selectYear = nodes[i].innerHTML.substring(0,4);
var selectMonth = nodes[i].innerHTML.substring(5,7);
if(nodes[i].value.length == 61) {
var selectYear = nodes[i].value.substring(44,48);
var selectMonth = nodes[i].value.substring(49,51);
if(year == selectYear && month == selectMonth){
nodes[i].selected = true;
}
}
}
とすれば良いでしょう。
1.2 カテゴリーリストの変更
テンプレートの「カテゴリー・アーカイブテンプレート」を選択し、サイドメニューのカテゴリーリスト("Categories"というタイトルのタグ)の設定されている直下に青色のタグおよびスクリプトを挿入します。リストは公開テンプレートを例にしています。緑色部分の意味は月別アーカイブと同様です。
<script type="text/javascript">
<!--
function selectUrl(sel){
if(sel.options[sel.selectedIndex].value){
location.href = sel.options[sel.selectedIndex].value;
}
}
//-->
</script>
<div class="sidetitle">
Categories
</div>
<div class="side" id="categorylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<MTCategories>
<option value="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$> [<$MTCategoryCount$>]</option>
</MTCategories>
</select>
</form>
</div>
<script type="text/javascript">
<!--
var data ="<$MTArchiveTitle$>";
var nodes = document.getElementById('categorylist').getElementsByTagName("option");
for (j = 0; j < nodes.length; j++) {
if(nodes[j].innerHTML.indexOf(data) == 0){
nodes[j].selected = true;
}
}
//-->
</script>
赤色で示す id属性名が他で使用中の場合は、異なる属性名に適宜変更してください。
カテゴリー・アーカイブをモジュール化(カテゴリー・アーカイブテンプレートより php または MTInclude タグを用いてインクルード)している場合は、スクリプトをインクルードしている行の直下に設定します。緑色のJavaScriptはどちらに記述しても大丈夫です。
なお、サイドメニューの折りたたみを利用されている方はそちらの id属性名を用いますので、先の
<div class="side" id="categorylist">
の設定は不要です。ただし現在設定されている id属性名と一致するように、リスト内の赤字部分を適宜修正してください。サイドメニュー折りたたみ用スクリプトが設定されている場合は、上記スクリプトの後方に配置してください。
今回サブカテゴリー表示を意識したカスタマイズには対応していませんので予めご了承ください。
1.3 メインページの変更
メインページには月別アーカイブリストやカテゴリーリストに追加したものからJavaScript(青字部分)を除いたものを設定します。また空要素をメニュー先頭に表示する場合は茶色で示したタグを追加してください。青字部分が含まれていると再構築時にエラーになりますのでご注意ください。
月別アーカイブリスト
<script type="text/javascript">
<!--
function selectUrl(sel){
if(sel.options[sel.selectedIndex].value){
location.href = sel.options[sel.selectedIndex].value;
}
}
//-->
</script>
<div class="sidetitle">
Monthly Archives
</div>
<div class="side" id="monthlylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<option value="">選択してください</option>
<MTArchiveList archive_type="Monthly">
<option value="<$MTArchiveLink$>"><$MTArchiveTitle$> [<$MTArchiveCount$>]</option>
</MTArchiveList>
</select>
</form>
</div>
カテゴリーリスト
<script type="text/javascript">
<!--
function selectUrl(sel){
if(sel.options[sel.selectedIndex].value){
location.href = sel.options[sel.selectedIndex].value;
}
}
//-->
</script>
<div class="sidetitle">
Categories
</div>
<div class="side" id="categorylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<option value="">選択してください</option>
<MTCategories>
<option value="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$> [<$MTCategoryCount$>]</option>
</MTCategories>
</select>
</form>
</div>
2.JavaScriptを外部ファイルにする場合のカスタマイズ
2.1 外部ファイルの設定
下記のスクリプトを「selectbox.js」というファイル名で保存し、ローカル・サイト・パスに配置(またはアップロード)してください。ファイルはブログで用いている文字コード(UTF-8等)で保存してください。
外部ファイルは日別アーカイブ/カテゴリー・アーカイブ共通に使用します。
selectbox.js
function selectUrl(sel){
if(sel.options[sel.selectedIndex].value){
location.href = sel.options[sel.selectedIndex].value;
}
}
function addSelectForMonthly(data){
var year = data.substring(0,4);
var month = data.substring(12,14);
var nodes = document.getElementById('monthlylist').getElementsByTagName("option");
for (var i = 0; i < nodes.length; i++) {
var selectYear = nodes[i].innerHTML.substring(0,4);
var selectMonth = nodes[i].innerHTML.substring(5,7);
if(year == selectYear && month == selectMonth){
nodes[i].selected = true;
}
}
}
function addSelectForCategory(data){
var nodes = document.getElementById('categorylist').getElementsByTagName("option");
for (var i = 0; i < nodes.length; i++) {
if(nodes[i].innerHTML.indexOf(data) == 0){
nodes[i].selected = true;
}
}
}
2.2 テンプレートの設定(1)
日別アーカイブテンプレート/カテゴリー・アーカイブテンプレートの<head>~</head>部分に下記のタグを設定します。
<script type="text/javascript" src="<$MTBlogURL$>selectbox.js"></script>
この設定で実行し、JavaScriptファイルが正常に取得できなかった場合は <$MTBlogURL$> の部分を適宜変更してみてください。
2.3 テンプレートの設定(2)
日別アーカイブテンプレートの月別アーカイブリストおよび、カテゴリー・アーカイブテンプレートのカテゴリーリストに下記の青色部分を追加します。
日付アーカイブテンプレート
<div class="sidetitle">
Monthly Archives
</div>
<div class="side" id="monthlylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<MTArchiveList archive_type="Monthly">
<option value="<$MTArchiveLink$>"><$MTArchiveTitle$> [<$MTArchiveCount$>]</option>
</MTArchiveList>
</select>
</form>
</div>
<script type="text/javascript">
<!--
addSelectForMonthly("<$MTArchiveTitle$>");
//-->
</script>
カテゴリー・アーカイブテンプレート
<div class="sidetitle">
Categories
</div>
<div class="side" id="categorylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<MTCategories>
<option value="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$> [<$MTCategoryCount$>]</option>
</MTCategories>
</select>
</form>
</div>
<script type="text/javascript">
<!--
addSelectForCategory("<$MTArchiveTitle$>");
//-->
</script>
緑色部分はデフォルトからセレクトボックスへの変更箇所を示しています。既にセレクトボックスが設定済みであれば修正は不要ですので必要に応じて修正してください。また上記の id属性名を他で使用中の場合は青色部分、および select.js の赤色部分を異なる属性名に変更してください。
2.4 メインページの変更
メインページには月別アーカイブリストやカテゴリーリストに追加したものからJavaScript(青字部分)を除いたものを設定します。また空要素をメニュー先頭に表示する場合は茶色で示したタグを追加してください。青字部分が含まれていると再構築時にエラーになりますのでご注意ください。
月別アーカイブリスト
<div class="sidetitle">
Monthly Archives
</div>
<div class="side" id="monthlylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<option value="">選択してください</option>
<MTArchiveList archive_type="Monthly">
<option value="<$MTArchiveLink$>"><$MTArchiveTitle$> [<$MTArchiveCount$>]</option>
</MTArchiveList>
</select>
</form>
</div>
カテゴリーリスト
<div class="sidetitle">
Categories
</div>
<div class="side" id="categorylist">
<form>
<select name="select" onChange="selectUrl(this.form.select)">
<option value="">選択してください</option>
<MTCategories>
<option value="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$> [<$MTCategoryCount$>]</option>
</MTCategories>
</select>
</form>
</div>
3.スタイルシートの設定
スタイルシートの .side が定義されている下に追加します。
.side select {
font-family: Verdana, Arial, sans-serif;
color:#666666;
background: ffffff;
font-size:9px;
}
内容はデザインに応じて適宜変更してください。なお background を設定しない場合、Netscape7.1 ではセレクトボックスの背景色が暗くなりましたのでご注意ください。
以上です。今回のカスタマイズについては現在のところ
- OS:Windows2000 SP4
- ブラウザ:IE6.0/Netscape7.1/Sleipnir1.66/Firefox1.0/Opera7.23
で動作の正常性を確認しております。なお、前回のサンプルでは selected 属性の設定を
nodes[i].setAttribute("selected","selected");
としておりましたが、Mozilla系のブラウザで正常に動作しないことが判明したため、
nodes[i].selected = true;
に変更致しました。
この場をお借りしてお詫びと訂正に代えさせていただきます。
2005.03.04 追記
メインページの設定について追加しました。
2006.04.04 追記
リストから language 属性を削除しました(HTML4.01/XHTMLで非推奨あるいは廃止されているため)。
Movable Type 3.15リリース
またしても出遅れた感がありますが、Movable Type 3.15がリリースされました。
Movable Type 3.15の提供を開始
Movable Type 3.15日本語版の提供を開始いたしました。Movable Type 3.15日本語版は、1月25日に発見されたセキュリティ脆弱性や、大量のスパムを受信したときのサーバー負荷を軽減するための変更などを実施しました。詳しい変更点・修正点は、更新履歴 をご参照ください。
先月のエントリーでは23:59頃リリースと予測していましたがやや前倒しの23:50でした。
2005.02.01 追記
テンプレート正常性(というかアップグレード)を報告くださっているサイトは現在のところ下記の通りです(もれてたらご連絡ください)。ありがとうございました。

BlogPoeple Tags というオンラインブックマークサービスが本日より提供されています。というのは下記の記事で知りました。素早い情報ありがとうございます。
すでにお気づきのことと思われますが、昨年からユーザ登録していた
デフォルトの管理画面で修正したテンプレートを表示に反映させるには、一旦保存した後「再構築」ボタンをクリックしなければならないのですが、このボタンを追加することでテンプレートの保存・再構築を同時に行えるようになります。*1
サイドバーのメニューリストをツリー化するスクリプトです。このスクリプトの特徴は通常のリストだけでなく、画像のようにサブカテゴリーについてもツリー化が可能です(
サイドバーのカテゴリーアーカイブリストや月別アーカイブリストをプルダウンメニュー(セレクトボックス)にしている場合、プルダウンメニューから選択したアーカイブリンクの選択状態を保持するカスタマイズです。
