どうでもいいコメントフォームを作る

このブログのサイドバーに「どうでもいいコメント用フォーム」を作りました。記事とは関係ないコメント用です。「お問い合わせフォーム」みたいな使い方も出来るでしょうが、このブログではジョークソフトの感覚で設置しています。

以下は、その設置方法です。

ご自由にコピペしていただいて構いませんが、厳密に考えて作っていませんのでトラブルがあっても当方は責任を持ちません。お使いの際は、それをご了承ください。

クッキーや入力チェックはありません。
追記:ファンブログのみ、ログイン中のクッキーを有効にしました。

サポートはしません。質問には答えませんので、見てわからなければ設置はあきらめてください。

送信先ページを作る

まず、フォームに入力されたコメントが送られる先、言い換えると、書き込まれたコメントの表示先となるページを作ります。

これは普通にブログの記事をひとつ作るだけです。記事のタイトルも文面も、ご自由に作ってください。

ページが出来たら、ブラウザでそのページを開きます。そして、表示されたページのソースを見ます。

ソースを見るには、Google chromeやfirefoxなら右クリックして、「ページのソースを表示」を選択します。その他のブラウザの場合は、、、、調べてください。

ページのソースの中に下の箇所があります。ブログだと通常は送信フォームは一つしかないと思いますので、ページ検索すればすぐに見つかると思います。

nameの値 WriteCommentForm はファンブログの場合です。

<form method=”post” name=”WriteCommentForm” action=”URL“>

formタグの中にあるactionに書いてあるURLをコピーします。このURLが送信先のURLです。

あとは、サイドバーに送信フォームを作り、送信先に先ほどの送信先のURLを指定するだけです。

以下は、このブログを書いているファンブログの場合ですが、その他のブログでも { と } で括ったファンブログの独自タグを削除して、すべてのname属性の値を正しく書き換えれば使えると思います。青字部分は、お好みで書き直してください。

{ と } で括ったファンブログの独自タグは、送信後、エラーがあった場合にそこにエラーが書き込まれるもので、ファンブログのみで有効です。

ここに表示ページのURLと書いてある場所には、コメントを送信するために作った記事のURLを書き込みます。

スタイルシートはご自分のブログに合わせて作ってください。

フォームのソース

ファンブログで、上に出てきた name=”WriteCommentForm” をつけるとクッキーが反映されません。

<h3>どうでもいいコメントはこちらへお願いします</h3>
<form method="post" action="ここに送信先のURLを記入">
<table border="0" cellspacing="0" cellpadding="0">
<tr align="left" valign="top" height="25">
<td class="text" width="50" nowrap align="right">名前:</td>
<td class="text"> <input name="author" value="{$CommentValueAuthor$}" /> <br /> {$CommentErrMsgAuthor$} </td>
</tr>
<tr align="left" valign="top" height="25">
<td class="text" nowrap align="right">Email:</td>
<td class="text"> <input name="email" value="{$CommentValueEmail$}" /> <br /> {$CommentErrMsgEmail$} </td>
</tr>
<tr align="left" valign="top" height="25">
<td class="text" nowrap align="right">URL:</td>
<td class="text"> <input name="url" value="{$CommentValueUrl$}" /> <br /> {$CommentErrMsgUrl$} </td>
</tr>
</table>
<textarea name="comment" rows="10" style="width:100%;"></textarea><br />
{$CommentErrMsgComment$}
<p style="text-align:right;"><input type="submit" name="post" value="送信する" /></p>
</form>
<p style="margin-top:1em;"><a href="ここに表示ページのURL">どうでもいいコメント一覧を見る!</a></p>

ファンブログ用の追記

ファンブログのみ、クッキーを有効にしました。
下のコードを上のフォームの直後に追加すれば、ログイン中は自動で名前やURLが入力されるようになります。

