ถึงช่วงเวลาของการแบ่งหน้าแล้ว เมื่อเราเขียนบทความเยอะขึ้นๆ มันก็จะเป็นแถวยาวลงมา เห็นแล้วอาจถอดใจ ด้วยความขี้เกียจอ่าน เพราะเห็นว่าหัวข้อมันเยอะ อย่ากระนั้นเลย เราก็มาแบ่งหัวข้อหน้าละกี่หัวข้อ ก็ว่ากันไป อาจจะทำให้บทความของเราดูน่าค้นหามากขึ้นก็เป็นได้ หรือ ไม่ทำให้เพจของเราสูงมากเกินไป....
SQL สร้างตารางฐานข้อมูลสำหรับทดสอบ
CREATE TABLE `myweb`.`article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) );
บทความนี้ มีไฟล์ด้วยกัน สองไฟล์ ไฟล์แรก pagination.php ไฟล์ที่สอง pagination.js
ไฟล์ pagination.php แบ่งเป็น 3 ช่วง
1. CSS
2. Code สำหรับการแบ่งหน้า ส่วนนี้ท่านสามารถที่จะ copy เก็บไว้ได้เลยเอาไปแบ่งหน้า ตรงหน้าใหนก็ได้
3. Code สำหรับการดึงข้อมูลจากฐานข้อมูล ขึ้นมาแสดง
มาเริ่มกันที่ css ก่อน คงจะไม่ขอพูดอะไรมากสำหรับบทความนี้นะครับ
CSS Code
ไฟล์ pagination.php
div.pagination {
padding: 3px;
margin: 3px;
}
div.pagination a {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #AAAADD;
text-decoration: none; /* no underline */
color: #000099;
}
div.pagination a:hover, div.pagination a:active {
border: 1px solid #000099;
color: #000;
}
div.pagination span.current {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #000099;
font-weight: bold;
background-color: #000099;
color: #FFF;
}
div.pagination span.disabled {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #EEE;
color: #DDD;
}
ทีนี้ก็มาถึงส่วนที่2 เป็น Code ในส่วนของการแบ่งหน้า ส่วนนี้ผมใส่ onclick='pagination()เอาไว้
ถ้าเปลียนเป็น link ไปหาไฟล์ php เพื่อดึงข้อมูลออกมาแสดงโดยตรง ก็จะได้ code แบ่งหน้าแบบไฟล์
php ธรรมดาโดยทั่วไปไฟล์หนึ่งนั่นเอง แต่ไฟล์นี้ในบทความนี้ผมใช้ jQuery
ไฟล์ pagination.php
include('config.php');//นำเข้าไฟล์เชื่อมต่อฐานข้อมูล
$tbl_name="article";//ตัวแปร ตารางข้อมูลที่ต้องการนำมาแสดง
$limit = 4; //กำหนดว่าต้องการให้แสดงกี่หัวข้อต่อหนึ่งหน้า
$adjacents = 3;//จำเป็นต้องกำหนด
$page = $_POST['page']; //รับ ตัวแปร page เข้ามาแบบ post
if($page)
$start = ($page - 1) * $limit; //กำหนดตัวแปร start
else
$start = 0;
$query = "SELECT COUNT(*) as num FROM $tbl_name";//นับแถวในตาราง
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];
if ($page == 0) $page = 1;
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total_pages/$limit);
$lpm1 = $lastpage - 1;
$pagination = "";
if($lastpage > 1)
{
$pagination .= "<div class=\"pagination\">";
//previous button
if ($page > 1)
$pagination.= "<a href=# onclick='pagination($prev)'>« previous</a>";
else
$pagination.= "<span class=\"disabled\">« previous</span>";
//pages
if ($lastpage < 7 + ($adjacents * 2))
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=# onclick='pagination($counter)'>$counter</a>";
}
}
elseif($lastpage > 5 + ($adjacents * 2))
{
if($page < 1 + ($adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=# onclick='pagination($counter)'>$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=# onclick='pagination($lpm1)'>$lpm1</a>";
$pagination.= "<a href=# onclick='pagination($lastpage)'>$lastpage</a>";
}
//in middle; hide some front and some back
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "<a href=# onclick='pagination(1)'>1</a>";
$pagination.= "<a href=# onclick='pagination(2)'>2</a>";
$pagination.= "...";
for ($counter = $page - $adjacents; $counter <= $page + $adjacents;
$counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=# onclick='pagination($counter)'>$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=# onclick='pagination($lpm1)'>$lpm1</a>";
$pagination.= "<a href=# onclick='pagination($lastpage)'>$lastpage</a>";
}
//close to end; only hide early pages
else
{
$pagination.= "<a href=# onclick='pagination(1)'>1</a>";
$pagination.= "<a href=# onclick='pagination(2)'>2</a>";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage;
$counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=# onclick='pagination($counter)'>$counter</a>";
}
}
}
//next button
if ($page < $counter - 1)
$pagination.= "<a href=# onclick='pagination($next)'>next »</a>";
else
$pagination.= "<span class=\"disabled\">next »</span>";
$pagination.= "</div>\n";
}
ต่อไปก็เป็น Code สำหรับการดึงข้อมูลจากฐานข้อมูล ขึ้นมาแสดง
ไฟล์ pagination.php
<div id="loading"></div> tagนี้เอาไว้โชว์ gif animation
<div id="showtitle"> tagนี้โชว์ข้อมูล
<ul>
<?php
/* Get data. */
$sql = "SELECT * FROM article LIMIT $start, $limit"; //เริ่มและจำกัดด้วย limit
$result = mysql_query($sql);
while( $row = mysql_fetch_array($result)){ //วนลูปออกมาแสดง
$title = $row['title'];
echo "<li>";
echo "<a href=#>";
echo "<div id='imageall'>";
echo $title;
echo "</div>";
echo "</a>";
echo "</li>";
}
echo "<br/><hr>";
echo "<div id='pagination'>";
echo $pagination; //เป็นตัวแปรที่แสดง จำนวนหน้าของเพจ
echo "</div>"
?>
</ul>
</div>
จบในส่วนของ pagination.php
ต่อไปเป็นส่วนของ javascript เป็นการรับและส่งค่าแบบ ajax
ไฟล์นี้ง่ายมากถ้าท่านผ่านบทความก่อนๆมาแล้ว
ไฟล์ pagination.js
function pagination(page){
//alert(page);
var str=Math.random();
var datastring='str='+str + '&page='+page;
$.ajax({
type:'POST',
url:'pagination.php',
data:datastring,
beforeSend: function(){
$("#loading").html("<img src='http://www.bookneo.com/images/bigLoader.gif'");
},
success:function(data){
$("#showtitle").html(data);
$("#loading").html("<img src='http://www.bookneo.com/images/bigLoader.gif'");
}
});
}
จบแล้วในส่วนของ pagination.js
บทความนี้ก็มีเพียงเท่านี้ พบกันในบทความต่อไปครับ เกี่ยวกับเรื่องของการ upload file image ต่างๆ..









0 ความคิดเห็น:
แสดงความคิดเห็น