source: branches/feature-module-update/data/class/SC_PageNavi.php @ 15879

Revision 15879, 4.7 KB checked in by nanasess, 19 years ago (diff)

$_SERVERPHP_SELF? をサニタイズ

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8/* ※使用条件※
9    ・formタグに以下を追加する。
10        <input type="hidden" name="pageno" value="<!--{$tpl_pageno}-->">
11    ・ソースの最初に以下を記述する。
12        $objPage->tpl_pageno = $_POST['pageno'];
13    ・$func_nameに指定するJavaScriptの例
14        // ページナビで使用する
15        function fnNaviPage(pageno) {
16            document.form1['pageno'].value = pageno;
17            document.form1.submit();
18        }
19*/
20class SC_PageNavi {
21    var $now_page;      // 現在のページ番号
22    var $max_page;      // 最終のページ番号
23    var $start_row;     // 開始レコード
24    var $strnavi;       // ページ送り文字列
25    var $arrPagenavi = array(); // ページ
26
27    // コンストラクタ
28    function SC_PageNavi($now_page, $all_row, $page_row, $func_name, $navi_max = NAVI_PMAX) {
29        $this->arrPagenavi['mode'] = 'search';
30        $ps = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES);
31
32        //現在ページ($now_page)が正しい数値でない場合
33        if (!eregi("^[[:digit:]]+$", $now_page) || $now_page < 1 || $now_page == "") {
34            $this->now_page = 1;
35        } else {
36            $this->now_page = $now_page;
37        }
38        $this->arrPagenavi['now_page'] = $this->now_page;
39
40        // 最終ページの計算
41        $this->max_page = ceil($all_row/$page_row);
42
43        // 最終ページよりも現在ページが大きい場合は、最初に戻す。
44        if($this->max_page < $this->now_page) {
45            $this->now_page = 1;
46        }
47
48        $this->start_row = ($this->now_page - 1) * $page_row;
49
50        // 開始行が不正な場合
51        if (!($this->start_row < $all_row && $this->start_row >= 0)) {
52            $this->start_row = 0;
53        }
54
55        if($all_row > 1) {
56
57            //「前へ」「次へ」の設定
58            $before = "";
59            $next = "";
60            // FIXME ちゃんとサニタイズしよう
61            if ($this->now_page > 1) {
62                $before="<a href=\"". $ps . "\" onclick=\"$func_name('" . (($this->now_page) - 1) . "'); return false;\"><<前へ</a> ";
63                $this->arrPagenavi['before'] = ($this->now_page) - 1;
64            }else{
65                $this->arrPagenavi['before'] = $this->now_page;
66            }
67
68            if ($this->now_page < $this->max_page) {
69                $next="<a href=\"". $ps . "\" onclick=\"$func_name('" . (($this->now_page) + 1) ."'); return false;\">次へ>></a> ";
70                $this->arrPagenavi['next'] = ($this->now_page) + 1;
71            }else{
72                $this->arrPagenavi['next'] = $this->now_page;
73            }
74
75            // 表示する最大ナビ数を決める。
76            if($navi_max == "" || $navi_max > $this->max_page) {
77                // 制限ナビ数の指定がない。ページ最大数が制限ナビ数より少ない。
78                $disp_max = $this->max_page;
79            } else {
80                // 現在のページ+制限ナビ数が表示される。
81                $disp_max = $this->now_page + $navi_max - 1;
82                // ページ最大数を超えている場合は、ページ最大数に合わせる。
83                if($disp_max > $this->max_page) {
84                    $disp_max = $this->max_page;
85                }
86            }
87
88            // 表示する最小ナビ数を決める。
89            if($navi_max == "" || $navi_max > $this->now_page) {
90                // 制限ナビ数の指定がない。現在ページ番号が制限ナビ数より少ない。
91                $disp_min = 1;
92            } else {
93                // 現在のページ-制限ナビ数が表示される。
94                $disp_min = $this->now_page - $navi_max + 1;
95            }
96
97            $this->arrPagenavi['arrPageno'] = array();
98            for ($i=$disp_min; $i <= $disp_max; $i++) {
99                if($i != $disp_max) {
100                    $sep = " | ";
101                } else {
102                    $sep = "";
103                }
104
105                $page_number = "";
106                if ($i == $this->now_page) {
107                    $page_number .= "<strong>$i</strong> ";
108                } else {
109                    $page_number.="<a href=\"".  $ps . "\" onclick=\"$func_name('$i'); return false;\">$i</a> ";
110                }
111
112                $page_number.=$sep;
113
114                $this->arrPagenavi['arrPageno'][$i] = $i;
115            }
116
117            if ($before || $next) {
118                $this->strnavi = $before .$page_number .$next;
119            }
120        }else{
121            $this->arrPagenavi['arrPageno'][0] = 1;
122            $this->arrPagenavi['before'] = 1;
123            $this->arrPagenavi['next'] = 1;
124        }
125    }
126}
127
128?>
Note: See TracBrowser for help on using the repository browser.