<script type="text/javascript">
<!--
(function(){
	var gCommentInCookie=new Cookie(document,'blog.comment.preferences.in');

	if(gCommentInCookie.load()){
		var loginFlag=false;

		for(var i=0;i<gCommentSaveCookieNames.length;i++){
			var name=gCommentSaveCookieNames[i];
			var input=document.getElementsByName(name);
			var cookie=gCommentInCookie[name];

			if(!input.length||'string'!=typeof cookie){continue;}

			var obj=document.createElement("span");
			obj.setAttribute('style','font-size:80%');
			obj.appendChild(document.createTextNode(cookie));

			input=input[input.length-1];
			input.value=cookie;

			input.parentNode.insertBefore(obj,input);
			input.style.display='none';
			loginFlag=true;
		}
	}
})();
// -->
</script>

気づいていないアクセス拒否 -アクセスされない理由-

2014年1月22日にA8.netのファンブログはSeesaa Blogのシステムをベースにして生まれ変わりました。よってファンブログ関連の記事は今では当てはまらない可能性があります。新しいファンブログのカスタマイズは別ブログ「ファンブログ テック」で詳しく書いていますので、そちらをご覧ください。

これはファンブログ専用記事です。

普段自分はファンブログの「あしあと」は完全無視です。理由は「看板番組」が「コマーシャル」の放送局?に書いています。でも気が向いたので、久しぶりにファンブログめぐりをしたところ、アクセスできないブログがありました。これはなぜか?設定の問題です。

ファンブログの「あしあと」または「コメント欄の投稿者名」はプロフィールページにリンクします。その証拠に自分がもらったコメントや「あしあと」をクリックすると相手のプロフィールページに飛ぶはずです。

そのプロフィールページなんですが、「非公開」にするとどうなるか?「アクセス権限がありません」と書かれたこんなページに飛ばされます。

ログインしているあなたには、プロフィールページが開けても、他の人には開けません!

アクセス拒否ページ

つまり、せっかくあなたのページを訪れてくれた人は、あなたのブログを見ることなく、アクセス出来ずに帰っていくことになるのです。

実はこれは過去に何回も説明しているのですが、浸透していないみたい。

設定方法は過去に書いた記事「足あと残すならプロフィール有効に」で説明しています。アクセスが少ないとお悩みの方、プロフィールを非公開に設定していませんか?

自動で正月だけメッセージ表示

自動で正月の三が日だけブログにお祝いメッセージを表示させる方法です。

1. まず、画像でも文章でもいいので正月に表示するメッセージを完成させてください。

表示場所はどこでも構いません。当然ですが、記事の中だとその記事が開かれないと実行されません。

2. 完成されたメッセージを次のようにHTMLで囲みます。

<div id="new_year_message">ここにメッセージを入れます</div>

次のステップで正月まで非表示になるので、その前にブラウザで表示内容を確認しておいてください。

3. 2で作ったHTMLの直後に下のソースを追加します。

<style type="text/css">
div#new_year_message{display:none;}
</style>

<script type="text/javascript">
<!--
var new_year1=(new Date(2013,0,1)).getTime();
var new_year2=(new Date(2013,0,4)).getTime();
var now=(new Date).getTime();

if(new_year1<=now&&now<new_year2){
  var div=document.getElementById('new_year_message');
  if(div){
    div.style.display='block';
  }
}
// -->
</script>

これで2013年の1月1日から1月3日の間だけ、メッセージが表示されます。期間が過ぎた後は表示されませんが、無駄なソースになるので忘れずに削除してください。

注:万が一表示されなかった場合もTomさんは責任を負わないものとします。それをご了承いただける場合のみご使用ください。

誤解があるといけないので、明記しますが、1月1日の午前0時0分0秒から1月4日になる直前までの間にページが読み込まれると、メッセージを表示します。それ以前に開かれていたページには何も起こりません。

既に開いてあるページには、元旦になると同時にメッセージが表示されたりはしませんし、開いているページに表示されているメッセージが1月4日になると自動で消えたりもしません。

お知らせ欄一括変更スクリプト

2014年1月22日にA8.netのファンブログはSeesaa Blogのシステムをベースにして生まれ変わりました。よってファンブログ関連の記事は今では当てはまらない可能性があります。新しいファンブログのカスタマイズは別ブログ「ファンブログ テック」で詳しく書いていますので、そちらをご覧ください。

