ページネーション

このコミットが含まれているのは:
守矢諏訪子 2022-06-02 02:57:06 +09:00
コミット 5ccefe2005
2個のファイルの変更50行の追加9行の削除

ファイルの表示

@ -10,6 +10,9 @@
$title = $_GET['q'].'の検索';
$linktype = 'side';
$q = htmlspecialchars($_GET['q']);
$limit = 10;
$offset = (isset($_GET['page']) ? (int)$_GET['page']-1 : 0) * $limit;
$totalpages = 0;
$res = [];
$mysqli = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
@ -19,21 +22,32 @@
exit();
}
if ($pages = mysqli_prepare($mysqli, "SELECT * FROM website_page WHERE title LIKE ? OR body LIKE ?")) {
$lq = "%$q%";
mysqli_stmt_bind_param($pages, "ss", $lq, $lq);
$tq = explode(' ', $q);
$lq = '';
foreach ($tq as $k => $v) {
if ($k % 2 == 0) $lq .= "%$v%";
else $lq .= "$v%";
}
unset($tq);
$tp = mysqli_query($mysqli, "SELECT COUNT(1) FROM website_page WHERE title LIKE '".$lq."' OR body LIKE '".$lq."';");
$totalpages = (int)mysqli_fetch_row($tp)[0];
unset($tp);
if ($pages = mysqli_prepare($mysqli, "SELECT * FROM website_page WHERE title LIKE ? OR body LIKE ? LIMIT ? OFFSET ?")) {
mysqli_stmt_bind_param($pages, "ssii", $lq, $lq, $limit, $offset);
mysqli_stmt_execute($pages);
mysqli_stmt_bind_result($pages, $wpid, $webid, $pageurl, $pagetit, $pagebody);
mysqli_execute($pages);
while (mysqli_stmt_fetch($pages)) {
$cq = strtoupper($q);
$pagetit = preg_replace('/'.$cq.'/i', '<b>'.$cq.'</b>', $pagetit);
$pagetit = preg_replace('/'.$cq.'/i', '<span class="result-mark">'.$cq.'</span>', $pagetit);
$pagebody = explode($cq, $pagebody);
$tmppb = '';
foreach ($pagebody as $k => $v) {
if ($k % 2 == 0) $tmppb .= '…'.mb_substr($pagebody[$k], -200)."<b>".$cq."</b>";
if ($k % 2 == 0) $tmppb .= '…'.mb_substr($pagebody[$k], -200).'<span class="result-mark">'.$cq.'</span>';
else $tmppb .= mb_substr($pagebody[$k], 0, 200).'…'.(isset($pagebody[$k+1]) ? ' ' : '');
}
@ -74,6 +88,11 @@
</div>
<?php } ?>
<hr />
<?php for ($i = 1; $i <= ceil($totalpages/$limit); $i++) { ?>
<a class="pagination" href="/search.php?q=<?php echo $q; ?>&page=<?php echo $i; ?>"><?php echo $i; ?></a>
<?php } ?>
<?php
require_once('../include/footer.php');
?>

ファイルの表示

@ -60,25 +60,47 @@ input[type="text"]:hover, input[type="submit"]:hover {
text-align: center;
}
.result {
.result, .pagination {
background-color: #035444;
margin: 10px 0;
border-radius: 2px;
transition: background-color .3s;
}
.result > a {
transition: color .3s;
.result {
padding: 8px;
box-shadow: 1px 4px 3px 1px #000605;
transition: box-shadow .2s;
}
.result:hover {
box-shadow: 1px 4px 3px 1px #42f3d6;
}
.pagination {
font-size: 24px;
padding: 0 10px;
}
.result > a, .pagination > a {
transition: color .3s;
}
.result:hover, .pagination:hover {
background-color: #1dd1ad;
}
.result:hover > a {
.result:hover > a, .pagination:hover > a {
color: #035444;
}
.result-title {
font-size: 28px;
}
.result-mark {
background-color: #e8e845;
border-radius: 2px;
color: #232629;
font-weight: bolder;
}