スタンプ帳(Ver.0.4)キリ番カウンタ追加方法
サンプルに設置しているスタンプ帳用カウンタの追加方法を説明します。
スタンプ帳にお名前を登録してくださった方のアクセスだけをカウントしますが、1時間以内に何度アクセスしてもカウントは増えません。
指定した値になるとスタンプを表示させることができます。
簡単な改造で可能です。ただし、アクセス記録一覧を表示させたり、修正したりするのは別スクリプトになります。

まず、改造にあたっての注意ですが、

  • 現在配布しているものについて、説明しています。
    スクリプトstamps.cgiの最初の方に最終更新日時を示しています。その最終更新日時が2007/6/15であることを確認してください。
    また、ご自身で手を加えている場合は、説明の行数等が違ってきますので、それをふまえて説明をお読み下さい。
  • 記述している行数は論理改行です。
    テキストエディタでは、行幅が決まっていると自動的に折り返され、それも1行と数える設定になっているものがありますが、それでは人によって行数が違って説明しにくい。 ここでは論理改行、つまり改行マークがあるところまでを1行と数えた行数で説明します。
    テキストエディタの環境設定で、論理改行で行数表示する設定があると思いますので、行数表示を論理改行でするようにしてください。
    私の使っている秀丸エディタなら、メニューバーの「その他」→「ファイルタイプ別の設定」→「行番号の計算方法」で、「エディタ的(改行だけを数える)」にチェックです。
  • 必ず、手を加えない状態で動作していることを確認してから、改造してください。
    動作確認せずにいきなり改造した場合、エラーになっても原因がわからなくなります。そうなると設置のアドバイスもできません。
    必ず一度はサーバにアップして動作確認をしてから改造してください。
    また、お使いのパソコン上でCGIが動くよう設定し、ローカルでテストしてからサーバへアップされることをお勧めします。
    あくまでご自分の責任で行ってください。
    "一つないだけでエラーになりますので、タイプミスに注意して、慎重に行ってください。コピー&ペーストするといいです。
  • 説明をご覧になるときのヒント。
    画面幅の関係で折り返して表示されていますが、改行マークのあるところが改行の目印です。
    スクリプトを抜粋して表示します。
    手を加える前

    手を加えた後
    のようにして表示しますので、参考にしてください。
  • では解説していきます。(行数が変わらないように、スクリプトの下から順に、作業を説明します。)
    まず、stamps.cgiの578〜583行目を、次のように変更します。

    <div class="homestyle">改行マーク
    <li><a href="$settei::home">HOME</a>改行マーク
    <li><a href="$settei::cgi">$settei::title</a>改行マーク
    <li><a href="$settei::cgi?mode=ranking">参加者一覧</a>改行マーク
    </div> 改行マーク
    <div class="titlestyle"> &nbsp; $title &nbsp;</div>改行マーク

    <div class="homestyle">改行マーク
    <li><a href="$settei::home">HOME</a>改行マーク
    <li><a href="$settei::cgi">$settei::title</a>改行マーク
    <li>$no 改行マーク
    <li><a href="$settei::cgi?mode=ranking">参加者一覧</a>改行マーク
    </div> 改行マーク
    <div class="titlestyle"> &nbsp; $title &nbsp; $kiriban </div>改行マーク

    この$noの部分がカウントで、$kiribanの部分が、キリ番のときにスタンプが表示される部分です。
    578〜583行目の範囲なら、$kiribanや$noの場所が多少違っても、支障はありません。

    次に、stamps.cgiの569行目と570行目の間に、次のように25行を挿入します。
    (569〜570行目部分を表示します。)

    	my ($title) = @_;改行マーク
    	&common::html_header;改行マーク
    

    	my ($title) = @_; 改行マーク
    	my @datas = &common::open_file($countfile,"カウントファイル",$settei::lockdir); 改行マーク
    	my $no = shift(@datas); 改行マーク
    	my $kiriban; 改行マーク
    	my @newdatas;   	my $flag=0; 改行マーク
    	if ($c_name){ 改行マーク
    		foreach (@datas){ 改行マーク
    			chomp; 改行マーク
    			my ($n,$name,$time) = split(/\t/,$_); 改行マーク
    			($^T-$time>60*60*24*7) && next; 改行マーク
    			if($^T-$time<60*60 && $c_name eq $name){ 改行マーク
    				$flag=1; 改行マーク
    				$no = $n; 改行マーク
    				last; 改行マーク
    			} 改行マーク
    			push(@newdatas,"$_\n"); 改行マーク
    		} 改行マーク
    		unless($flag){  改行マーク
    			$no++;  改行マーク
    			push(@newdatas,"$no\t$c_name\t$^T\n");  改行マーク
    			unshift(@newdatas,"$no\n");  改行マーク
    			&common::write_file(\@newdatas,$countfile,"カウントファイル$countfile",$settei::lockdir); 改行マーク
    		} 改行マーク
    		($no%100==0) && ($kiriban="<a href=\"$settei::cgi?stamp=スタンプのコード\"><img src=\"スタンプの画像\" alt=\"$no記念\" align=\"right\"></a><br>\n");改行マーク
    	}改行マーク
    	else {$no="";} 改行マーク
    	&common::html_header; 改行マーク
    

    7は、何日前までの記録を残しておくのかを示しています。
    この場合は7日前(24×7時間前)までの記録を残すということ。必要に応じて変更してください。半角数字で記述します。

    ($no%100==0)の部分は、100で割り切れる数、つまり下二桁が00のときをキリ番とする、という意味です。
    この部分の記述で、キリ番のカウントを設定します。例をいくつか書いておきます。

  • 50,100,150,・・・のように、50ごとにキリ番を設定する。
    $no%50==0
  • 下3桁が500のときをキリ番とする。
    $no%1000==500
  • 自分の設定した番号をキリ番とする。
    grep($no==$_,(1111,1234,2222,2525,3333,4141))
    この場合は、1111,1234,2222,2525,3333,4141の各数字がキリ番です。
    番号部分は、,で区切ることでいくつでも設定できます。半角数字で記述してください。
  • 下二桁が00+自分の設定した番号をキリ番とする。
    $no%100==0 || grep($no==$_,(1111,1234,2222,2525,3333,4141))
    これは必ず(   )に入れ、(他のも(   )に入れるのですが、これは特に、忘れては動作がおかしくなるので)
    ($no%100==0 || grep($no==$_,(・,・,・,・))) && ($kiriban="<a href=・・・>\n");
    という感じにすること。・・・は省略部分です。(   )の数に注意してください。
  • スタンプのコード、スタンプの画像とある部分には、ご自分のスタンプ帳で設定しているスタンプのコードと、それに対応するスタンプの画像ファイル名を記入してください。
    キリ番にはそのスタンプが表示されます。

    それから、stamps.cgiの15行目の後に、次の1行を挿入してください。

    my $countfile = "count.dat";    #カウントファイル 改行マーク

    最後に、count.datという空ファイルを作成してください。
    これでカウンタが追加できました。サーバにstamps.cgiとcount.datをアップロードして、stamps.cgiは上書きしてください。

    アクセス記録を表示するCGIは別スクリプトになりますので、また賞品として別にアップします。

    窓を閉じる

    期間限定スタンプ帳CGI Ver.0.4