ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP でカスタム ページネーションを作成するにはどうすればよいですか?

CakePHP でカスタム ページネーションを作成するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-04 08:32:391116ブラウズ

CakePHP は、開発者に多くの便利なツールと機能を提供する強力な PHP フレームワークです。その 1 つはページネーションです。これは、大量のデータを複数のページに分割し、閲覧と操作を容易にするのに役立ちます。

デフォルトでは、CakePHP はいくつかの基本的なページネーション メソッドを提供しますが、場合によってはカスタムのページネーション メソッドを作成する必要があるかもしれません。この記事では、CakePHP でカスタム ページネーションを作成する方法を説明します。

ステップ 1: カスタム ページング クラスを作成する

まず、カスタム ページング クラスを作成する必要があります。このクラスは、すべてのページング関連ロジックの処理を担当します。 app/Lib/Utility ディレクトリに CustomPaginator.php という名前の新しいファイルを作成し、次のコードをファイルに追加します。

    <?php
    App::uses('PaginatorComponent', 'Controller/Component');

    class CustomPaginator extends PaginatorComponent {
    
        // Override the default method to customize the pagination logic
        public function paginate($object = null, $scope = array(), $whitelist = array()) {
    
            // Get the current page number
            $page = isset($this->Controller->request->params['named']['page']) ? $this->Controller->request->params['named']['page'] : 1;
    
            // Set the default pagination values
            $perPage = 10;
            $start = ($page - 1) * $perPage;
    
            // Get the total count of records
            $count = $object->find('count', array('conditions' => $scope));
    
            // Build the pagination data
            $result = array(
                'count' => $count,
                'perPage' => $perPage,
                'page' => $page,
                'totalPages' => ceil($count / $perPage),
                'start' => $start,
                'end' => ($start + $perPage) > $count ? $count : ($start + $perPage - 1),
                'hasPrevPage' => $page > 1,
                'hasNextPage' => ($start + $perPage) < $count
            );
    
            // Set the pagination data in the controller
            $this->Controller->set('paging', $result);
    
            // Return the paginated records
            return $object->find('all', array('conditions' => $scope, 'limit' => $perPage, 'offset' => $start));
        }
    }

このカスタム ページネーション クラスは、CakePHP のデフォルトのページネーション クラス PaginatorComponent に基づいています。 paginate() メソッドをオーバーライドして、カスタム ページネーション ロジックを実装しました。次のパラメータを取ります:

  • $object: ページ分割されるモデル オブジェクト。
  • $scope: クエリ条件。ページ分割されるレコードをフィルタリングするために使用されます。
  • $whitelist: 特定のクエリ パラメーターを許可または拒否するために使用されるホワイトリスト配列

実装では、最初に現在のページの番号を取得し、次にページごとのデフォルトを設定します。レコード数と開始レコード番号。次に、find() メソッドを使用してレコードの合計数を取得し、ページの合計数と終了レコードの数を計算します。最後に、すべてのページング データをコントローラーの「paging」変数に設定し、ページ分割されたレコードを返します。

ステップ 2: カスタム ページング クラスをインスタンス化する

カスタム ページング クラスを作成したので、コントローラーでそれをインスタンス化する必要があります。これを行うには、次のコードをコントローラーに追加する必要があります。

    <?php
    App::uses('AppController', 'Controller');
    App::uses('CustomPaginator', 'Lib/Utility');
    
    class UsersController extends AppController {
    
        public $components = array('CustomPaginator');
        public $paginate = array('CustomPaginator');
    
        public function index() {
            // Get all users
            $this->set('users', $this->CustomPaginator->paginate($this->User));
        }
    }

App::uses() を使用してカスタム ページネーション クラスを読み込み、コントローラー内でインスタンス化します。また、$components 属性と $paginate 属性を使用して、カスタム ページネーション クラスをコントローラーに追加しました。

index() アクションでは、$CustomPaginator->paginate() を呼び出し、User モデル オブジェクトをそれに渡します。次に、ページ分割されたユーザー データをビュー変数に設定します。

ステップ 3: ページ分割されたビューの作成

最後に、ページ分割されたデータを表示するビューを作成する必要があります。次のコードを「views/users/index.ctp」ファイルに追加します。

    <h1> Users </h1>
    
    <ul>
    <?php foreach ($users as $user): ?>
        <li> <?php echo $user['User']['name']; ?> </li>
    <?php endforeach; ?>
    </ul>
    
    <div class="pagination">
        <?php
        echo $this->Paginator->prev('<< ' . __('Previous'), array(), null, array('class' => 'disabled'));
        echo $this->Paginator->numbers();
        echo $this->Paginator->next(__('Next') . ' >>', array(), null, array('class' => 'disabled'));
        ?>
    </div>

このビューは単なるユーザーの単純なリストであり、ページ分割されたナビゲーション リンクが表示されます。

PaginatorHelper の prev()、numbers()、next() メソッドを使用してナビゲーション リンクを生成します。これらのメソッドは、コントローラーで定義した「$CustomPaginator」コンポーネントに基づいてリンクを生成します。

結論

カスタム ページネーションを使用すると、特定のニーズを満たすためのより優れた制御と柔軟性が得られます。この記事では、CakePHP でカスタム ページネーションを作成する方法を説明します。この知識を応用して、よりカスタマイズされたアプリケーションを開発できるようになりました。

以上がCakePHP でカスタム ページネーションを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。