ページネーション
このコミットが含まれているのは:
コミット
5ccefe2005
|
@ -10,6 +10,9 @@
|
||||||
$title = $_GET['q'].'の検索';
|
$title = $_GET['q'].'の検索';
|
||||||
$linktype = 'side';
|
$linktype = 'side';
|
||||||
$q = htmlspecialchars($_GET['q']);
|
$q = htmlspecialchars($_GET['q']);
|
||||||
|
$limit = 10;
|
||||||
|
$offset = (isset($_GET['page']) ? (int)$_GET['page']-1 : 0) * $limit;
|
||||||
|
$totalpages = 0;
|
||||||
$res = [];
|
$res = [];
|
||||||
|
|
||||||
$mysqli = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
|
$mysqli = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
|
||||||
|
@ -19,21 +22,32 @@
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($pages = mysqli_prepare($mysqli, "SELECT * FROM website_page WHERE title LIKE ? OR body LIKE ?")) {
|
$tq = explode(' ', $q);
|
||||||
$lq = "%$q%";
|
$lq = '';
|
||||||
mysqli_stmt_bind_param($pages, "ss", $lq, $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_execute($pages);
|
||||||
mysqli_stmt_bind_result($pages, $wpid, $webid, $pageurl, $pagetit, $pagebody);
|
mysqli_stmt_bind_result($pages, $wpid, $webid, $pageurl, $pagetit, $pagebody);
|
||||||
mysqli_execute($pages);
|
mysqli_execute($pages);
|
||||||
|
|
||||||
while (mysqli_stmt_fetch($pages)) {
|
while (mysqli_stmt_fetch($pages)) {
|
||||||
$cq = strtoupper($q);
|
$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);
|
$pagebody = explode($cq, $pagebody);
|
||||||
$tmppb = '';
|
$tmppb = '';
|
||||||
|
|
||||||
foreach ($pagebody as $k => $v) {
|
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]) ? ' ' : '');
|
else $tmppb .= mb_substr($pagebody[$k], 0, 200).'…'.(isset($pagebody[$k+1]) ? ' ' : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +88,11 @@
|
||||||
</div>
|
</div>
|
||||||
<?php } ?>
|
<?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
|
<?php
|
||||||
require_once('../include/footer.php');
|
require_once('../include/footer.php');
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -60,25 +60,47 @@ input[type="text"]:hover, input[type="submit"]:hover {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result {
|
.result, .pagination {
|
||||||
background-color: #035444;
|
background-color: #035444;
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
transition: background-color .3s;
|
transition: background-color .3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result > a {
|
.result {
|
||||||
transition: color .3s;
|
padding: 8px;
|
||||||
|
box-shadow: 1px 4px 3px 1px #000605;
|
||||||
|
transition: box-shadow .2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result:hover {
|
.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;
|
background-color: #1dd1ad;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result:hover > a {
|
.result:hover > a, .pagination:hover > a {
|
||||||
color: #035444;
|
color: #035444;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result-title {
|
.result-title {
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.result-mark {
|
||||||
|
background-color: #e8e845;
|
||||||
|
border-radius: 2px;
|
||||||
|
color: #232629;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
新しいイシューから参照