- 2006-12-08 (金) 17:04
- MovableType


- 緊急のメッセージを短時間で挿入する
今回のコメント事件で、思い知ったことがありました。
緊急のメッセージを挿まなくてはならない時に、静的生成のMTは圧倒的に不利であると。
ダイナミックパブリッシングでやってる方は別として、家のボロ鯖みたいに全体の再構築で30分を越えるような時、伝えたいメッセージを挿入する為に、その時間を待たなくてはなりません。
普通のサイトならトップページにメッセージのせて、完了なんでしょうね。
ただ、個人ブログの場合は、トップページから読み始める方は稀で、検索エンジンからいきなりエントリーへと飛んできます。そのこと自体に不満は無いのですが、その為メッセージをすべてのページに挿まないとならなくなります。
それで、再構築を最小にして、メッセージを挿入する方法を考えてました。
結局考えたのが、すべてのページに表示するための仕掛けを埋め込んでおいて、表示内容と表示のオン・オフが書かれた1ファイルのみにすれば、短時間でメッセージを挿み込めるじゃんってことでした。
ヒントになったのは、後ほど書く予定のwFormsで使われてる、エラーメッセージ表示の方法。
空のdiv要素を書いておいて、スクリプトでその中にメッセージを書き出すわけです。
JavascriptかPHPかは迷ったんですが、表示のオン・オフも簡単なJavascriptにしてます。
やり方はこんな感じ。 メッセージを表示したいすべてのテンプレートに、空の表示用ブロックを追加します。 (私はメインページと各アーカイブのalpha-inner直下にしました)<div id="pagebody">
<div id="pagebody-inner" class="pkg">
<div id="alpha">
<div id="alpha-inner" class="pkg">
<div id="site-notice" style="display: none"></div>
display:none;で初期状態では見えていません。Valdatorなどで調べると中に何もない空の要素は良くないと言ってきますので、気になる方は中に「メッセージ」とか入れておいてもいいかもです。
メッセージ表示のスクリプトは、こんな感じです。
適当な名前でインデックス・テンプレートとして作成してください。再構築オプションはオフです。
何回か説明してると思いますが、こういうMTタグを含まないインデックス・テンプレートは、「このテンプレートにリンクするファイル」に「出力ファイル名」と同じ値を入力しておくと、再構築をしなくて済みます。修正したら保存するだけで、ファイルが書き変わります。(私はpardon.jsって名前にしときました)
// お詫びメッセージ
document.getElementById("site-notice").innerHTML = "12月以降コメントを投稿すると管理者承認待ちのメッセージが表示されるものの、実際にはメッセージを受け取っていない状態になっていたようです。この期間にコメントいただいた方は、大変申し訳なのですが、コメント内容が無くなってしまっています。現在はコメントを受けられる状態に復帰しております。もしよろしかったら、再度コメントし直していただけるとありがたいです。お手数をおかけします。(2006-12-06T23:00)";
document.getElementById("site-notice").style.display = "block";
上でid site-notice 内の要素の中身を入れ替え、下でそれを非表示から表示へ切り替えてます。
後はこのスクリプトをどこかで読み込めば終了です。
私は画面の書き換えのスクリプト類はWidgetでまとめて記述し、bodyの閉じタグ直前に読み込むようにしているので、そこに追加して終了です。
<script src="<$MTBlogURL$>pardon.js" type="text/javascript"></script>
このスクリプトの位置がメッセージの読み込まれるタイミングになります。
しばらく経って、メッセージが必要無くなったらスクリプト内の表示に切り替えている部分を、コメントアウトするか、dispaly = "block"をdisplay = "none"にしておけば、表示されなくなります。
- Newer >: links for 2006-12-08
- < Older: Cookieでごにょごにょ
Trackback:(1)
- TrackBack URL for this entry.(1)
- Listed below are links to weblogs that reference
- 緊急のメッセージを短時間で挿入する from WolaWola
-
「緊急のメッセージを短時間で挿入する (オラオラ)」 from Ikias.com _ My Bookmarks 2006-12-10 (日) 07:22:52
-
http://www.zelazny.mydns.jp/archives/000...
[詳しくはトラックバック元サイトで]
Comments:(9)
-
said
December 8, 2006 6:21 PM
|
ReplyThis!
考え方がいいですね。
-
-
replied for
ikias's comment
December 8, 2006 9:35 PM
|
ReplyThis!
こんにちは、ikiasさん。
ほんとは、もっといい手をエロイ人が教えてくれるの期待してるんですけどネ。
-
-
said
December 8, 2006 11:23 PM
|
ReplyThis!
こんにちわ^^
なるほどぉ!!
いいかも、ですね( ̄∇ ̄)bテンプレート内に無駄なキーワードも入らないし、動的にメッセージも変えられるし♪
わたしもさっそくやってみます。
-
-
replied for
bzbell's comment
December 9, 2006 1:21 AM
|
ReplyThis!
ども、bzbellさん。
何があるか解んないから、準備しといた方が良いですよね。
ほんとはPHPにしたかったんだけど、表示に切り替えるところがJavascriptの方が簡単そうだったんで、こうしちゃいました。
なんか、改善案あったら教えてください。
-
-
said
December 9, 2006 1:40 AM
|
ReplyThis!
初めまして、こんばんみ。こちらでは初コメントかな?
私のブログでは、PHPでこの技を実現していますが、やはり
サーバーによってはPHPが使えない場合もあるだろうから
Javascriptを使った方法の方がまだ確実かなと思いますょ。
PHPの場合は、その緊急メッセージのファイルが存在してたら
表示するってだけの簡単な2行プログラムですけどね。でも全再構築に30分って言うのは確かに辛いですね( つД`)
私のトコでは450エントリーくらいでも全再構築に5分かな?-
-
replied for
たねちゃん's comment
December 9, 2006 8:23 AM
|
ReplyThis!
どうも、はじめまして。
あの、asiamothさんが絶賛する「CGIリネーム完全熟成版」のたねちゃんさん(?さん付けるのか・・)ですよね。お~ウレシ!Javascriptは「じゃあオフの奴どうすんだよ」っていう欠点もあるんで、まだまだ改良の余地ありそうなんですけどね。
そういう意味ではPHPかなと・・・。>全再構築に30分って言うのは確かに辛いですね( つД`)
すいません、うちの鯖がボロなんです。夜中によく悲鳴が聞こえます。
-
-
said
December 9, 2006 11:33 AM
|
ReplyThis!
こんにちわ^^
わたしは今までPHP版でやってましたが、今はJS版にしちゃいました。
テンプレート内に余計なタグが入らないのが好印象です♪JSを無効にされてる人向けにnoscriptタグでPHP版を併用するとか・・・。
-
-
replied for
bzbell's comment
December 9, 2006 1:45 PM
|
ReplyThis!
>JSを無効にされてる人向けにnoscriptタグでPHP版を併用するとか・・・。
そうですね、まぁnoscriptぐらいしか思いつかないですよね。PHPは少し練るとして、メッセージはbzbellさんとこ見て、一回変数に入れちゃった方が良いかもと思ってます。
必要ない時はdisplayだけじゃなく、innerHTMLの書き換え自体もやめた方が良さそうな気がするし。-
-
replied for
oscar's comment
December 9, 2006 2:20 PM
|
ReplyThis!
> そうですね、まぁnoscriptぐらいしか思いつかないですよね。
だと思うんですけどね。
でも、WEB2.0という名前がわたしみたいなシロウトにも行き渡ってるこの時勢で、JSを無効にしてる人ってそんなに多いんですかね。
Yahooのサイトだって、GoogleのサイトだってAjax使いまくってます。ぶっちゃけていうと、わたしのサイトではお構いなし(対策が分かってない)でAjax使ってます(; ̄∇ ̄A
> 必要ない時はdisplayだけじゃなく、innerHTMLの書き換え自体もやめた方が良さそうな気がするし。
そうかも、ですね。
余計な出力しないにこしたことないですよね。
-
-




スクリプトの読み込みが完了していません。
メールフォーム(Javascriptを使用していません)や、
Twitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。