現在(2012年12月18日)新しいスキンに変更中なのですが、すべてのページの上部に「お知らせ」欄を設けて、「作業中につき、ご迷惑をお掛けします」という内容のお断りを書いています。

今回はこの「お知らせ」欄を変更する際に1個の原稿でいっぺんに済ませる方法です。

というのも、記事の上に項目を追加するには、通常はスキン(テンプレート)に直接変更を書き込むからです。ただし、ブログのサービスによっては、元々の設定で「お知らせ」欄を一元管理できます。

livedoorブログ
ブログの「設定画面」から「基本設定」のページを開いて「メッセージボード」という項目に書き込むとすべてのページの上部に、そのメッセージが表示されます。
Seesaaブログ
管理画面の「デザイン」から「コンテンツ」を選択し、開いたページで記事の上下に自由に項目を追加できます。

上記ブログは、それですべてのページの「お知らせ」を一元管理できます。

それ以外のブログでも同じように一元管理をしたければ、次のようにします。

1. まず、サイドバーに「お知らせ」の原稿を書いたパーツを設置する。
2. その「お知らせ」原稿をスタイルシートで非表示にする。
3. JavaScriptで非表示の文章を表示したい場所にコピーしてから、表示する。

お気づきだと思いますが、サイドバーに表示するものはすべて一元管理が出来るので、サイドバーに表示できればいいのなら、一つ目の作業だけで完了です。

これから説明するのは、サイドバーではなく、ブログの記事の上にお知らせを表示する方法です。

「お知らせ」原稿を一元管理せず、ページごとに変える場合は、前回このブログがスキンを変更した時の記事「ブログ記事の前にお知らせ欄を作る」にやり方を書いてあります。

表示領域の設定

上で作業内容として3つの項目を列挙しました。しかし、実際にはその前にひとつ、下準備が必要です。これは、このブログを書いているファンブログを例に説明します。

ブログ記事の前にお知らせ欄を作る」と同じ要領で実際に表示する場所をスキンに作ります。

ファンブログのスキンには下の箇所があります。

<div id="content">
<div id="entries">
<BlogEntries>

この<div id=”content”><div id=”entries”>の間に「<div id=”message” style=”display:none;”><h2>お知らせ</h2></div>」と追加します。

<div id="content">
<div id="message" style="display:none;"><h2>お知らせ</h2></div>
<div id="entries">
<BlogEntries>

<h2>お知らせ</h2>は「お知らせ」欄のタイトルです。不要なら削除してください。

style=”display:none;”と書くことで、その部分は非表示になります。普段「お知らせ」がない場合はそこにタイトルも何も表示しません。

下準備は以上です。ファンブログ以外でもテンプレートを見ながら表示場所を確かめて、追加します。

サイドバーに設置するパーツの内容

サイドバーに次のとおり書いた項目を追加します。これで先ほど3つ列挙した作業をまとめて行ないます。

<div id="message_hidden" style="display:none;">ここにメッセージ本文</div>

<script type="text/javascript">
<!--
var message_area=document.getElementById('message');
var text_area=document.getElementById('message_hidden');

if(message_area&&text_area){
  message_area.innerHTML+=text_area.innerHTML.replace(/\r?\n/g,'<br />');
  message_area.style.display='block';
}
// -->
</script>

