PHPでのページング処理についての質問です。
ドットインストールにてページングの勉強をしています。
http://dotinstall.com/lessons/paging_php_v2/8510
件数が多いと、
この場合ですと10ページ以上まで表示されてしまうかと思うのですが、
よくあるWEBサービスのように10ページまでで区切り、
10ページ目をクリックすると、
5ページから15ページまでを表示させたいのですが、
どのように書いていくものでしょうか?
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'dbuser');
define('DB_PASSWORD', '********');
define('DB_NAME', 'dotinstall_paging_php');
define('COMMENTS_PER_PAGE', 5);
if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) {
$page = (int)$_GET['page'];
} else {
$page = 1;
}
error_reporting(E_ALL & ~E_NOTICE);
try {
$dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
// select * from comments limit OFFSET, COUNT
// page offset count
// 1 0 5
// 2 5 5
// 3 10 5
// 4 15 5
$offset = COMMENTS_PER_PAGE * ($page - 1);
$sql = "select * from comments limit ".$offset.",".COMMENTS_PER_PAGE;
$comments = array();
foreach ($dbh->query($sql) as $row) {
array_push($comments, $row);
}
$total = $dbh->query("select count(*) from comments")->fetchColumn();
$totalPages = ceil($total / COMMENTS_PER_PAGE);
// var_dump($comments);
// exit;
$from = $offset + 1;
$to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>コメント一覧</title>
</head>
<body>
<h1>コメント一覧</h1>
<p>全<?php echo $total; ?>件中、<?php echo $from; ?>件~<?php echo $to; ?>件を表示しています。</p>
<ul>
<?php foreach ($comments as $comment) : ?>
<li><?php echo htmlspecialchars($comment['comment'],ENT_QUOTES,'UTF-8'); ?></li>
<?php endforeach; ?>
</ul>
<?php if ($page > 1) : ?>
<a href="?page=<?php echo $page-1; ?>">前</a>
<?php endif; ?>
<?php for ($i = 1; $i <= $totalPages; $i++) : ?>
<?php if ($page == $i) : ?>
<strong><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></strong>
<?php else: ?>
<a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a>
<?php endif; ?>
<?php endfor; ?>
<?php if ($page < $totalPages) : ?>
<a href="?page=<?php echo $page+1; ?>">次</a>
<?php endif; ?>
</body>
</html>
補足
調べてみたらWordpressがRewriteRuleを作っているようでした。 初心者でどこが影響しているのかちょっとわからないので教えていただけないでしょうか? また、どのように書き換えるのがよいのでしょう? # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress