สร้าง Page Navigator แบบ Object

by root @11 พ.ย.46 15.17 ( IP : ) | Tags :

การเขียนโปรแกรมเชิงวัตถุมีข้อดีที่ทำให้เราสามารถนำเอาวัตถุนั้นไปวางไว้ตรงตำแหน่งไหนก็ได้ กี่ครั้งก็ได้ โดยไม่ต้องเขียนโปรแกรมในส่วนนั้นใหม่ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการวางวัตถุ PageNavigator ไว้ 2 ตำแหน่ง โดยมีการแสดงผลที่ไม่เหมือนกัน คือ ตำแหน่งด้านบน แสดงจำนวนหน้า 7 หน้า ส่วนตำแหน่งด้านล่างจะแสดงเพียง 5 หน้า โดยใช้วัตถุชิ้นเดียวกัน

การสร้าง PageNavigator Object 1. ขั้นตอนแรก ต้องสร้าง class PageNavigator ก่อน

<?php
Class PageNavigator {
}
?>

  1. สร้างคุณสมบัติของวัตถุ ซึ่งประกอบด้วย

- จำนวนรายการต่อหน้า - จำนวนรายการทั้งหมด - หน้าปัจจุบัน - จำนวนหน้าให้แสดงในแถบลิงค์ - จำนวนหน้าทั้งหมด - ชื่อเว็บเพจที่จะลิงค์ไปหน้าถัดไป - เพื่อตรวจสอบว่ารายการอยู่ในหน้าที่ต้องการแสดงหรือไม่ - เพื่อตรวจสอบว่ารายการเกินหน้าที่ต้องการแสดงหรือไม่

<?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;
}
}
?>

  1. สร้างขบวนการของวัตถุ

- ขบวนการแสดงผล

......
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

Comment #1
narespoolsri@hotmail (Not Member)
Posted @13 พ.ย.48 17.14 ip : 221...70

Very good !!!!

Comment #2
111 (Not Member)
Posted @10 มี.ค.49 10.03 ip : 202...9

Comment #3
p (Not Member)
Posted @29 เม.ย.53 1.30 ip : 118...109

มั่วอ่ะ ทดสอบหรือยัง อย่าทำเว็บมั่วๆแค่เอามาลงก็จบ

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

« 3575
หากท่านไม่ได้เป็นสมาชิก ท่านจำเป็นต้องป้อนตัวอักษรของ Anti-spam word ในช่องข้างบนให้ถูกต้อง
The content of this field is kept private and will not be shown publicly. This mail use for contact via email when someone want to contact you.
Bold Italic Underline Left Center Right Ordered List Bulleted List Horizontal Rule Page break Hyperlink Text Color :) Quote
คำแนะนำ เว็บไซท์นี้สามารถเขียนข้อความในรูปแบบ มาร์คดาวน์ - Markdown Syntax:
  • วิธีการขึ้นบรรทัดใหม่โดยไม่เว้นช่องว่างระหว่างบรรทัด ให้เคาะเว้นวรรค (Space bar) ที่ท้ายบรรทัดจำนวนหนึ่งครั้ง
  • วิธีการขึ้นย่อหน้าใหม่ซึ่งจะมีการเว้นช่องว่างห่างจากบรรทัดด้านบนเล็กน้อย ให้เคาะ Enter จำนวน 2 ครั้ง

งานเขียนของข้าพเจ้า

personมุมสมาชิก

Last 10 Member Post

Web Statistics : online 0 member(s) of 3 user(s)

User count is 2260693 person(s) and 8849327 hit(s) since 29 มี.ค. 2567 , Total 550 member(s).