Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > ไม่ได้เข้ามาตอบนาน มีของมาฝาก PHP Pagination Class



 

ไม่ได้เข้ามาตอบนาน มีของมาฝาก PHP Pagination Class

 



Topic : 091155



โพสกระทู้ ( 11,835 )
บทความ ( 10 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์




Paginator.php
Code (PHP)
<?php
class Paginator{
	var $__all_records;
	var $__per_page = 20;
	var $__cur_page = 1;
	var $__record_start = 0;
	var $__page_count = 0;
	var $__page_range = 5;
	var $__page_param = "page";
	var $__query_strings = array();
	var $__config = array(
		"css_id" => "pagination",
		"css_pg" => "page",
		"css_on" => "on",
		"css_off" => "off",
		"first" => "first",
		"prev" => "prev",
		"last" => "last",
		"next" => "next",
	);
	var $__output = "";
	
	public function __construct($_all_records, $_per_page = 0, $_page_rangs = 0){
		$this->setAllRecords($_all_records);
		if($_per_page > 0){
			$this->setPerPage($_per_page);
		}
		if($_page_rangs > 0){
			$this->setPageRange($_page_rangs);
		}
		unset($_all_records);
		unset($_per_page);
		unset($_page_rangs);
	}
	
	private function setConfig($_config){
		if(is_array($_config) and count($_config) > 0)
		$this->__config = array_merge_recursive($this->__config, $_config);
		unset($_config);
	}
	
	private function getConfig($_config, $_default=false){
		return array_key_exists($_config, $this->__config)? $this->__config[$_config] : $_default;
		unset($_config);
	}
	
	private function getCurPage(){
		if(!empty($_SERVER['QUERY_STRING'])){
			$this->__query_strings = array_merge($this->__query_strings,  $_GET);
			if(array_key_exists($this->__page_param, $this->__query_strings)){
				$this->setCurPage($this->__query_strings[$this->__page_param]);
			}
		}else{
			$this->setCurPage($this->__cur_page);
		}
		unset($_strings);
		unset($_querys);
		unset($_params);
		unset($_querys);
		unset($_param);
		unset($_value);
	}
	
	private function calcPage(){
		$this->__record_start = ((int)$this->__cur_page - 1) * (int)$this->__all_records;
		$this->__page_count = ceil((int)$this->__all_records / (int)$this->__per_page);
	}
	
	public function getRecordStart(){
		return $this->__record_start;
	}
	
	public function setAllRecords($_all_records=0){
		if($_all_records == 0){
			if($this->setConfig("all_records") === false) throw new Exception('Error pagination, Please set all_records parameter.');
			$this->__all_records = $this->getConfig("all_records");
		}else{
			$this->__all_records = $_all_records;
		}
		unset($_all_records);
	}
	
	public function getAllRecords(){
		return $this->__all_records;
	}
	
	public function setPerPage($_per_page=0){
		if($_per_page == 0){
			$this->__per_page = $this->setConfig("per_page", 20);
		}else{
			$this->__per_page = $_per_page;
		}
		unset($_per_page);
	}
	
	public function getPerPage(){
		return $this->__per_page;
	}
	
	public function setCurPage($_cur_page = 0){
		if($_cur_page == 0){
			$this->__cur_page = $this->setConfig("cur_page",1);
		}else{
			$this->__cur_page = $_cur_page;
		}
		unset($_cur_page);
	}
	
	public function setPageRange($_page_range = 0){
		if($_page_range == 0){
			$this->__page_range = $this->setConfig("page_range",4);
		}else{
			$this->__page_range = $_page_range;
		}
		unset($_page_range);
	}
	
	public function setParamName($_param_name){
		$this->__page_param = $_param_name;
		unset($_page_range);
	}
	
	public function getPageCount(){
		return $this->__page_count;
	}
	
	public function build_query($_strings, $_prefix='', $_sep='', $_key=''){
		if(!function_exists('http_build_query')){ 
				$ret = array(); 
				foreach ((array)$data as $k => $v){ 
					if(is_int($k) && $_prefix != null){ 
						$k = urlencode($_prefix . $k); 
					} 
					if((!empty($_key)) || ($_key === 0))  $k = $_key.'['.urlencode($k).']'; 
					if(is_array($v) || is_object($v)){ 
						array_push($ret, $this->build_query($v, '', $_sep, $k)); 
					} else { 
						array_push($ret, $k.'='.urlencode($v)); 
					} 
				} 
				if(empty($_sep)) $_sep = ini_get('arg_separator.output'); 
				return implode($_separator, $ret); 
		}else{
			return http_build_query($_strings);
		}
		unset($_strings);
		unset($_prefix);
		unset($_sep);
		unset($_key);
	}
	
	public function setHttpQuery($_offset, $_value){
		$this->__query_strings[$_offset] = $_value;
		unset($_offset);
		unset($_value);
	}
	
	public function setHttpQueryArray($_params){
		$this->__query_strings = array_merge($this->__query_strings, $_params);
		unset($_params);
	}
	
	private function buildHttpQuery($_page){
		$this->__query_strings[$this->__page_param] = $_page;
		unset($_page);
		return '?' . $this->build_query($this->__query_strings);
	}
	
	public function display(){
		$this->getCurPage();
		$this->calcPage();
		$__loop_start = $this->__cur_page - $this->__page_range;
		$__loop_stop = $this->__cur_page + $this->__page_range;
		
		$__loop_start = ($__loop_start <= 0)? 1 : $__loop_start;
		$__loop_stop = ($__loop_stop >= $this->__page_count)? $this->__page_count : $__loop_stop;
		
		$__class_on = $this->getConfig("css_on");
		$__class_off = $this->getConfig("css_off");

		if($this->__cur_page>1){
			if($this->__cur_page > 2){
				$this->__output .= '<li class="' . $__class_off . '">';
				$this->__output .= '<a href="' . $this->buildHttpQuery(1) . '">' . $this->getConfig("first") . '</a>';
				$this->__output .= '</li>';
			}
			$this->__output .= '<li class="' . $__class_off . '">';
			$this->__output .= '<a href="' . $this->buildHttpQuery(($this->__cur_page-1)) . '">' . $this->getConfig("prev") . '</a>';
			$this->__output .= '</li>';
		}
		
		for($i = $__loop_start; $i <= $__loop_stop; $i++){
			if($i == $this->__cur_page){
				$this->__output .= '<li class="' . $__class_on . '">' . $i . '</li>';
			}else{
				$this->__output .= '<li class="' . $__class_off . '">';
				$this->__output .= '<a href="' . $this->buildHttpQuery($i) . '">' . $i . '</a>';
				$this->__output .= '</li>';
			}
		}
		
		if($this->__cur_page < $this->__page_count){
			$this->__output .= '<li class="' . $__class_off . '">';
			$this->__output .= '<a href="' . $this->buildHttpQuery(($this->__cur_page+1)) . '">' . $this->getConfig("next") . '</a>';
			$this->__output .= '</li>';
			
			if(($this->__cur_page+1) < $this->__page_count){
				$this->__output .= '<li class="' . $__class_off . '">';
				$this->__output .= '<a href="' . $this->buildHttpQuery($this->__page_count) . '">' . $this->getConfig("last") . '</a>';
				$this->__output .= '</li>';
			}
		}
		
		if($__loop_start > $__loop_stop){
			$this->__output .= '<li class="' . $__class_off . '">';
			$this->__output .= '<a href="' . $this->buildHttpQuery($this->__cur_page) . '"> ' . $this->__cur_page . ' </a>';
			$this->__output .= '</li>';
		}
		
		if(!empty($this->__output)){
			$this->__output = '<div id="' . $this->getConfig("css_id") . '"><ol class="float-left">' . $this->__output . '</ol>';
			$this->__output .= '<div class="' . $this->getConfig("css_pg") . '">' . $this->__cur_page . ' of ' . $this->__page_count . '</div>';
			$this->__output .= '</div>';
		}
		unset($__loop_start);
		unset($__loop_stop);
		unset($__link_target);
		unset($__class_on);
		unset($__class_off);
		echo $this->__output;
	}
}
?>


style.css
Code
#pagination{ display:inline-block; padding:8px 0px 0px 0px; width:100%; } #pagination ol{ margin:0px; padding:0px; } #pagination li.off{ float:left; list-style:none; text-align:center; font:12px Tahoma, Geneva, sans-serif; color:#f00; background:#fff; display:inline-block; margin-left:2px; padding:2px 5px; cursor:pointer; border:solid 1px #aaa; } #pagination li.off a{ color:#f00; text-decoration:none; } #pagination li.on{ float:left; list-style:none; text-align:center; font:bold 12px Tahoma, Geneva, sans-serif; color:#f00; background:#fff; display:inline-block; margin-left:2px; padding:2px 5px; border:solid 1px #aaa; } #pagination li.on a{ color:#2b57a2; text-decoration:none; } #pagination div.page{ float:right; font:12px Tahoma, Geneva, sans-serif; }


index.php (using)
Code (PHP)
<link href="style.css" rel="stylesheet" type="text/css">
<?php
require_once("Paginator.php");
$all_records = 200;
$per_pages = 20;
$Pg = new Paginator($all_records, $per_pages);

//กรณีอยากเพิ่ม parameter ในโค๊ด
$keyword = isset($_REQUEST['keyword'])?$_REQUEST['keyword']:'';
$Pg->setHttpQueryArray(array('keyword'=>$keyword));

//อยากโชว์กี่หน้า
$Pg->setPageRange(10);

$Pg->display();
?>


ข้อดีคือมันจะดักจับ การส่งข้อมูบแบบ GET ให้อัตโนมัติ แต่ถ้าจะส่งไปเองก็ set ได้

ใครมีความคิดเห็นให้ปรับปรุงตรงไหนก็บอกนะครับ เขียนไว้นานละ



Tag : PHP, HTML/CSS







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-02-20 10:19:07 By : ikikkok View : 1320 Reply : 10
 

 

No. 1



โพสกระทู้ ( 4,169 )
บทความ ( 7 )

Hall of Fame 2012

สถานะออฟไลน์


ขอบคุณครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 10:27:37 By : Ex-[S]i[L]e[N]t
 


 

No. 2



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

จัดไปครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 10:34:25 By : mr.win
 

 

No. 3



โพสกระทู้ ( 3,156 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


ขอบคุณมากครับ +1 เลยครับ อิอิ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 11:01:40 By : sakuraei
 


 

No. 4



โพสกระทู้ ( 342 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ต้องบอกว่าดีครับที่แบ่งปัน
นับถือในน้ำใจครับ

ผมดูคร่าวๆ โดยรวมแล้ว
มีหลายจุดครับ ที่ต้องปรับปรุง โดยเฉพาะที่เกี่ยวกับ page การตั้งค่า การคำนวณ และการตรวจจับต่างๆ ยังคงไม่แม่นเท่าไหร่
setConfig() ก็เหมือนจะไม่มีประโยชน์เท่าไหร่ ควรปรับปรุงครับ

ลักษณะของคลาสนี้ จะคล้ายการลากเส้นครับ
ลากเส้นให้วนไปวนมายังจุดต่างๆ
บางจุด ไม่มีประโยชน์ที่จะต้องลากเส้นผ่านครับ


ต่อไปนี้เป็นคำแนะนำเฉยๆ นะครับ จะตั้งแบบไหนมันก็ไม่ผิดหรอกครับ ขึ้นกับความสะดวก

เรื่องเกี่ยวกับ naming
จริงๆแล้ว ก็ไม่ควรยึดกฎเกณฑ์อะไรมาก ถูกแล้วครับ
แต่ __ ควรใช้กับสิ่งที่มันพิเศษ ครับ
และ _ ควรใช้กับสิ่งที่เป้น private
ส่วน public ก็ตั้งธรรมดา ขึ้นต้นด้วยตัวอักษรเฉยๆ ก็โอเคแล้วครับ

เรื่อง visibility
ในโค้ดประกาศ public ชัดเจน ควรประกาศ public แทน var หน้า properties ครับ (ให้มันเหมือนกัน จะง่ายต่อการสังเกตครับ)
หรือเอา public ออกไปเลยก็ได้ครับ อันอื่นๆที่มันไม่ public ก็ใส่ไว้เป็นปกติ


แก้ไขนิดหน่อยก็โอเคแล้วล่ะครับ
ที่ต้องดูเรื่อง page เพราะมันเป็น pagination ครับ
เงื่อนไขบางตัวในโค้ด ทำให้บางอย่างหายไปด้วย ซึ่งมันควรจะมีเหลือไว้ โดย common sense ครับ เช่น first - last
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 11:22:24 By : triplea
 


 

No. 5



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

น้อง Plakrim หายไปนาน แอบไป ซุ่มงาน สงสัยรวยแล้วมั่ง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 11:28:31 By : mr.win
 


 

No. 6



โพสกระทู้ ( 313 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


พี่Plakrim หายไป แต่ยังไม่ลืมกันก็โอเช
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 11:41:55 By : namebom
 


 

No. 7



โพสกระทู้ ( 11,835 )
บทความ ( 10 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : triplea เมื่อวันที่ 2013-02-20 11:22:24
รายละเอียดของการตอบ ::
ขอบคุณมากครับที่แนะนำ ใครเอาไปใช้ก็แก้ไขได้ตามสบายเลยนะครับ ^__^

ผมเขียนไว้นานแล้ว ตอนที่หันมาใช้ class พอดีว่าทฤษฎีไม่เก่ง อาศัยมั่วไปมั่วมา อ่านโน่นอ่านนี่ ข้ามไปข้ามมา ก๊อปแปะบ้างไรบ้าง เรื่อง naming ก็ใส่ไปตามอารมณ์อะครับ พอดีว่าทำงานคนเดียวจนชิน ไม่ได้สนใจมาตรฐาน มอก กพอ สลน สักเท่าไหร่ ^__^



ประวัติการแก้ไข
2013-02-20 12:47:08
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 12:45:11 By : ikikkok
 


 

No. 8



โพสกระทู้ ( 3,750 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Facebook

ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-02-20 13:45:59 By : Dragons_first
 


 

No. 9



โพสกระทู้ ( 342 )
บทความ ( 2 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ลองหัดใช้ ถ้าดึงข้อมูลจาก database ดึงแล้วใส่อย่างไรครับ ขอบคุณครับ
<link href="style.css" rel="stylesheet" type="text/css">
<?php
require_once("Paginator.php");
$all_records = 200;
$per_pages = 20;
$Pg = new Paginator($all_records, $per_pages);

//กรณีอยากเพิ่ม parameter ในโค๊ด
$keyword = isset($_REQUEST['keyword'])?$_REQUEST['keyword']:'';
$Pg->setHttpQueryArray(array('keyword'=>$keyword));

//อยากโชว์กี่หน้า
$Pg->setPageRange(10);

$Pg->display();
?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-14 18:07:14 By : weaned
 


 

No. 10



โพสกระทู้ ( 11,835 )
บทความ ( 10 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


$all_records ผมรับค่านี้มาจากการ query ข้อมูลว่ามีกี่ record ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-15 01:16:24 By : ikikkok
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ไม่ได้เข้ามาตอบนาน มีของมาฝาก PHP Pagination Class
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่