conn = $connection; $this->sql = $sql; $this->rows_per_page = (int)$rows_per_page; if(intval($links_per_page) > 0) { $this->links_per_page = (int)$links_per_page; } else { $this->links_per_page = 5; } $this->append = $append; $this->php_self = $current_page . $append ."&"; if(isset($_GET['page'])) { $this->page = intval($_GET['page']); } } /** * Executes the SQL query and initializes internal variables * * @access public * @return resource */ function paginate() { global $logger; //Check for valid mysql connection if(!$this->conn || !is_object($this->conn)) { if($this->debug) $logger->addInfo("Connection missing"); return false; } //Find total number of rows $all_rs = $this->conn->query($this->sql); if(!$all_rs) { if($this->debug) $logger->addInfo("SQL query failed. Check your query.

Error Returned: ".$this->conn->error); return false; } $this->total_rows = $all_rs->numRows(); // $this->conn->close(); //Max number of pages $this->max_pages = ceil($this->total_rows/$this->rows_per_page); if($this->links_per_page > $this->max_pages) { $this->links_per_page = $this->max_pages; } //Check the page value just in case someone is trying to input an aribitrary value if($this->page > $this->max_pages || $this->page <= 0) { $this->page = 1; } //Calculate Offset $this->offset = $this->rows_per_page * ($this->page-1); //Fetch the required result set if(_DBTYPE_ == 'mysqli') { $this->sql .= " LIMIT {$this->offset}, {$this->rows_per_page}"; } elseif(_DBTYPE_ == 'postgre') { $this->sql .= " LIMIT {$this->rows_per_page} OFFSET {$this->offset}"; } $rs = $this->conn->query($this->sql); if(!$rs) { if($this->debug) $logger->addInfo("Pagination query failed. Check your query.

Error Returned: ".$this->conn->error); return false; } return $rs; } /** * Display the link to the first page * * @access public * @param string $tag Text string to be displayed as the link. Defaults to 'First' * @return string */ function renderFirst($tag='Awal') { if($this->page == 1) { return ''.$tag.''; } else { return ''.$tag.''; } } /** * Display the link to the last page * * @access public * @param string $tag Text string to be displayed as the link. Defaults to 'Last' * @return string */ function renderLast($tag='Akhir') { if($this->page == $this->max_pages) { return ''.$tag.''; } else { return ''.$tag.''; } } /** * Display the next link * * @access public * @param string $tag Text string to be displayed as the link. Defaults to '>>' * @return string */ function renderNext($tag=' Lanjut ') { if($this->page < $this->max_pages) { return ''.$tag.''; } else { return ''.$tag.''; } } /** * Display the previous link * * @access public * @param string $tag Text string to be displayed as the link. Defaults to '<<' * @return string */ function renderPrev($tag=' Kembali ') { if($this->page > 1) { return ''.$tag.''; } else { return ''.$tag.''; } } /** * Display the page links * * @access public * @return string */ function renderNav() { $batch = @ceil($this->page/$this->links_per_page); $end = $batch * $this->links_per_page; if($end == $this->page) { //$end = $end + $this->links_per_page - 1; //$end = $end + ceil($this->links_per_page/2); } if($end > $this->max_pages) { $end = $this->max_pages; } $start = $end - $this->links_per_page + 1; $links = ''; for( $i=$start ; $i <= $end ; $i++) { if($i == $this->page) { $links .= '
  • '.$i.'
  • '; } else { $links .= '
  • '.$i.'
  • '; } } return $links; } /** * Display full pagination navigation * * @access public * @return string */ function renderFullNav() { return ''; } /** * Set debug mode * * @access public * @param bool $debug Set to TRUE to enable debug messages * @return void */ function setDebug($debug) { $this->debug = $debug; } } ?>