'Record:', 'page' => 'Page:', 'prev' => '<', 'next' => '>', 'first' => '|<', 'last' => '>|', 'theme' => '%wrapL% %records% %totalRow% %page% %nowPage%/%totalPage% %wrapR% %first% %prev% %linkPage% %next% %last%' /* * wrapL : wrapper left * wrapR : wrapper right * records: label for total records * totalRow: value of total rows * page : label for page * nowPage : current page * totalPage : total pages * first : 1st page link * last : last page link * linkPage: other pages link */ ); // Left, Right wrapper protected $wrap_L = null; protected $wrap_R = null; /* * SimplePage Construct * * @param: $rows / integer / total rows of record * @param: $perpage / integer / rows of per page * @param: $display / integer / pagination length * @param: $wrap / string / wrapper of pagination, eg: li * @param: $parameter / string / additional url querystring * @return: string */ public function __construct ($rows, $perpage, $display = 10, $wrap = null, $parameter = null) { $this->rows = intval($rows); $this->parameter = $parameter; $this->display = intval($display); $this->perpage = intval($perpage); $this->pages = ceil($this->rows / $this->perpage); $this->p = (!empty($_GET[C('VAR_PAGE')]) && is_numeric($_GET[C('VAR_PAGE')]) ) ? intval($_GET[C('VAR_PAGE')]) : 1; $this->wrap = $wrap; // make display to odd if (!$this->display & 1) { ++$this->dislpay; } // ensure current page is in range if (!empty($this->pages) && $this->p > $this->pages) { $this->p = $this->pages; } // wrapper if (null !== $this->wrap && !empty($this->wrap)) { $this->wrap_L = "<$wrap>"; $this->wrap_R = ""; } // variables assign $this->offset = floor($this->display / 2); $this->start = 1; $this->end = $this->pages; $this->firstRow = ($this->p - 1) * $this->perpage; $this->listRows = $this->perpage; } /* * setting configure * * @param: $name / string / field's name * @param: $value / string / field's value */ public function setConfig ($name, $value) { if (isset($this->config[$name])) { $this->config[$name] = $value; } } /* * return pagination html * * @return: string */ public function show () { if (0 === $this->rows) { return null; } // counting start and end position if ($this->pages > $this->display) { if ($this->p > $this->offset) { $this->start = $this->p - $this->offset; } else { $this->end = $this->display; } if (($this->p + $this->offset) < $this->pages) { if ($this->p > $this->offset) { $this->end = $this->p + $this->offset; } } else { $this->start = ($this->pages - $this->display) + 1; } } $p = C('VAR_PAGE'); $host = $_SERVER['REQUEST_URI']; $url = $host . (strpos($host, '?') ? '&' : '?') . $this->parameter; // if the last / is existed then replace it to empty if (strlen($host) === strrpos($host, '/') + 1) { $host = substr($host, 0, -1); } // html code container $html = array(); // parse url $parse = parse_url($url); if (isset($parse['query'])) { parse_str($parse['query'], $params); unset($params[$p]); $url = $parse['path'] . '?' . http_build_query($params); } // if URL_MODE is not 0 / reference from U function if (C('URL_MODEL')) { $depr = 2 === C('URL_PATHINFO_MODEL')? C('URL_PATHINFO_DEPR') : '/'; $str = $depr; foreach ($params as $var => $val) { $str .= $var . $depr . $val . $depr; } $str = substr($str, 0, -1); $url = str_replace($str, '', $host) . (strpos($host, ACTION_NAME) ? null : $depr . ACTION_NAME) . $str . C('URL_HTML_SUFFIX'); // build url rule if (false !== strpos($url, "/$p/")) { $format = preg_replace('/\/p\/\d+/', "/$p/%d", $url); } else { $format = "$url/$p/%d" . C('URL_HTML_SUFFIX'); } } else { $format = $url . (false === strpos($url, '?') ? '?' : '&') . "$p=%d"; } // build first page link $html['first'] = (1 < $this->p) ? $this->wrap_L . '' . $this->config['first'] . '' . $this->wrap_R : null; // build prev page link $html['prev'] = (1 < $this->p) ? $this->wrap_L . '' . $this->config['prev'] . '' . $this->wrap_R : null; // build pages link for ($i = $this->start; $i <= $this->end; ++$i) { $html['pages'] .= $this->wrap_L . ($i == $this->p ? "$i" : '$i") . $this->wrap_R; } // build next page link $html['next'] = $this->p < $this->pages ? $this->wrap_L . '' . $this->config['next'] . '' . $this->wrap_R : null; // build last page link $html['last'] = (0 < $this->p && $this->pages > $this->p) ? $this->wrap_L . '' . $this->config['last'] . '' . $this->wrap_R : null; // parse theme $result = str_replace( array('%wrapL%', '%wrapR%', '%records%', '%page%', '%nowPage%', '%totalRow%', '%totalPage%', '%first%', '%prev%', '%linkPage%', '%next%', '%last%'), array($this->wrap_L, $this->wrap_R, $this->config['records'], $this->config['page'], $this->p, $this->rows, $this->pages, $html['first'], $html['prev'], $html['pages'], $html['next'], $html['last']), $this->config['theme'] ); return $result; } } ?>