Hatena::ブログ(Diary)

jiroの日記 このページをアンテナに追加 RSSフィード

2005-06-01

[]コメントスパム

ふりょのところでかなり格闘してるみたいだけど、うちはコメントスパム対策してから初めてくらいました。手作業でスパム投げたのかな?そうじゃないとどうやったのかちょっと興味あります。

さてさて、コメントスパムとはいたちごっこですね。やっぱり、メジャーな対策だと破られてしまうんでしょうかね。ちょっと考えたのは、JavaScriptでhiddenを設定してあげるという手も結構いいかもしれない。コメントスパム業者はJavaScriptを解析しないといけなくなっちゃうから難易度上がりそう。

2005-04-06

[][]Ajax版 月間移動可能なMovableTypeのカレンダー Version2

昨日書いた記事ですけど、ちょっと視野が狭かったみたいです。今日ふと、別にXMLにとらわれなくてもいいじゃないかということに気づきました。新しい方法ではPHPも必要ありません。若干の不具合(Exceptionが出る)を除けば問題なく動きます。だれかExceptionの原因を教えてください。

ちょっと説明。昨日の方法は無理やり、MovableTypeにXMLを生成させPHPでContent-typeを変えるというものだしたけど、今回はMovableTypeに部分HTMLを吐かせます。そして、それをJavaScriptを用いて読み込んでHTMLとしてinnerHTMLに書き込みます。なんでContent-typeはtext/htmlのままでいいんでPHPを必要としません。

方法は、昨日よりも簡単です。

JavaScriptファイルはこれになります。任意の場所においてください。

昨日と同様に月別テンプレートを編集します。ここにXMLではなく、テーブルが始まるtableタグとその内側の部分を記述してあげます。うちのテンプレートはこれです。参考にどうぞ

最後にメインインデックスですがヘッダ部で上記のjavascriptを読み込み、カレンダーが表示される部分のタグにid="calendar"属性をつけてあげてください。昨日と同様に、対応していないブラウザのために既存のカレンダーは消さないでいいですよ。ちなみにうちはこれ

これならPHPが使えないところでも大丈夫なんで手軽ですね。

2005-04-05

[][]Ajax版 月間移動可能なMovableTypeカレンダー

以前iframeを使用した月間移動可能なMovableTypeのカレンダーを作成しました。今回、デザインを変更したついでに、カレンダーの仕組みも変更しました。動作する環境は以下のとおり

サーバ

PHPが使用可能なこと

動作確認の取れたクライアント

MS IE6.0

Firefox1.02

Mozilla1.7.3

PHPが使用できることが前提となっています。本来はPHPも使用したくなかったのですが、IEでこの仕組みを使うためにはHTTPヘッダーのContent-typeをtext/xmlにしてやる必要があったためです。Firefoxはそこの部分を書き換えてくれるメソッドがあるんですけどね。。。もしからしたら解決方法があるのかもしれません。知っている方がいたら教えてください!!

今回の月間移動可能なMovableTypeカレンダーのしくみは流行のAjaxです。ですから、現在のOperaでは動きません。ただ、Operaのバージョン7.60から使えるようになるらしいです。頑張って早くリリースして欲しいな。

前置きが長くなってしまったので、そろそろ本題に。

設置の方法ですが。以下の順序で行います。

  1. JavaScriptファイルの配置
  2. メインインデックステンプレートの編集
  3. 月別のアーカイブテンプレートの作成
  4. PHPテンプレートの編集

i. JavaScriptファイルの配置

ajaxcalendar.jsをDLして自分のサーバの任意の場所に配置してください。もちろん、Webから見える場所に配置してくださいね。

ii.メインインデックステンプレートの編集

編集といってもほんの少しです。現在カレンダーが表示されている部分を<div id="calendar"> </div>で囲ってください。id="calendar"で囲まれた部分にJavaScriptがカレンダーを新しく書き込みます。Operaなどの対応していないブラウザが参照できるように既存のカレンダーは残しておきましょう。次はbodyタグを次のように編集

<body onload="calendarInit('<$MTDate format="%Y"$>', '<$MTDate format="%m"$>');">

最後にHTMLのヘッダ部に次の文を追加

<script type="text/javascript" src="./calendar.js"></script>

ちなみにウチのテンプレートはこんな感じです

iii.月別のアーカイブテンプレートの作成

これは新規に作成しましょう。MovableTypeにログインして、左のメニューからテンプレートを選択します。そうするとアーカイブに関連したテンプレートというリンクがあるのでこれをクリック。テンプレートの名前はAjaxCalendarとでもしておきましょうか。内容は下記のとおり。

<?xml version='1.0' encoding='utf-8' ?>
<calendar>
<date year="<MTArchiveDate format="%Y">" month="<MTArchiveDate format="%m">" />
<MTArchivePrevious>
<prev year="<MTArchiveDate format="%Y">" month="<MTArchiveDate format="%m">" />
</MTArchivePrevious>
<MTArchiveNext>
<next year="<MTArchiveDate format="%Y">" month="<MTArchiveDate format="%m">" />
</MTArchiveNext>
<MTCalendar month="this">
<MTCalendarWeekHeader><week></MTCalendarWeekHeader>
<MTCalendarIfEntries><MTEntries lastn="1"><day href="<$MTEntryLink archive_type="Daily"$>" num="<$MTCalendarDay$>" /></MTEntries></MTCalendarIfEntries>
<MTCalendarIfNoEntries><day num="<$MTCalendarDay$>" /></MTCalendarIfNoEntries>
<MTCalendarIfBlank><day num="" /></MTCalendarIfBlank>
<MTCalendarWeekFooter></week></MTCalendarWeekFooter></MTCalendar>
</calendar>

iv.PHPテンプレートの編集

こちらは先ほどのページから新しいインデックス・テンプレートを作るのリンクをクリック。名前も適当にCalendarXMLとか決めます。出力ファイル名はcalndarxml.phpにします。内容は下記のとおり。

<?php
$year = $_REQUEST['year'] + 0;
$month = $_REQUEST['month'] + 0;

header('Content-Type: text/xml');
$month = sprintf("%02d", $month);
@readfile('./archives/' . $year . '_' . $month. '.html');
?>

最後に、ウェブログの設定→アーカイブの設定で新しく、テンプレートとアーカイブを関連付けるという部分で、先ほど作ったAjaxCalendarを月別に追加します。追加した後、優先をAjaxCalendarにに設定します。

これでサイトの再構築を行えば無事Ajaxカレンダーが表示されるはずです。

2005-04-04

[]テンプレートの変更

実はウチのサイト今まで、IEでしかきれいに見ることができなかったんです。なんで、Ajaxの勉強を兼ねてテンプレートを変えました。ついでにMovableTypeもupgradeしときました。もう遅いんで寝ます。

2004-12-12

[]MTのテンプレート

Going My Wayを読んでいたらDr.blog -ブログ研究室-でMTのテンプレートが配布されていると書いてあった。以前からこういうサイトないかなぁと感じていたんですよね。

今のテンプレートだと、IE以外でブラウズした場合、サイドバーがずれちゃうんだよね。自分でテンプレートを作るには時間無いけど、この現象は直したいしなぁ。ということで、テンプレートを持ってこようかなと考えちゅー