我有这个用于分页的算法。
$array
变量是设置页码和限制后查询的结果集。它是PDO :: fetchAll()函数的结果。
$array["totalCount"]
包含表中所有行的计数,不仅包括该集,还包含所有行。
我想要的是限制显示的页面数量,并使其在某种程度上像谷歌风格的分页,我在网上搜索了很多类似的问题,但让我挣扎的是猜测我如何实现它在我的算法中,与其他算法有很大的不同。
提前致谢。
public static function renderPaginationBar($obj, $params) {
$array = $obj->getAll($params);
$set = $params["set"];
$perSet = $params["limit"];
$pages = ceil((int)$array["totalCount"] / (int)$perSet);
if($pages > 1 && $set <= $pages) {
$query = preg_replace('/set=\d*/i', '', http_build_query($_GET));
?>
<ul class="pagination">
<?php
if($set > 1) {
?>
<li><a href="?<?php echo $query; ?>&set=1"><<< Inicio</a></li>
<li><a href="?<?php echo $query; ?>&set=<?php echo ((int)$set - 1) ?>"><<</a></li>
<?php
}
for($i = 1; $i <= $pages; $i++) {
$class = $set == $i ? "active" : "";
?>
<li class="<?php echo $class; ?>"><a href="?<?php echo $query; ?>&set=<?php echo $i.""; ?>"><?php echo $i; ?></a></li>
<?php
}
if($set < $pages) {
?>
<li><a href="?<?php echo $query; ?>&set=<?php echo ((int)$set + 1); ?>">>></a></li>
<li><a href="?<?php echo $query; ?>&set=<?php echo $pages; ?>">Último >>></a></li>
<?php
}
?>
</ul>
<?php
}
unset($array["totalCount"]);
return $array;
}
答案 0 :(得分:3)
如果您愿意,可以尝试将其显示为“下一个”和“上一个”按钮之间的下拉列表...显示所有页码更容易..
或者您可以先获取当前页面的值,添加5并将其存储为“$ add”和减号5并将其存储为“$ minus”,然后将其插入页面按钮:
<input type="submit" value="<?php echo $page_num;?>" <?php if($pagenum > $add || $pagenum < $minus){ echo "style='display:none'";?>>
它会隐藏当前页面大于5且小于5的按钮
用此替换yor'for':
$get_add = $params["set"] + 5;
$get_minus = $params["set"] - 5;
for($i = 1; $i <= $pages; $i++) {
$class = $set == $i ? "active" : "";
?>
<li class="<?php echo $class; ?>" <?php if($i > $get_add || $i < $get_minus){ echo "style='display:none;position:absolute'";?>><a href="?<?php echo $query; ?>&set=<?php echo $i.""; ?>"><?php echo $i; ?></a></li>
<?php
}