1

クラスを作成したいのですpaginatorが、最適なメソッドがわかりません。私を混乱させる多くの異なるコードがインターネット上にあります。

私のデータはMySQLデータベースに保存されています。MySQLからデータを取得できるように、pagniatorクラスにクエリを実行する必要がありますか(もちろん、その後、自動的にいくつかのページネーション計算を実行します)?または、最初からすべてのデータを取得してから、そのモデルからmodel返されたデータをクラスに提供しますか?arraypaginator

いずれにせよ、レコードの「合計」量を取得し、その結果をpagninator別のパラメーターとしてクラスに渡すために、おそらく別のクエリを実行する必要があります。

始める方法を知ったら、残りを拾う方法を知っています。paginatorデータをクラスに渡す方法と、どのような種類のデータかがわかりません。

良いpaginatorクラスを構築する方法はありますか?

4

3 に答える 3

4

適切に設計されたOOPaginatorクラスは、データやデータベースから独立している必要があります。

、、、などcountのパラメータを取り、適切なを使用してクエリを生成するためのモデル、または適切なHTMLをレンダリングするためのクラスへの依存性注入に使用できるオブジェクトを返す必要があります。pageper_pageLIMITPaginationHelper

優れたPaginatorインターフェースの例(これについて10分間考えた場合):

/**
 * Your pagination master class
 */
interface iPaginator {
    public function __construct($total_count, $count_per_page, $current_page=1);
    public function getPaginationLimiter();
    public function getPaginationHelper();

    // These return iPaginatorPage objects
    public function getCurrentPage();
    public function getNextPage();
    public function getPreviousPage();

    public function getTotalCount();
    public function getCountPerPage();
    public function getPageCount(); // Calculated
}

/**
 * Page representation
 */
interface iPaginatorPage {
    public function __construct($page_number, $start, $end);

    public function getNumber();
    public function getStart();
    public function getEnd();
    public function getCount(); // Calculated
}

/**
 * Helper for rendering the UI
 */
interface iPaginationHelper {
    public function __construct(iPaginator $paginator);
    public function render();
}

ベースモデルを拡張し、アプリケーションモデルにModelではなくPaginatorModelを拡張させることで、モデルに統合する方法の例:

class PaginationModel extends Model {
    public function query($sql, iPaginatorPage $page = null) {
        if (!empty($page)) {
            $start = $page->getStart();
            $length = $page->getCount();
            $sql .= " LIMIT ({$start}, {$length})";
            return parent::query($sql);
        }
    }
}
于 2012-12-03T12:45:28.713 に答える
1

Pear からのページャーの実装を確認してください。これは非常に優れたクラスで、使いやすく、多くの優れた機能を備えています。

于 2012-12-04T09:52:10.720 に答える
0

クラスを作成し、次のような機能を持っています:

  1. function resultset($required_filters, $table, $pagenum, $records){ $getCount='SELECT count(*) from table'; $sql="SELECT ".$required fields." FROM ".$table." LIMIT ".(($pagenum-1) * $records).",".$records; $sqlres=... return array($getCount, $sqlres); }

    この関数を list($rescount, $arrData)=resultset(all parameters); として呼び出します。

ページネーションには、いくつかのforループを使用してページ番号を表示します...合計$rescountページについては、getを使用して現在のページ番号を強調表示できます

于 2012-12-03T13:08:56.790 に答える