過去ログ NO.1165491149
□ ひろたか [2006年12月06日11時35分]NXerさん先日はお世話になりました。 また、質問させて頂きます。 アンケート一覧ページにて評価ボタンを作りその横にボタンを押した分だけポイントが加算される機能を追加したいのですが、私では初心者の為出来ません。 お力を貸して下さい。 詳しくはアンケート一覧ページの開始日の前に評価ボタンを各アンケートごとにもうけて、どなたでも何回でもそのアンケートに対してクリックでき、なおかつその横に評価ポイントがクリックされた分だけポイントが加算していくという風に出来れば有難いです。 そして先日、教えていただいたNEW画像の所に、ポイント数が50に達するとHOTという画像を入れたいのですが、どうでしょうか?
□ NXer [2006年12月07日12時34分] >アンケート一覧ページにて評価ボタン
すえぽんさんのファイル管理とデータで当方に考えることができる例です。 NXerです。
その1)投票のページに評価ボタンをつけます。理由はファイル管理が 便利なためです。また、投票項目の適不適など、テーマだけでいい加減に 評価されることを防ぐためです。
その2)使う変数は $url です。
あんQの$Last_Modified = "2001/11/14"; 当時はメルアドやurlを知らせて あんQもウェブライフも楽しむものでした。現在ひろたかさんのように多くの人が あんQのアンケート機能を高く評価しつつあるようです。サーチ・エンジン によりURLを知る必要もほとんどなくなりつつあると思います。 どうしても転用できない時は、$epointを新設してください。大幅な変更 になります。
その3)hot.gifは、テストのために分かりやすく評価欄を新設しています。
1)初期設定 ---------------- #評価フラグ $evalflag=0; #---------------- 初期設定ここまで ----------------#
2)分岐文 130 &get_cookie; #---------------------- if ($in{'eval'}) { $evalflag=1;$file=$in{'eval'};&vote;} #-------------------------------- if ($in{'mode'} eq 'forward' || $in{'mode'} eq 'back') {&view_count;}# 1
3)見出し変更 eval(uation) 評価欄新設 ------------------------------- 171 else { print "<table>\n<tr><th>番号</th><th>new</th><th>eval</th><th>アンケートテーマ</th><th>開始日</th><th>終了日</th></tr>\n"; } -----------------------------------------
4)ボタン作成 ---------------------------- 338 print "<td class=plain><input type=submit value=' 更 新 ' class=btn></td></form></table></td></tr>\n</table>\n"; #------------------- print "<form action='$script' method=POST>\n"; print "<table><input type=hidden name=eval value=\"$in{'data'}\">\n"; print "<td class=plain><input type=submit value='評 価+' class=btn></td></form></table>\n"; ----------------------上挿入 table や formタグなど微調整してください } else { print "<input type=hidden name=data value=\"$in{'data'}\">\n"; ------------------------------{}の対応に注意
評価ボタンでは、eval=$in{'data'} という選択された変数値が、おそらく $file=$in{'eval'}で代入されると愚考します。メモリに書き込む代わりに バッファのようにファイル名を得ています。$tmp$_という表面にはでてこ ないファイル名です。
5)voteサブルーチンの変更 2箇所 5.1 640 sub vote { ------------------------変更 if ($evalflag==0){ if (! $in{'select'}) { &error("投票する項目が選択されていません"); } } ------------------------------- ------------------------------ 647 $subject = shift(@lines); 648 ($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$url,) = split(/\,/,$subject); -------------------------次行挿入$url increment if ($evalflag>=1){$url++;} ------------------------------------- if($repost_mode && $post_no eq $file) { ---------------------
5.2 682 &set_cookie; --------------------------------挿入 if ($evalflag>=1){&enter;}#評価後は、$url 加算後テーマ一覧へ else {&html;}#投票後は結果表示で投票ページにもどる --------------------------------- exit; } ------------------------------------------------------ また旗を使います。評価旗が0の時、投票がないと項目選択なしの表示。 評価旗が1のときは、項目選択はしていないが、旗に従ってこの警告は でません。648で得た$fileファイルの$urlを1だけ加算します。 683〜684では次のような結果になります。 1 投票しない、しかし評価だけする テーマ一覧ページへ 2.1 投票する、しかし、評価はしない 投票結果表示 2.2 投票する、しかも、評価する テーマ一覧ページへ
このような動作は、投票と評価の異種のデータを処理するためにやや 複雑な処理になります。得票数とアンケートコンテンツの評価数が ほぼおなじであれば、設問に妥当性があることが証明されます。 逆に、得票数はあるのに、評価が低い場合は、たとえば、あなたの 年代は、10代、20代、、、、のような必要な情報ですが、高い評価を えることは無いような気がします。他方、芸能系のテーマは、得票 してくれないが、評価は高いということもあるかもしれません。
あんQで、クロス集計をするには、一括テーマ回答(例、性別、年代 人気着メロ上位9位)などの指定が必要になると思います。しかも 回答者ごとのデータ保存が必要になります。 例 回答者1番、a-1,b-4,c-6 素データをあんQで集め、集計処理は表計算ソフトですればプログラム は例のようなデータ集積ですみます。これは一種の妄想で、当方の 能力を越えています。
6)hot.gif の表示、テストでは10ポイント以上で試してあります。 --------------------------- 994 sub subject_view{ print "<tr><td align=center>$count</td>\n"; &time_convert; if ($newflag>=1){ print "<td><img src=$img/new.gif width=35 height=15 border=0></img></td>\n";} else {print "<td>--</td>\n";} ------------------------------------------挿入 if ($url>=10){print "<td><img src=$img/hot.gif width=35 height=15 border=0></img></td>\n";} else {print "<td>$url</td>\n";} -------------------------------- print "<td><a href='$script?data=$_'>$subject</a></td><td>$up</td><td>$inf</td></tr>\n"; } --------------------------- 10 point 以下は点数をそのまま表示しています。
当方でテストしてありますが、不具合の発生は当方の責任ではありません。ご理解ください。 大幅な変更のため、記入漏れがあるかもわかりません。実験台で申し訳ありません。 なお、開発には複数の名前でそれぞれバージョンアップしています。そちらでも成功した バージョンは別名で保存するなどして、いつでもそれから出なおせるようにしてください。 上記例の変数は、コメント版よりも以前の版です。どの版でも問題はありません。サブルー チンと関連する初期値、分岐などをよく見直してください。 一度成功すれば、100%動作します。ときどき変な動作をするときは、文中にhtml文があ れば、print $url; のように変数の値を見たり、データ内容を把握してください。 秀丸というエディタは、キー入力を記録しており編集中はいつでも、何字でも、何行でも元に 戻ることができます。このような機能を生かして、ご計画のあんQを完成させてください。 ヒューマンエラー、文法エラー、そして論理エラーなどが発生しますから、ソフト開発に は膨大な時間を要します。perlはすでにほぼ20年ぐらいの言語の歴史があります。おおく の人人の無償のサポートで成長し続けています。
□ ひろたか [2006年12月07日15時23分]NXerさん返信頂き誠にありがとうございます。 HOT画像ですが、出来ればNEW画像の箇所に表示できればいいのですが、どうでしょうか? 具体的には、投稿一週間はNEWなんですが、その間評価ポイントが10以上たまればHOTになればOKです。 私なりに以下の通りやってみましたがこれでいいのでしょうか? if ($newflag>=1){ print "<td><img src=./img/new.gif width=25 height=9 border=0></img></td>\n";} else { if ($url>=10){print "<td><img src=./img/hot.gif width=25 height=9 border=0></img></td>\n";} print "<td>--</td>\n";} print "<td><a href='$script?data=$_'>$subject</a></td><td><center>$name</center></td><td><center>$total</center></td>\n"; print "<td><center>$url</center></td>\n"; print "<td><center>$mail2</center></td><td>$up</td><td>$inf</td></tr>\n";
□ NXer [2006年12月07日17時25分] >私なりに以下の通り にコメント文を付けてみました。NXerです。
------------------------- if ($newflag>=1){#newならnew画像 print "<td><img src=./img/new.gif width=25 height=9 border=0></img></td>\n"; } else {#さもなければ、つまり7日以後 if ($url>=10){print "<td><img src=./img/hot.gif width=25 height=9 border=0></img></td>\n"; }#もし評価が10点以上なら、ホット画像表示 print "<td>--</td>\n";}その後に表セルを作りーーを表示する ----------------------------- 上の説明の結果になりましたか。
ご要望の考え方です。 アルゴリズム1・・A 投稿一週間はnew $newflag>=1 new画像表示 しかし、 アルゴリズム2・・その間 B 評価ポイントが10以上たまれば new ではなくて HOT画像
その間は AかつBです。以上を条件式にします。 ------------------------------------------------- if ($newflag>=1 && $url>=10){print "<td><img src=./img/hot.gif width=25 height=9 border=0></img></td>\n";}#hot 画像表示 10以下は偽となり下の文
elsif ($newflag>=1){print "<td><img src=./img/new.gif width=25 height=9 border=0></img></td>\n";}#new 画像表示 A&&B は真偽表ではAとBとが真のみ成立、条件を試してください。
elseif ($url>=10){print "<td><img src=./img/hot.gif width=25 height=9 border=0></img></td>\n";}#new ではないが評価が10ポイント以上hot画像表示
else {print "<td>--</td>\n";}#さもなければ、newでも評価も低い--をセルに打つ --------------------- perl の if elsif else の使い方や真偽表は参考書/サイトで確認してください。 すえぽんさんは、これらperlとさらにjavascriptのif 文が、ルーチンによっては 使い分けてありますので、細心の注意が必要です。愚考をためしていただくことに なりますが、プログラミングの面白いところは、自分なりのアルゴリズムでコンピュー タが動作してくれることです。上の記述にかかわらず、いろいろ試してください。 そうなるという肯定だけでなくて、そうは100%ならない、という否定もデバグで は視野にいれて見直してください。
|
|