ホームページ  >  記事  >  バックエンド開発  >  非常に使いやすい Zend Framework ページング クラス_PHP チュートリアル

非常に使いやすい Zend Framework ページング クラス_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:26:07661ブラウズ

ここで、非常に便利な Zend Framework ページング クラスを共有したいと思います

具体的な効果は、このサイトのページング効果に見られます。CSS スタイルは、個人のデザインセンスに応じて変更できます。

ここでは、このクラスの使用方法を示す例を次のように示します。
IndexController.php、Action に次のコードを記述します:

コードをコピーします コードは次のとおりです:
protected $_curPage = 1 //デフォルトの最初のページ
; const PERPAGENUM = 4 //各ページに表示されるアイテムの数
;
パブリック関数indexAction()
{
// $this->_blogModel がブログ Model をインスタンス化しました
// $rows -> 表示されているデータの総エントリ数を取得します
$rows = $this->_blogModel->getTotalRows();

If($pageNum = $this->getRequest()->getParam('page')) {
//値が渡された場合、最初の最初のページを上書きします
$this->_curPage = $pageNum;
}

//データテーブルのデータをフロントエンドに送信
$this->view->blogInfo = $this->_blogModel->getBlogInfo(
) 持っている );
//ページングクラスをインスタンス化してフロントエンドに渡します
$this->view->pagebar = $this->displayPageBar($rows);
}

プライベート関数displayPageBar($totalRows)
{
$Pager = new Zend_Pagination($totalRows,self::PERPAGENUM);
$Pager->getNavigation();
を返す }


models/Blog.php、次のコードを記述します:


コードをコピーします コードは次のとおりです:
パブリック関数 getBlogInfo($perPageNum = NULL, $limit = NULL)
{
Return $this->fetchAll('1 = 1', 'blog_id desc', $perPageNum, $limit)
->toArray();
}

パブリック関数 getTotalRows($where = '1=1')
{
$this->fetchAll($where)->count();
を返す }


index.phtml、次のコードを記述します:


コードをコピーします コードは次のとおりです:
pagebar ?>



この時点で、より良いページ効果を追求したい場合は、個人的な好みに応じてページング クラスを変更してください。ここでは詳細な例は示しません。


コードをコピーします

コードは次のとおりです:

クラス Zend_Pagination
{
Private $_navigationItemCount = 6 //ナビゲーション バーにはナビゲーション ページの総数が表示されます
; Private $_pageSize = null //ページごとのアイテム数
; private $_align = "right" // ナビゲーションバーの表示位置
; Private $_itemCount = null //アイテムの総数
; Private $_pageCount = null //総ページ数
; Private $_currentPage = null //現在のページ
; private $_front = null //フロントエンドコントローラー
; Private $_PageParaName = "ページ" // ページパラメータ名
;
Private $_firstPageString = "|<<" //ナビゲーションバーの最初のページに表示される文字
Private $_nextPageString = ">>" //ナビゲーションバーの前のページに表示される文字
; Private $_previousPageString = "<<" //ナビゲーションバーの次のページに表示される文字
; Private $_lastPageString = ">>|" //ナビゲーションバーの最後のページに表示される文字
; Private $_splitString = " | " //ページ番号間の区切り文字
;
パブリック関数 __construct($itemCount, $pageSize)
{
If (!is_numeric($itemCount) || (!is_numeric($pageSize))) {
新しい例外をスローします("ページネーション エラー: 数値ではありません");
}
$this->_itemCount = $itemCount;
$this->_pageSize = $pageSize;
$this->_front = Zend_Controller_Front::getInstance();

$ this-&gt; $page = $this->_front->getRequest()->getParam($this->_PageParaName);

If (empty($page) || (!is_numeric($page))) {
// 空か数値ではない場合、現在のページを 1 に設定します
$this->_currentPage = 1;
} else {
if ($page $page = 1;
}
If ($page > $this->_pageCount) {
$page = $this->_pageCount;
}
$this->_currentPage = $page;
}
}

パブリック関数 getCurrentPage()
{
return $this->_currentPage;
}

パブリック関数 getNavigation()
{
$navigation = '
';

// 現在のページはどの列にありますか? $pageCote = ceil($this->_currentPage / ($this->_navigationItemCount - 1)) - 1; //合計ページング列
$pageCoteCount = ceil($this->_pageCount / ($this->_navigationItemCount - 1));
// ページングバーの開始ページ
$pageStart = $pageCote * ($this->_navigationItemCount -1) + 1;                                                                                                                                                                                                                                   $pageEnd = $pageStart + $this->_navigationItemCount - 1; $pageEnd = $pageStart + $this->_navigationItemCount - 1;
If($this->_pageCount < $pageEnd) {
$pageEnd = $this->_pageCount;
}

$navigation .= "合計: {$this->_itemCount} アイテム 合計 {$this->_pageCount} ページ n ";

if($ pagecote&gt; 0){ $navigation .= '$this->_firstPageString }
If($this->_currentPage != 1) { //前のページへのナビゲーション
$navigation .= '$this->_previousPageString }その他{
$navigation .= $this->_previousPageString . }

($ pagestart&lt; = $ pageend) {
If ($pageStart == $this->_currentPage) {
$navigation .= "$pageStart" . } else {
$navigation .= ' . $this->createHref($this->_currentPage+1)
                           . " \"="">$this->_nextPageString
";
        }else{
            $navigation .= $this->_nextPageString;
        }
        
        if ($pageCote < $pageCoteCount-1) {               //未页导航
            $navigation .= '$this->_lastPageString ";
        }
 
        $navigation .= ' 到 ';
        $navigation .= " 页
";
        $navigation を返します;
    }
 
    パブリック関数 getNavigationItemCount()
    {
        return $this->_navigationItemCount;
    }
 
    パブリック関数 setNavigationItemCoun($navigationCount)
    {
        if(is_numeric($navigationCount)) {
            $this->_navigationItemCount = $navigationCount;
        }
    }
 
    パブリック関数 setFirstPageString($firstPageString)
    {
        $this->_firstPageString = $firstPageString;
    }
 
    パブリック関数 setPreviousPageString($previousPageString)
    {
        $this->_previousPageString = $previousPageString;
    }
 
    パブリック関数 setNextPageString($nextPageString)
    {
        $this->_nextPageString = $nextPageString;
    }
 
    パブリック関数 setLastPageString($lastPageString)
    {
        $this->_lastPageString = $lastPageString;
    }
 
    パブリック関数 setAlign($align)
    {
        $align = strto lower($align);
        if ($align == "中心") {
            $this->_align = "中心";
        elseif ($align == "右") {
            $this->_align = "右";
        } その他 {
            $this->_align = "左";
        }
    }
    
    パブリック関数 setPageParamName($pageParamName)
    {
        $this->_PageParaName = $pageParamName;
    }
 
    パブリック関数 getPageParamName()
    {
        $this->_PageParaName を返す;
    }
 
    プライベート関数 createHref($targetPage = null)
    {
        $params = $this->_front->getRequest()->getParams();
        $module = $params["モジュール"];
        $controller = $params["コントローラー"];
        $action = $params["アクション"];
 
        $targetUrl = $this->_front->getBaseUrl()
                     。 "/$モジュール/$コントローラー/$アクション";
                      
        foreach ($params as $key => $value)
        {
            if($key != "コントローラー" && $key != "モジュール"
               && $key != "アクション" && $key != $this->_PageParaName) {
                $targetUrl .= "/$key/$value";
            }
        }
If (isset($targetPage)) { //対象ページを指定
$targetUrl .= "/$this->_PageParaName/$targetPage";
} else {
$targetUrl .= "/$this->_PageParaName/";
}
return $targetUrl;
}
}

これは Mysql の制限オフセットの簡単なレビューです

データベース テーブル blog に 13 個のデータがあるとします。

ステートメント 1: ブログの制限 9、4 から * を選択します
ステートメント 2: ブログ制限 4 オフセット 9 から * を選択します

//ステートメント 1 と 2 は両方ともテーブル blog の行 10、11、12、および 13 を返します
//ステートメント 1 の 9 は、テーブルの 10 行目から開始して 4 行を返すことを意味します
//ステートメント 2 の 4 は 4 行を返すことを意味し、オフセット 9 はテーブルの 10 行目から開始することを意味します

次のステートメントはページング効果を示しています:

ステートメント 3: select * from blog limit ($this->_curPage - 1)* self::PERPAGENUM, self::PERPAGENUM;
ステートメント 4: select * from ブログ制限 self::PERPAGENUM offset ($this->_curPage - 1) * self::PERPAGENUM;

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824809.html技術記事ここでは、非常に便利な Zend Framework のページング クラスを紹介したいと思います。その具体的な効果は、この Web サイトのページング効果に見られます。CSS スタイルは、個人のデザインのセンスに応じて変更できます。 ここで例を挙げます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。