จาก CodeIniter User Guide : pagination class
วิธีการที่ง่ายที่สุดคือสร้าง query ไว้ใน control เรย(ไม่ต้องสร้าง model –เอาไว้ทดลองนะจ๊ะของจริงควรจะสร้าง model)
โดยต้องโหลด library ที่สำคัญมาใช้ก่อนคือ
ต่อไปสร้าง function page() ไว้สำหรับสร้าง pagination และข้อมูล
function page($page=0)
{
// config และเรียกใช้ pagination
$config['base_url'] = base_url().”Welcome/page/”;
$config['total_rows'] = $this->db->count_all(‘blocks’);
$config['per_page'] = ’5′;
$this->pagination->initialize($config);
// query โดยใช้ get(table, result_per_page, offset) ซึ่งจะเท่ากัย SELECT * FROM table LIMIT offset, result_per_page
$query = $this->db->get(‘blocks’, $config['per_page'], $page);
$data['block']=$query->result_array();
// โหลด views
$this->load->view(‘welcome_message’, $data);
}
ทีนี้ก็เอา function นี้ไปใช้งานได้ตามสะดวก
2 Responses
DominixZ
18|Feb|2008 1ผมว่า function มันความหมายแปลกๆ แปลกๆไปนิดนะครับ ตรง
$query = $this->db->get(’blocks’, $config[’per_page’], $page);
ผมว่าน่าจะเป็นแบบนี้นะครับ
$query = $this->db->get(’blocks’, $config[’per_page’], $page*$config[’per_page’]);
เพราะคำสั่ง get มันเทียบเท่ากับ LIMIT ดังนั้นถ้าหน้าแรก (page=0) ก็จะได้เป็น LIMIT 0,5 แบบนี้ก็คือเอา record 5 อันแรก แต่ถ้าสมมุติผมเรียก function ด้วย page(1) ถ้าเป็น code ด้านบนก็จะเป็น LIMIT 1,5 ซึ่งจะทำการ ไม่โชว์อันดับ 1 จะเป็นการโชว์อันดับ 2-6 แทน แต่ในความหมาย page มันน่าจะโชว์เป็น record 6-10 เพราะหน้าแรกโชว์ 1-5 ดังนั้นหน้า 2 ก็น่าจะ 6-10 ผมเข้าใจถูกไหมครับเนี้ย
few
18|Feb|2008 2อย่างที่คุณ DominixZ เป็นวิธีการทำ LIMIT ที่ถูกแล้วหละครับ
แต่จะสับสนนิดหนึ่งตรง page ที่เข้าใจว่าเป็น 1,2,3,…,n
แต่ใน $page ที่ CI ให้มา มันแทนด้วย $page*$config[’per_page’] แล้วครับ
หากดูตัวอย่างใน http://www.postmafia.com/ ซึ่งแบ่งการแสดงไว้หน้าละ 20 ข่าว
ค่า page ก็จะเป็น 20,40,60,..n
เดี๋ยวแจ้งคุณ lumin เจ้าของบทความ มาอัพเดทสักหน่อยดีกว่า อิอิ
Leave a reply