少し前になりますが、ユーザーフォーラムで「コメント欄に選択ボックス(男女や年代など)を付けたい」という
質問がありました。 確かに良く引き合いに出すOTDの掲示板などですと 性別や年代、居住地域からアバターアイコンの選択欄まで備わったスキンも珍しくありません。 それはOTDには投稿者名やタイトルやメアド以外にも用途を自由に設定できる項目(変数)が9個もある(しかもその変数にはテンプレートのソースさえ丸々ぶち込める)からですが、FC2blogのコメントにはそのような変数はありません。
「ムズカシイな〜」
などとまず思いました。 既に寄せられている回答のように、「コメントタイトル」等の項目を代用して充てる、というのがまず思い浮かぶ訳ですが、それですと、
1)(一項目当たり)一つの項目にしか転用できない
2)テンプレートを換えた時の表示が意味不明となる
という問題が伴います。 複数の項目を自由に追加でき、しかもテンプレを変更しても(あまり)影響が出ない方法は無いものでしょうか。 考えている内に、はっとしました。
『項目の追加』 という点では当店の「D計画」に通じるのでは!? と。
コメントとエントリという違いはあれ、目指すものはほぼ同じではありませんか。
これすら実現出来ないようでは プロジェクトの完遂など覚束ないのは必定です。
「・・・よ〜し! 」 ( プチD計画発動です )
設置の手間もなるべく簡易にと、以下のような方法を考えてみました
【 設置法 】 head領域( </head> の手前 )に以下のスクリプトを書きます。
( 可能なら外部スクリプト化し、permanent_area ブロックに入れて下さい )
<script type="text/javascript"><!-- var V=new Array (); V[0]=new Array ('項目名1','値1','値2'・・・); V[1]=new Array ('項目名2','値1','値2'・・・); V[2]=new Array ('項目名3','値1','値2'・・・); function Prep() { var ck=document.comment_form.mail.value; if (ck=="" || ck.indexOf('$')<1) { for (i=0;i<V.length;i++) { document.write('<select name="D'+i+'">'); for (j=0;j<V[i].length;j++) { document.write('<option value="'+j+'">'+V[i][j]+'</option>'); } document.write('</select> '); } } } function Encd() { if (document.comment_form.D0) { var MA=(document.comment_form.mail.value); if (MA=="") {MA="ho@ge"} MA=MA+'$'+document.comment_form.D0.value; MA=MA+'$'+document.comment_form.D1.value; MA=MA+'$'+document.comment_form.D2.value; document.comment_form.mail.value=MA; } document.comment_form.submit(); } function Decd(m) { if (m!="") { var Ma=m; if (m.indexOf('$')>1) { var p=m.split('$');Ma=p[0]; for (i=0;i<V.length;i++) { var x='?'; if(p[i+1]>0) {x=V[i][p[i+1]]} document.write(' '+V[i][0]+':'+x); } } if (Ma!="ho@ge") { document.write('<a href="mailto:'+Ma+'">@</a>'); } } } //--></script>
コメント入力FORMを以下のようにします ( 青文字部分を追加 )
<form method="post" action="./" name="comment_form">
:
:
<input id="mail" ・・・・>
:
:
<script type="text/javascript">Prep()</script>
:
<p><input type="submit" value="送信" onClick="Encd();return false"></p>
:
</form>
*スクリプトタグは「メールアドレス欄」より後に書いて下さい。
コメント表示部を以下のようにします ( 青文字部分を追加 )
<!--comment-->
・・・<%comment_name>・・・
・・・ <%comment_url> ・・・
<script type="text/javascript">Decd('<%comment_mail>')</script>
・・・<%comment_body>・・・
<!--/comment-->
スクリプト行の位置に 追加項目が(入力されていれば)インラインで表示されます。
*他の部分でメール関連の独自タグを使わないで下さい
【 補 足 】 スクリプト冒頭の緑色部分は 追加項目名とその選択肢を設定します。
V[0] から連番で設定して下さい。 V[n] の最初の要素が n+1番目の項目名になります。
例: V[1]=new Array ('血液型','A','B','AB','O')
( 項目と要素(選択肢)の設定数に特に制限はありません )
スクリプト中の赤色部分は上記に対応するデータを取り込むものです。
必ず連番で同じ(行)数を書くようにして下さい。
(未熟者故、この部分を自動化できませんでした 何方か教えて下さい m(_ _)m
【 解 説 】 「転用しても影響の無い(少ない)要素」 は何かといえば「メアド」であろう、と私は考えました。 実際私自身他のblogにコメントする場合メアドを入力した事は(多分)ありませんし、メアド付きのコメントを戴いた事も(多分)ありません。 しかも、メールアドレスはそれ自体が表示される事が(殆ど)ないのでテンプレートを替えても表示が崩れたりする心配が少ない、というメリットもあります。 (データをそのままmailとして送れない≒メアドとしての体裁をなす必要がある)という問題もありますが)
ただ、メアドが全く使えなくなるというのもどうかと考えまして、体裁を保つのみならず、「メアドも使える」仕様としてみました。
設置時(テンプレート変更時)の手間を可及的に軽減するため、またデータを軽量化する為に「追加項目」は全てselectボックスから選択する仕様となっています。
「絵文字入力」と同様、select入力欄はスクリプトにより自動で表示されます。
( スクリプトoff環境では追加項目の入力欄は表示されません )
コメント時、追加項目のデータはメールアドレスに付加されて送信されます。
メールアドレスが空文の場合はダミーのアドレスに貼り付けて送信されます。
コメント表示部ではメールアドレスとデータは互いに分離されて表示されます。
(アドレスがダミーだった場合、メールリンクは表示されません)
このスクリプトは cookie_mail に既にデータが存在する場合 入力欄を表示しません ( コメントの度に選択しなければならないのは鬱陶しいので )。
これはある意味、「今日の気分」 などというような項目には適さないと言えます。 コメンターのプロフィル的な項目に適すると申せましょう。 尤も「選択欄」が表示されても 「メンドクセ」 「歳とか菊名」て方もいらっしゃるかも知れません。 項目が選択されなかった場合は 年齢:? のように表示されます。
・・此処まで書いて来てアレですが、私はcookieのスクリプト利用には経験が無く「今後の課題」の一つと捕らえていた状態でありましてFC2の クッキータグの仕様にも明るくありません。 それでもこのスクリプトの影響として懸念される事項を一つ挙げさせて戴きますと、 他blogでのコメント時にもメアド(のクッキー)にデータが付いてしまう、という点があります。
先に述べたように、実際のメアドを入力する方は殆どいらっしゃらないでしょうし、 データ自体も他ブログでは意味を成さないものでありますから「個人情報の漏出」等の懸念はありませんが、ho@ge$1$2$3 のようなメアドを入力されてお怒りになる管理人さんがいないとは言い切れませんので御留意下さいますように。
(寧ろ実際のメアドにもプロテクトが掛かって良い、とポジティブに解釈ry)
|
★
daniel
daniel
Edit 04/27 22:22 |
ちなみにこの方法はニンピーでは使えません。 |
| . |