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 .= '