PHP実装の簡単なページングクラスと使用例

5300 ワード

この例では,PHP実装の簡単なページングクラスと用法について述べた.皆さんの参考にしてください.具体的には以下の通りです.

page;
 *
 *      
 * $page->pageCount;
 *
 *       
 * $page->rowCount;
 *
 *        
 * $page->listSize;
 *
 *      
 * $page->list;
 *       2   , :list[0]['id']        id   .
 *
 *       
 * $page->getPageList();
 */
class Page
{
  //    
  var $sql;
  var $page;
  var $pageSize;
  var $pageStr;
  //    
  var $pageCount; //  
  var $rowCount; //   
  //    
  var $list = array(); //     
  var $listSize ;
  //    
  function Page($conn,$sql_in,$page_in,$pageSize_in,$pageStr_in)
  {
    $this->sql = $sql_in;
    $this->page = intval($page_in);
    $this->pageSize = $pageSize_in;
    $this->pageStr = $pageStr_in;
    //       1   
    if(!$this->page||$this->page<1)
    {
      $this->page = 1;
    }
    //      
    $rowCountSql = preg_replace("/([\w\W]*?select)([\w\W]*?)(from[\w\W]*?)/i","$1 count(0) $3",$this->sql);
    if(!$conn)
      $rs = mysql_query($rowCountSql) or die("bnc.page: error on getting rowCount.");
    else
      $rs = mysql_query($rowCountSql,$conn) or die("bnc.page: error on getting rowCount.");
    $rowCountRow = mysql_fetch_row($rs);
    $this->rowCount=$rowCountRow[0];
    //     
    if($this->rowCount%$this->pageSize==0)
      $this->pageCount = intval($this->rowCount/$this->pageSize);
    else
      $this->pageCount = intval($this->rowCount/$this->pageSize)+1;
    //SQL   
    $offset = ($this->page-1)*$this->pageSize;
    if(!$conn)
      $rs = mysql_query($this->sql." limit $offset,".$this->pageSize) or die("bnc.page: error on listing.");
    else
      $rs = mysql_query($this->sql." limit $offset,".$this->pageSize,$conn) or die("bnc.page: error on listing.");
    while($row=mysql_fetch_array($rs))
    {
      $this->list[]=$row;
    }
    $this->listSize = count($this->list);
  }
  /*
   * getPageList              
   *           ,         ,       /             .
   */
  function getPageList()
  {
    $firstPage;
    $previousPage;
    $pageList;
    $nextPage;
    $lastPage;
    $currentPage;
    //    >1       
    if($this->page>1)
    {
      $firstPage = "pageStr.「1」>トップページ";
    }
    //    >1        
    if($this->page>1)
    {
      $previousPage = "pageStr.($this->page-1). のページ";
    }
    //              
    if($this->pagepageCount)
    {
      $nextPage = "pageStr.($this->page+1).」> ページ";
    }
    //             
    if($this->pagepageCount)
    {
      $lastPage = "pageStr.$this->pageCount."">  ページ";
    }
    //      
    for($counter=1;$counter<=$this->pageCount;$counter++)
    {
      if($this->page == $counter)
      {
        $currentPage = "".$counter."";
      }
      else
      {
        $currentPage = " "."pageStr.$counter."\">".$counter.""." ";
      }
      $pageList .= $currentPage;
    }
    return $firstPage." ".$previousPage." ".$pageList." ".$nextPage." ".$lastPage." ";
  }
}
?>


使用例:

list;
foreach($rows as $row)
{
  echo $row['UserName']."
"; } echo $page->getPageList(); // ?>

PHPについてもっと兴味のある読者は、「PHP配列(Array)操作技巧大全」、「PHP数学演算技巧総括」、「php正則式用法総括」、「PHP+ajax技巧と応用小結」、「PHP演算と演算子用法総括」、「PHPネットワークプログラミング技巧総括」、「PHP基本文法入門教程」、「php日付と時間の使い方のまとめ」、「phpオブジェクト向けプログラム設計入門チュートリアル」、「php文字列(string)使い方のまとめ」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニックのまとめ」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.