สร้าง Page Navigator แบบ Object
การเขียนโปรแกรมเชิงวัตถุมีข้อดีที่ทำให้เราสามารถนำเอาวัตถุนั้นไปวางไว้ตรงตำแหน่งไหนก็ได้ กี่ครั้งก็ได้ โดยไม่ต้องเขียนโปรแกรมในส่วนนั้นใหม่ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการวางวัตถุ PageNavigator ไว้ 2 ตำแหน่ง โดยมีการแสดงผลที่ไม่เหมือนกัน คือ ตำแหน่งด้านบน แสดงจำนวนหน้า 7 หน้า ส่วนตำแหน่งด้านล่างจะแสดงเพียง 5 หน้า โดยใช้วัตถุชิ้นเดียวกัน
การสร้าง PageNavigator Object 1. ขั้นตอนแรก ต้องสร้าง class PageNavigator ก่อน
<?php
Class PageNavigator {
}
?>
- สร้างคุณสมบัติของวัตถุ ซึ่งประกอบด้วย
- จำนวนรายการต่อหน้า - จำนวนรายการทั้งหมด - หน้าปัจจุบัน - จำนวนหน้าให้แสดงในแถบลิงค์ - จำนวนหน้าทั้งหมด - ชื่อเว็บเพจที่จะลิงค์ไปหน้าถัดไป - เพื่อตรวจสอบว่ารายการอยู่ในหน้าที่ต้องการแสดงหรือไม่ - เพื่อตรวจสอบว่ารายการเกินหน้าที่ต้องการแสดงหรือไม่
<?php
define("SOFTGANZOBJECT",ClassExists("BaseObject"));
if ( ClassExists("BaseObject") ) {
class BasePageNavigatorObject extends BaseObject { }
} else {
class BasePageNavigatorObject { }
}
//------------------------------------
class PageNavigator extends BasePageNavigatorObject {
var $varItemsPerPage = 5;
var $varTotalItems = 0;
var $varCurrentPage = 1;
var $varPageToShow = 5;
var $varLinkURL = "";
/**
Public Property ItemsPerPage
กำหนดจำนวนรายการต่อหน้า
*/
function ItemsPerPage($newValue=NULL) {
if ( IsSet($newValue) ) $this->varItemsPerPage = IntVal($newValue);
if ( $this->varItemsPerPage == 0 ) $this->varItemsPerPage = 5;
return $this->varItemsPerPage;
}
/**
Public Property TotalItems
กำหนดจำนวนรายการทั้งหมด
*/
function TotalItems($newValue=NULL) {
if ( IsSet($newValue) ) $this->varTotalItems = IntVal($newValue);
return $this->varTotalItems;
}
/**
Public Property CurrentPage
กำหนดหน้าปัจจุบัน
*/
function CurrentPage($newValue=NULL) {
if ( IsSet($newValue) ) $this->varCurrentPage = IntVal($newValue);
return $this->varCurrentPage;
}
/**
Public Property PageToShow
กำหนดจำนวนหน้าให้แสดงในแถบลิงค์
*/
function PageToShow($newValue=NULL) {
if ( IsSet($newValue) ) $this->varPageToShow = IntVal($newValue);
return $this->varPageToShow;
}
/**
Public Property TotalPage
หาค่าจำนวนหน้าทั้งหมด
*/
function TotalPage() {
if ( $this->ItemsPerPage() == 0 ) $this->ItemsPerPage();
return Ceil($this->TotalItems() / $this->ItemsPerPage());
}
/**
Public Property IsDisplayItem
ตรวจสอบว่ารายการอยู่ในหน้าที่ต้องการแสดงหรือไม่
*/
function IsDisplayItem($no) {
return Ceil(++$no/$this->ItemsPerPage()) == $this->CurrentPage();
}
/**
Public Property IsOverCurrentPage
ตรวจสอบว่ารายการเกินหน้าที่ต้องการแสดงหรือไม่
*/
function IsOverCurrentPage($no) {
return Ceil(++$no/$this->ItemsPerPage()) > $this->CurrentPage();
}
/**
Public Property LinkUrl
กำหนดชื่อเว็บเพจสำหรับการลิงค์ไปหน้าถัดไป
*/
function LinkURL($newValue=NULL) {
if ( IsSet($newValue) ) $this->varLinkURL = $newValue;
return $this->varLinkURL;
}
}
?>
- สร้างขบวนการของวัตถุ
- ขบวนการแสดงผล
......
function LinkAddress($page='1') {
$linkUrl = StrReplace("%page%",$page,$this->LinkURL());
$url = (PregMatch("/ /",$linkUrl) ? UrlEncode($linkUrl) : $linkUrl);
return $url;
}
/**
Public Method Show
แสดงลิงค์ไปหน้าถัดไป
*/
function Show() { echo $this->ShowString(); }
/**
Public Property ShowString
ค่าข้อความสำหรับแสดงลิงค์ไปหน้าถัดไป
*/
function ShowString() {
$showStr = "";
$showStr .= "<!-- start of page Navigator -->";
$showStr .= "<table width=100% cellspacing=0 cellpadding=0 border=0><tr valign=top>";
$showStr .= "<td nowrap align=center style="Font-Family:Tahoma;Font-Size:10pt;">";
$totalPage=$this->TotalPage();
$currentPage = $this->CurrentPage() == 0 ? 1 : $this->CurrentPage();
$startPage = $currentPage - Floor($this->PageToShow() / 2);
if ( $startPage < 1 ) $startPage = 1;
$endPage = $startPage + $this->PageToShow() - 1;
if ( $endPage > $totalPage ) $endPage = $totalPage;
if ( $currentPage > 1 ) {
$showStr .= "<a href=".$this->LinkAddress("1")." style="text-decoration:none;">";
if ( _SOFTGANZ_OBJECT and File::HaveFile("/pics/icon/Page-First.gif") )
$showStr .= "<img src=/pics/icon/Page-First.gif width=24 height=16 border=0 alt=หน้าแรก>";
else
$showStr .= "|<";
$showStr .= "</a>n";
$showStr .= "<a href=".$this->LinkAddress($currentPage-1)." style="text-decoration:none;">";
if ( _SOFTGANZ_OBJECT and File::HaveFile("/pics/icon/Page-Prev.gif") )
$showStr .= "<img src=/pics/icon/Page-Prev.gif width=24 height=16 border=0 alt="หน้าก่อนนี้คือหน้า ".($currentPage-1)."">";
else
$showStr .= "<";
$showStr .= "</a> ";
}
for ( $i = $startPage; $i <p align="left"> $endPage; $i++ ) {
</p>
if ( $i == $this->CurrentPage() ) {
$showStr .= "<font style="color:gray;">(<b><font color=red>$i</font></b>/$totalPage) </font>";
} else {
$showStr .= "<a href=".$this->LinkAddress($i);
$showStr .= " style="Font-Family:Tahoma;Font-Size:10pt;" ";
$showStr .= " title="หน้าที่ $i จาก $totalPage" style="text-decoration:none;">$i</a> ";
}
}
if ( $currentPage < $totalPage ) {
$showStr .= "<a href=".$this->LinkAddress($currentPage+1)." style="text-decoration:none;">";
if ( _SOFTGANZ_OBJECT and File::HaveFile("/pics/icon/Page-Next.gif") )
$showStr .= "<img src=/pics/icon/Page-Next.gif width=24 height=16 border=0 alt="หน้าถัดไปคือหน้า ".($currentPage+1)."">";
else
$showStr .= ">";
$showStr .= "</a>";
$showStr .= "<a href=".$this->LinkAddress($totalPage)." style="text-decoration:none;">";
if ( _SOFTGANZ_OBJECT and File::HaveFile("/pics/icon/Page-Last.gif") )
$showStr .= "<img src=/pics/icon/Page-Last.gif width=24 height=16 border=0 alt="หน้าสุดท้ายคือหน้า $totalPage">";
else
$showStr .= ">|";
$showStr .= "</a>n";
}
$showStr .= "</td></tr></table>";
$showStr .= "<!-- end of page Navigator -->";
return $showStr;
}
......
ตัวอย่างการนำไปใช้งาน ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการวางวัตถุ PageNavigator ไว้ 2 ตำแหน่ง โดยมีการแสดงผลที่ไม่เหมือนกัน คือ ตำแหน่งด้านบน แสดงจำนวนหน้า 7 หน้า ส่วนตำแหน่งด้านล่างจะแสดงเพียง 5 หน้า โดยใช้วัตถุชิ้นเดียวกัน
$self = $PHP_SELF;
if ( ! IsSet($page) ) $page=1; // กำหนดหน้า = 1 ในกรณีที่ไม่ได้กำหนดมาก่อน
$PageNV = new PageNavigator();
$PageNV->ItemsPerPage(10);
$PageNV->TotalItems(Count($data));
$PageNV->CurrentPage($page);
$PageNV->PageToShow(7);
$PageNV->LinkUrl("$self?page=%page%");
$item = 0; // กำหนดตัวนับรายการเพื่อนำไปใช้ในการตรวจสอบว่ารายการอยู่ในหน้าที่ต้องการแสดงผลหรือเปล่า
// สร้างลิงค์สำหรับเลือกหน้าแสดงผล
echo "<table width=100%><tr><td nowrap width=100%>PageNavigator Style Object</td><td nowrap>Page :: $page</td>";
echo "<td nowrap>";
echo $PageNV->ShowString(); // แสดง PageNavigator
echo "</td></tr></table>";
// แสดงหัวของตาราง
echo "<table width=100% cellspacing=1 cellpadding=2>";
echo "<tr bgcolor=#AA99DD align=center>";
echo "<td>no</td>";
echo "<td>date</td>";
echo "<td>address</td>";
echo "<td>call_number</td>";
echo "<td>page</td>";
echo "<td>access</td>";
echo "</tr>";
reset($data);
while ( List(,$row) = each($data) ) {
if ( $PageNV->IsDisplayItem($item) ) { // ตรวจสอบว่ารายการนี้อยู่ในหน้าที่ต้องการแสดงผลหรือไม่
echo "<tr align=center>";
echo "<td>".($item+1)."</td>";
while ( List($key,$value) = each($row) ) {
echo "<td>$value</td>";
}
echo "</tr>";
} elseif ( $PageNV->IsOverCurrentPage($item) ) break; // ถ้าหากรายการเกินจำนวนหน้าที่ต้องการแสดงผล ให้หยุดการทำงาน
$item++;
}
echo "</table>";
// สร้างลิงค์สำหรับเลือกหน้าแสดงผล
$PageNV->PageToShow(5);
echo "<table width=100%><tr bgcolor=#AA99DD><td width=100%>Page :: $page</td>";
echo "<td nowrap>";
echo $PageNV->ShowString();
echo "</td></tr></table>";
?>
ต้นฉบับโปรแกรม :: DownLoad Source File
Relate topics
- ศูนย์บ่มเพาะวิสาหกิจ มหาวิทยาลัยสงขลานครินทร์ รับสมัครงาน
- ใครจะคิดบ้างว่าอยู่ใกล้หาดใหญ่แค่นี้ แต่ไฟฟ้าเพิ่งเข้าถึง!!!
- เหนื่อยนักกับการตามลบโฆษณาในเว็บ
- ขอความอนุเคราะห์ประชาสัมพันธ์ เวบไซท์ของชุมชนหลังบิ์กซี เทศบาลคลองแห
- แนะนำโฮมเพจอ่นนิยายฟรี
- เว็บไซท์ 'หมี่เป็ด' เหตุการณ์ยังไม่เปลี่ยนแปลง
- ส่งภาพสมาชิกได้ด้วยนะ
- ถามแหล่งงานหน่อย ครับ แนวโปรแกรมเมอร์ ที่หาดใหญ่
- คำแก้ตัวจากนายหมี ความจริงไม่ใช่ความผิดของผม
- Blog เครื่องมือสื่อสารยุคใหม่
narespoolsri@hotmail (Not Member)
111 (Not Member)
p (Not Member)