ページネーション
このコミットが含まれているのは:
コミット
5ccefe2005
|
@ -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;
|
||||
}
|
||||
|
|
新しいイシューから参照