- 締切済み
ランキングCGI"Ranking Link"にページ数のリンクを自動追加したい
The Roomで配布されているランキングCGI"Ranking Link"のカスタマイズで質問です。配布元:http://dream.lib.net/room/cgi/e_ranklink.html 使用バージョンはVer.1.70です。 ランキングに表示されるサイト数が多く、ランキングページが複数ページにわたる場合、「次のページ」というリンクが自動的に挿入されますが、これに加えてページ数のリンクを挿入するにはどうすればいいのでしょうか。 現状:「次のページ」のみ ↓ 希望:「1 2 3 次のページ>>」や「<<前のページ 1 2 3 次のページ>>」 ご存知の方教えていただけると助かります。よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Suzi
- ベストアンサー率38% (130/334)
例えば、一度に表示させるランキングの数を10、ランキング自体の配列が、@ranking とした場合。 $script = 'そのcgi'; $one_page = '10'; # 一度の表示させるランキングの数 if(!$this_page){ $this_page = 1 } $ranking_kazu = @rannking; # ランキングの総数 if( ($ranking_kazu % 10) == '0' ){ $page_kazu = $ranking_kazu / 10; #総数を10で割りきれたら }else{ $page_kazu = int($ranking_kazu / 10) + 1; #もし総数を10で割りきれなかったら }; # ページリンク ================================== for($i = 1, $i <= $page_kazu, $i++){ if($this_page == $i){ print "<b>$i</b>\n"; }else{ print "<a href=\"./$script?this_page=$i\">$i</a>\n"; } } とすると、1234567 とかになり、3をクリックした場合は、$this_pageに3が入り、21~30が表示されれば良いのですよね。 実際のページ表示は、foreach、for、whileでループ表示させていると思うので、この場合、21番目以上30番目以下を表示させれば良いと思います。 21番目は、( ($this_page - 1) * $one_page) + 1 30番めは、$this_page * $one_page ただ、1を押すと、($this_page - 1)が0になってエラーになるので、if($this_page == 1)で分岐させます。 既存のcgiスクリプトに追記して行くので、変数名や表示方法をそれに合わせたりとなかなか複雑だと思います。 パパっと記しているので、微妙に間違っていたら済みません。適当にアレンジしてみてください。
お礼
ありがとうございました。
補足
回答ありがとうございます。なんとなく考え方は分かりました。ただ、恥ずかしながらPerlの知識が乏しく、実際にどうアレンジして適用するのかまでわからないです。もしお時間がありましたら、さらにご教授いただけないでしょうか。 以下がRankingLinkのスクリプトです。いくつかあるスクリプトの中のランキングを実際に書き出しているtemplete.cgiの中の該当部分です。 以下のサイトのようにするのが理想です。 例)http://www.tanken.ne.jp/cate/pkoinu/rank/ ※ランキングページは上記サイトのようにhtmlファイルで”in2.html”、”in3.html”…となります。 ランキングの登録サイト数は $sitenum です。 ---以下スクリプト------------------------------------------------- sub r_topinsert{ #ランキング表示・ヘッダ~ランキング間HTML設定 my $a1; my $sitenum=$_[1]; if ($_[0]==0){ #INの場合 $a1 = <<EOD; <br> INの回数順で表\示しています。サイト数は$sitenumです。<br><br> <!--prevpage--> <!--nextpage--> </div><br> EOD #ここまで } return &replace($a1,$_[2],$_[3]); } #***************************************************************************** sub r_underinsert{ #ランキング表示・ランキング~フッタ間HTML設定 my $a1; my $sitenum=$_[1]; #ここから $a1 = <<EOD; <br> <div align=center><!--prevpage--> <!--nextpage--> </div> <br> EOD #ここまで return &replace($a1,$_[2],$_[3]); } #***************************************************************************** sub replace{ #置換ルーチン my ($a1,$a2)=($_[1],$_[2]); if ($htmlindi == 1){ $a1=~s/(\..*$)//g; $a2=~s/(\..*$)//g; $a1="./ranklink.cgi?action=htmlindi&url=$a1" if $a1 ne ""; $a2="./ranklink.cgi?action=htmlindi&url=$a2" if $a2 ne ""; } if ($a1 ne ""){ $_[0] =~ s/<!--nextpage-->/▼<a href="$a1">次のページ<\/a>/g; } if ($a2 ne ""){ $_[0] =~ s/<!--prevpage-->/▼<a href="$a2">前のページ<\/a>/g; } return $_[0]; } 1;