線上書籍

Home

[1011]XOOPS 2.5 模組開發

<?php if(!class_exists('PageBar')){ //分頁物件 class PageBar{ // 目前所在頁碼 var $current; // 所有的資料數量 (rows) var $total; // 每頁顯示幾筆資料 var $limit; // 目前在第幾層的頁數選項? var $pCurrent; // 總共分成幾頁? var $pTotal; // 每一層最多有幾個頁數選項可供選擇,如:3 = {[1][2][3]} var $pLimit; var $prev; var $next; var $prev_layer = ' '; var $next_layer = ' '; var $first; var $last; var $bottons = array(); // 要使用的 URL 頁數參數名? var $url_page = "g2p"; // 要使用的 URL 讀取時間參數名? var $url_loadtime = "loadtime"; // 會使用到的 URL 變數名,給 process_query() 過濾用的。 var $used_query = array(); // 目前頁數顏色 var $act_color = "#990000"; var $query_str; // 存放 URL 參數列 function PageBar($total, $limit, $page_limit){ $mydirname = basename( dirname( __FILE__ ) ) ; $this->prev = "<img src='".XOOPS_URL."/modules/{$mydirname}/images/1leftarrow.gif' alt='"._BP_BACK_PAGE."' align='absmiddle' hspace=3>"._BP_BACK_PAGE; $this->next = "<img src='".XOOPS_URL."/modules/{$mydirname}/images/1rightarrow.gif' alt='"._BP_NEXT_PAGE."' align='absmiddle' hspace=3>"._BP_NEXT_PAGE; $this->first = "<img src='".XOOPS_URL."/modules/{$mydirname}/images/2leftarrow.gif' alt='"._BP_FIRST_PAGE."' align='absmiddle' hspace=3>"._BP_FIRST_PAGE; $this->last = "<img src='".XOOPS_URL."/modules/{$mydirname}/images/2rightarrow.gif' alt='"._BP_LAST_PAGE."' align='absmiddle' hspace=3>"._BP_LAST_PAGE; $this->limit = $limit; $this->total = $total; $this->pLimit = $page_limit; } function init(){ $this->used_query = array($this->url_page, $this->url_loadtime); $this->query_str = $this->processQuery($this->used_query); $this->glue = ($this->query_str == "")?'?': '&'; $this->current = (isset($_GET["$this->url_page"]))? $_GET["$this->url_page"]: 1; $this->pTotal = ceil($this->total / $this->limit); $this->pCurrent = ceil($this->current / $this->pLimit); } //初始設定 function set($active_color = "none", $buttons = "none"){ if ($active_color != "none"){ $this->act_color = $active_color; } if ($buttons != "none"){ $this->buttons = $buttons; $this->prev = $this->buttons['prev']; $this->next = $this->buttons['next']; $this->prev_layer = $this->buttons['prev_layer']; $this->next_layer = $this->buttons['next_layer']; $this->first = $this->buttons['first']; $this->last = $this->buttons['last']; } } // 處理 URL 的參數,過濾會使用到的變數名稱 function processQuery($used_query){ // 將 URL 字串分離成二維陣列 $vars = explode("&", $_SERVER['QUERY_STRING']); for($i = 0; $i < count($vars); $i++){ $var[$i] = explode("=", $vars[$i]); } // 過濾要使用的 URL 變數名稱 for($i = 0; $i < count($var); $i++){ for($j = 0; $j < count($used_query); $j++){ if (isset($var[$i][0]) && $var[$i][0] == $used_query[$j]) $var[$i] = array(); } } // 合併變數名與變數值 for($i = 0; $i < count($var); $i++){ $vars[$i] = implode("=", $var[$i]); } // 合併為一完整的 URL 字串 $processed_query = ""; for($i = 0; $i < count($vars); $i++){ $glue = ($processed_query == "")?'?': '&'; // 開頭第一個是 '?' 其餘的才是 '&' if ($vars[$i] != "") $processed_query .= $glue.$vars[$i]; } return $processed_query; } // 製作 sql 的 query 字串 (LIMIT) function sqlQuery(){ $row_start = ($this->current * $this->limit) - $this->limit; $sql_query = " LIMIT {$row_start}, {$this->limit}"; return $sql_query; } // 製作 bar function makeBar($url_page = "none"){ if ($url_page != "none"){ $this->url_page = $url_page; } $this->init(); // 取得目前時間 $loadtime = '&loadtime='.time(); // 取得目前頁框(層)的第一個頁數啟始值,如 6 7 8 9 10 = 6 $i = ($this->pCurrent * $this->pLimit) - ($this->pLimit - 1); $bar_center = ""; while ($i <= $this->pTotal && $i <= ($this->pCurrent * $this->pLimit)){ if ($i == $this->current){ $bar_center = "{$bar_center}<font color='{$this->act_color}'>[{$i}]</font>"; }else{ $bar_center .= " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}={$i}{$loadtime}'' title='{$i}'>{$i}</a> "; } $i++; } $bar_center = $bar_center . ""; // 往前跳一頁 if ($this->current <= 1){ $bar_left = " {$this->prev} "; $bar_first = " {$this->first} "; } else{ $i = $this->current-1; $bar_left = " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}={$i}{$loadtime}' title='"._BP_BACK_PAGE."'>{$this->prev}</a> "; $bar_first = " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}=1{$loadtime}' title='"._BP_FIRST_PAGE."'>{$this->first}</a> "; } // 往後跳一頁 if ($this->current >= $this->pTotal){ $bar_right = " {$this->next} "; $bar_last = " {$this->last} "; } else{ $i = $this->current + 1; $bar_right = " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}={$i}{$loadtime}' title='"._BP_NEXT_PAGE."'>{$this->next}</a> "; $bar_last = " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}={$this->pTotal}{$loadtime}' title='"._BP_LAST_PAGE."'>{$this->last}</a> "; } // 往前跳一整個頁框(層) if (($this->current - $this->pLimit) < 1){ $bar_l = " {$this->prev_layer} "; } else{ $i = $this->current - $this->pLimit; $bar_l = " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}={$i}{$loadtime}' title='".sprintf($this->pLimit,_BP_GO_BACK_PAGE)."'>{$this->prev_layer}</a> "; } //往後跳一整個頁框(層) if (($this->current + $this->pLimit) > $this->pTotal){ $bar_r = " {$this->next_layer} "; } else{ $i = $this->current + $this->pLimit; $bar_r = " <a href='{$_SERVER['PHP_SELF']}{$this->query_str}{$this->glue}{$this->url_page}={$i}{$loadtime}' title='".sprintf($this->pLimit,_BP_GO_NEXT_PAGE)."'>{$this->next_layer}</a> "; } $page_bar['center'] = $bar_center; $page_bar['left'] = $bar_first . $bar_l . $bar_left; $page_bar['right'] = $bar_right . $bar_r . $bar_last; $page_bar['current'] = $this->current; $page_bar['total'] = $this->pTotal; $page_bar['sql'] = $this->sqlQuery(); return $page_bar; } } } ?>