.replace(/\r?\n/g,'<br />’)とあるのは自動で改行を<br />に変換するオプションです。不要なら削除してください。この意味が分からなければ削除しないでください。

「お知らせ」の内容を「ここにメッセージ本文」と書いた部分に記入します。先ほど説明したstyle=”display:none;”があるので、サイドバーに文章は表示されません。

今後、変更がある時は「メッセージ本文」だけを変更します。表示するお知らせがないときはサイドバーのパーツを取り外せばOKです。

参考記事:
表テーブルが下がる原因と対処法 <br />タグについて説明しています
モジュールの設置方法 ファンブログでサイドバーに項目を追加する方法を説明しています

長いタイトルでも重ならないナビゲーション

口で説明すると難しいんですが、今回やりたいことは下の図のように横幅が広いときには1行で、横幅が足りない時には2行で、「前の記事」を左端に、「次の記事」を右端に表示することです。

横幅の広い状態

横幅の狭い状態

このブログは「ここにブログの名前を入れます」というタイトルですが、長いので以下「ナマ入れ」と省略表記します。

先日、ナマ入れのスキンを変えました。まだスキンの名前を発表していなかったので、ここで発表させていただきます。スキンには「薄いけど破れない」という名前をつけました。

話は戻ります。このスキン(テンプレート)は画面の幅に応じて左右の幅が伸縮するように作っています。よく伸びるスキンです。実際にブラウザのサイズを変えて見ていただくと、お分かりいただけると思います。

ただし、あまりにも狭いと見づらいので、800ピクセルより小さいときは固定幅になり、それより小さくならないようにしてあります。

問題は、画面の幅が足りている時と、足りていない時の2つのパターンがあって、その両方に対応しないといけないということです。今回の場合、横幅に応じて文字の大きさを変えるというアプローチもあるにはあります。

しかし、文字が小さくなるのは読みづらさにつながると思うので文字サイズは固定したまま、幅が足りない時は改行させるようにしました。

ソースコード

HTML

<div class="navi">

  <span class="left">
    <a href="URL" title="前の記事名">&laquo; 前の記事「記事名」</a>
  </span>

  <span class="right">
    <a href="URL" title="次の記事名">次の記事「記事名」 &raquo;</a>
  </span>

</div>

<br class="clear" />

スタイルシート(CSS)

div.navi{
 width:100%;
}
div.navi span.left{
 float:left;
 text-align:left;
}
div.navi span.right{
 float:right;
 text-align:right;
}
br.clear{
 clear:both;
}

&laquo; と &raquo; の2つはエンティティです。

実際には「&laquo;」は「«」、「&raquo;」は「»」と表示されます。

参考記事:ハートマークを表示するの巻 エンティティの説明をしています

英語ではないらしいのですが、私はleft(左)の「&laquo;」と
right(右)の「&raquo;」と覚えました。

ナビゲーションの表示領域はクラス名「navi」のdivエレメントです。

HTML5で書く場合は「div」ではなく、新しいエレメント「nav」が使えますが、今回の話題から逸れるので割愛します。

今回、もっとも重要なのは float です。

float の説明は以前の記事で説明しています。

参考記事:画像の隣に文章を配置したい floatの説明をしています

float:left;の指定で « 前の記事「記事名」 全体を左に寄せます。同様に float:right;の指定で 次の記事「記事名」 » 全体を右に寄せます。

これで上の図のように、領域が足りている時は1行で、領域が足りない時は2行で表示されるようになります。

float を指定した後は忘れずに clear を指定しないとレイアウトがグチャグチャになるので注意が必要です。

text-align の指定はなくてもいいかもしれません。

ただ、 <div class=”navi”> ~ </div> の領域にtext-align:center を指定したら、表示が汚くなったので書き込んだままにしています。

参考記事:枠の中の背景に画像を使いたい! 記事中の「文字位置の指定」でtext-alignを説明しています。

ファンブログのスキンに適用する場合

このブログを書いているサービス「ファンブログ」のスキン用オリジナルタグは「ファンブログのオリジナルタグ一覧 - ファンブログ!![無料]」で調べることが出来ます。そのオリジナルタグを適用して上のHTMLを、1記事ページのスキンに書き込むと下のようになります。

<div class="navi">
<BlogArchivePrevious>
<span class="left"><a href="{$BlogArchiveLink$}" title="{$BlogArchiveTitle$}">&laquo; 前の記事「{$BlogArchiveTitle$}」</a></span>
</BlogArchivePrevious>
<BlogArchiveNext>
<span class="right"><a href="{$BlogArchiveLink$}" title="{$BlogArchiveTitle$}">次の記事「{$BlogArchiveTitle$}」 &raquo;</a></span>
</BlogArchiveNext>
</div>

<BlogArchivePrevious> と </BlogArchivePrevious> の間に書いてあることは、前の記事があるときだけ表示されます。つまり、前の記事がない場合に « 前の記事「」 とカッコの中が空の状態で表示されてしまう心配はありません。

同様に <BlogArchiveNext> から </BlogArchiveNext> の間は、次の記事があるときにだけ表示されます。