特定のカテゴリのすべての記事を含む配列があるとします。ページングのコアは、現在のページ番号と各ページに表示されるピースの数に基づいて、配列から対応するデータフラグメントを傍受することです。
通常、ページングパラメーターには以下が含まれます。
$ページ:現在のページ番号
$ Pagesize :ページごとに表示される記事の数
$ offset :offset、計算($ page -1) * $ pagesize
Array_sliceを使用して、ページネイアイから$ offsetから始まる$ページサイズの記事を挿入して、ページネーションを実現できます。
以下は、 array_sliceを使用して記事分類ページネーションを実装する方法を示す簡単な例です。
<?php
// カテゴリのすべての記事配列をシミュレートします
$articles = [
['id' => 1, 'title' => '第1条', 'category' => '科学技術'],
['id' => 2, 'title' => '第2条', 'category' => '科学技術'],
['id' => 3, 'title' => '第3条', 'category' => '人生'],
['id' => 4, 'title' => '第4条', 'category' => '科学技術'],
['id' => 5, 'title' => '第5条', 'category' => '人生'],
['id' => 6, 'title' => '第6条', 'category' => '科学技術'],
['id' => 7, 'title' => '第7条', 'category' => '科学技術'],
];
// カテゴリを選択します
$category = '科学技術';
// 現在の記事を除外します
$categoryArticles = array_filter($articles, function ($article) use ($category) {
return $article['category'] === $category;
});
// インデックスを再構築します,使いやすい array_slice
$categoryArticles = array_values($categoryArticles);
// 現在のページ番号,から URL 得る,デフォルト 1 ページ
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
// 每ページ显示文章数
$pageSize = 3;
// オフセットを計算します
$offset = ($page - 1) * $pageSize;
// 截取当前ページ的文章
$currentPageArticles = array_slice($categoryArticles, $offset, $pageSize);
// 输出当前ページ文章
foreach ($currentPageArticles as $article) {
echo "<h3>" . htmlspecialchars($article['title']) . "</h3>";
}
?>
ページネーションはコンテンツを表示するだけでなく、ユーザーにページを切り替えるためのナビゲーションを提供します。ページの総数は、記事の総数に基づいて計算でき、ページングリンクは動的に生成できます。
<?php
$totalArticles = count($categoryArticles);
$totalPages = ceil($totalArticles / $pageSize);
for ($i = 1; $i <= $totalPages; $i++) {
if ($i == $page) {
echo "<strong>$i</strong> ";
} else {
echo "<a href=\"http://gitbox.net/yourcms?page=$i\">$i</a> ";
}
}
?>
ここでは、 http://gitbox.netをサンプルドメイン名として使用します。これは、実際の状況に応じて置き換えることができます。
PHPのarray_slice関数を使用すると、分類された記事のページングに適した配列データのページングを実装するのが非常に便利です。重要なのは、分類フィルタリング後にオフセットを正しく計算し、アレイをスライスすることです。単純なページネーションナビゲーションと相まって、記事分類ページネーションのためのほとんどのCMSSのニーズを満たすことができます。
この方法は、データベースのページングに依存せず、データが小さくなっているか、データが配列にプリロードされているシナリオに適しています。大量のデータについては、データベースのページネーションクエリを使用して効率を向上させることをお勧めします。