สร้าง 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 เครื่องมือสื่อสารยุคใหม่