ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP ページネーション
CakePHP には開発者向けのさまざまな機能があります。柔軟でユーザーフレンドリーな Web アプリケーションを開発したい場合は、フレームワークにページネーションの概念を含めることができます。ページごとに適切な数のレコードを表示することは、各アプリケーションの基本的な部分であり、デザイナーにとっては非常に頭の痛い問題でした。 CakePHP は、情報をページ分割するための高速かつシンプルな方法を提供することで、デザイナーの負担を軽減します。適応性があり使いやすい Web アプリケーションを作成する際の主な障害の 1 つは、自然な UI を計画することです。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
クライアントがソース コードを作成すると、その時点でコードの長さと複雑さが増大するため、使いやすい接続ポイントの改善は Web アプリケーション設計者にとっての主要な問題の 1 つです。同様に、単独のページにある数百、数千のレコードを管理するのは困難でした。さらに、Web アプリケーションは揺るぎない品質とクライアントの満足度を体験できるため、孤立したページに微妙な点をもたらす機会に投資します。これらの方針に沿って、CakePHP 設計者は、単独のページ内の多数のレコードを無効にするページネーション機能を提供します。多くのアプリケーションは、サイズや複雑さが急速に増大することが多く、アーキテクトやソフトウェア エンジニアは、数百、数千のレコードの表示に適応できないことに気づいています。
クライアントの移動記録を単独のページに表示すると、その時点で記録の長さが過度に長くなり、これらの問題に直面しました
クライアントはデータを確認するためにさまざまな時間を調べる必要があります。
携帯電話やタブレットなどの小型機器でサイトを閲覧するのは難しくありません
Web アプリケーションの実行が低下します。
これらの状況から、CakePHP は理想的なページネーション戦略を提示します。
CakePHP のページネーション戦略: すべてのレコードを同等の部分に分離し、アプリケーションの必要性に応じて単独のレコードをクライアントに表示します。
モデル: 各ページに 200 レコードがあり、20 レコードだけを表示する必要があると仮定します。完全なシートを取得するための基本的な計算と同様に、200/20 = 10 です。このため、多用途ガジェットまたは作業領域ガジェットのような小さな画面で、クライアントに各ページの微妙な点を確認してもらいたいと考えています。
次に、次のように CakePHP でページネーションを設定する方法を見てみましょう。
場合によっては、従来の SQL 照会を利用して CakePHP でページネーションを実行したいことがあります。その後、CakePHP の事前定義されたページネーションの有用性は失われます。 CakePHP のカスタム ページネーション
CakePHP で標準 SQL 照会を利用する場合、モデルまたは動作でページネーション戦略を実行できます。カスタム質問のページネーションを実行する前に、センター モデル手法やカスタム ロケーターでは結果が得られないことを確認するだけで十分です。ただし、カスタム質問で標準のページネーションを単純に利用することはできません。モデルまたは行為のページネーション機能を廃止する必要があります。
独自の戦略/根拠を利用してモデル内の CakePHP ページネーションを置き換えるために、実際には 2 つの機能、paginate () と paginateCount() を追加したいと考えています。
膨大な量の情報を表示するには、ページネーションを利用できます。このコンポーネントは、cake PHP 4 でアクセスでき、非常に簡単に利用できます。
次のスクリーンショットでは、次のように異なる値を持つ複数のデータベース エントリが表示されます。
ここで、ページネーションを使用できるように、少数のエントリを含む単一ページにレコードを表示する必要があります。そのため、まず、routes.php ファイルを次のように設定する必要があります。
<?php use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('posts',['controller'=>'Posts','action'=>'index']); $builder->fallbacks(); });
次に、controller.php ファイルを作成し、次のコードを次のように記述する必要があります。
<?php namespace App\Controller; use App\Controller\AppController; class PostsController extends AppController { public function index(){ $this->loadModel('rounds); $articles = $this->rounds->find('all')->order(['rounds.id ASC']); $this->set('rounds', $this->paginate($rounds, ['limit'=> '4'])); } } ?>
説明
上記のファイルでは、レコードを表示するロジックを記述しています。ここでは、1 ページに 4 つのレコードを表示してみます。
次に、ディレクトリを作成し、そのディレクトリの下に新しいindex.phpファイルを作成し、次のコードを次のように記述する必要があります。
<div> <?php foreach ($rounds as $key=>$rounds) {?> <a href="#"> <div> <p><?= $rounds->title ?> </p> <p><?= $rounds->details ?></p> </div> </a> <br/> <?php } ?> <ul class="pagination"> <?= $this->Paginator->prev("<<") ?> <?= $this->Paginator->numbers() ?> <?= $this->Paginator->next(">>") ?> </ul> </div>
次に、localhost で上記のコードを実行します。上記の実装の最終結果を、次のスクリーンショットを使用して示します。
In the regulator, we start by characterizing the default question conditions pagination will use in the $paginate regulator variable. These circumstances serve as the reason for your pagination questions. They are increased by the sort, direction, limit, and page boundaries passed in from the URL. It is critical to note that the request key should be characterized in an exhibit structure like beneath:
class RoundController extends AppController { public $paginate = [ 'limit' => 20, 'order' => [ 'Round.title' => 'Desc' ] ]; public function initialize() { parent::initialize(); $this->loadComponent('Paginator'); } }
In this code, we can include different options that are supported by the find () method as per our requirements.
class RoundController extends AppController { public $paginate = [ 'fields' => ['Rounds.id', 'Rounds.created'], 'limit' => 20, 'order' => [ 'Rounds.title' => 'Desc' ] ]; public function initialize() { parent::initialize(); $this->loadComponent('Paginator'); } }
While you can pass the vast majority of the question choices from the paginate property it is often cleaner and more straightforward to wrap up your pagination choices into a Custom Finder Method. You can characterize the locater pagination utilizing finder choice.
From the above article, we have taken in the essential idea of the CakePHP pagination and we also see the representation and examples. From this article, we learned how and when we use the CakePHP pagination.
以上がCakePHP ページネーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。