【发布时间】:2017-02-21 08:12:45
【问题描述】:
我在整个文档中使用引导程序,我也将它用于分页。
这个链接很棒:PHP & MySQL Pagination 它帮助我编写了很多分页方法(我正在使用 postgre,我改变了一些东西)。
当我为分页打印每个按钮时,我使用的是引导程序的代码: http://www.w3schools.com/bootstrap/bootstrap_pagination.asp
<ul class=\"pagination pagination-sm\">$links</ul>
和:
$links .= ($i != $page ) ? "<li><a href='$explode[0]$final$i'>$i</a><li> " : "";
用于将新字符串连接到 $links 变量(当然首先是 this 然后回显 $links)。
注意:我使用 explode() 是因为我得到了我的 URL,并且我修复了 &page=
我的问题是:
如何减少每页显示的按钮数量?
目前我的情况是屏幕截图中的情况。 我很想得到类似的东西:
[current][2][3][4][5]...[61][62]
编辑:
我将代码更改为“当前”:
if ($i != $page) {
$links.="<li><a href='$explode[0]$final$i'>$i</a><li>";
} else {
$links.="<li class=\"active\"><a href='#'>current</a><li>";
}
}
编辑:
由于第一个解决方案添加了新图像(它现在是黑色的,因为我同时更改了主题)。
编辑:添加php代码。
$perPage = addslashes(strip_tags(@$_GET["perPage"]));
$page = addslashes(strip_tags(@$_GET['page'])) ?: '1';
$startAt = $perPage * ($page - 1);
SWITCH ($direction){
case "SENT":
$count = "SELECT count(*) as total, 'SENT' as direction FROM sent WHERE date >= '$fdate' AND date <= '$tdate' AND identification LIKE '%$identification%' ";
$query = "SELECT *,'SENT' as direction FROM sent WHERE date >= '$fdate' AND date <= '$tdate' AND identification LIKE '%$identification%' ";
break;
}
$res = pg_fetch_assoc(pg_query($conn, $count));
$total = ceil($res['total'] / $perPage);
if (empty($total1)) { $total1 = '0'; } else { $total1 = ceil($res['total1'] / $perPage); }
$totalPages = $total + $total1;
$links = "";
$absolute_url = full_url( $_SERVER );
for ($i = 1; $i <= $totalPages; $i++) {
$explode = explode("&page=", $absolute_url);
$final="&page=";
if ($i != $page) {
$links.="<li><a href='$explode[0]$final$i'>$i</a><li>";
} else {
$links.="<li class=\"active\"><a href='#'>current</a><li>";
}
}
$query .= "order by date DESC OFFSET '$startAt' LIMIT '$perPage' ";
$result = pg_query($conn, $query);
编辑: 在jquery中发现问题: 它永远不会加载,但是当我在 document=ready 状态调用该函数时,它会加载。
<script>
$(document).ready(function(){
$('#paginateblock').css('margin-left','-110px');
});
</script>
我需要它始终工作,不仅是在文档“准备好”时,而是在每次点击“paginateblock”或每次更改页面时。
有人可以帮忙吗?
解决方案 #1: 感谢 S Gandhe 的帮助,为我提供了他的代码,我将其复制到这里并进行更正。
for ($i = 1; $i <= $totalPages; $i++) {
if($page >= 7){
$start = $page -4;
} else {
$start = $i;
}
$end = ($start + 7 < $totalPages)?($start + 7):$totalPages;
for ($start; $start <= $end ; $start++) {
$explode = explode("&page=", $absolute_url);
$final="&page=";
$css_class = ($page == $start ) ? "class='active'" : "";
$links .= "<li><a href='$explode[0]$final$start'>$start</a><li>";
}
}
CSS: [<li> 的 css 没有改变]
#page-selection{
width:350px;
height:36px;
overflow:hidden;
}
HTML/PHP
<div id="page-selection"><?php echo "<ul class=\"pagination pagination-sm\">$links</ul>"; ?></div>
解决方案 #2 - 最终:
我对代码进行了更多修改,分页按钮位于<div> 内,并且内容对齐。
此外,始终显示第 1 页和 #lastpage。
代码:
for ($i = 1; $i <= $totalPages; $i++) {
if($page >= 4){
$start = $page -3;
} else {
$start = $i;
}
$end = ($start + 6 < $totalPages)?($start + 6):$totalPages;
for ($start; $start <= $end ; $start++) {
$explode = explode("&page=", $absolute_url);
$final="&page=";
$css_class = ($page == $start ) ? "class='active'" : "";
$links .= "<li><a href='$explode[0]$final$start'>$start</a></li>";
}
$firstpage = "<li><a href='$explode[0]$final'1><<</a></li>";
$lastpage = "<li><a href='$explode[0]$final$totalPages'>>></a></li>";
}
HTML:
<div id="page-selector">
<div class="page-selector-field"><?php echo "<ul class=\"pagination pagination-sm\">$firstpage</ul>"; ?></div>
<div id="page-selection" class="page-selector-field"><?php echo "<ul class=\"pagination pagination-sm\">$links</ul>"; ?></div>
<div class="page-selector-field"><?php echo "<ul class=\"pagination pagination-sm\">$lastpage</ul>"; ?></div>
</div>
CSS:
#page-selection{
width:344px;
height:36px;
overflow:hidden;
}
#page-selector{
width: 450px;
height:36px;
overflow:hidden;
/*margin: 0 auto; uncomment this if you want this bar centered */
}
.page-selector-field{
width:50px;
height:36px;
overflow:hidden;
float: left;
}
ul.pagination {
display: inline-block;
padding: 0;
margin: 0;
}
ul.pagination li {
display: inline;
width: 50px;
}
ul.pagination li a {
display: block;
width: 50px;
text-align:center;
float: left;
padding: 8px 16px;
text-decoration: none;
}
【问题讨论】:
-
您能否明确说明您想显示哪些链接?如果当前链接不是第一个怎么办?如果您不想显示所有链接,请不要遍历所有可能的页面。
-
当我截取屏幕截图时,我在第 54 页(您会注意到它丢失了)。取而代之的是,我将其更改为当前,这很容易。剩下的我需要帮助。我不是在想一种方法来“不循环播放,一次只打印 7 页”,或者“循环播放所有但一次只显示 X 页”让我们说
-
这不是 Bootstrap 问题,您需要修改您的 PHP 代码以仅输出您想要的页数。请包含生成页面数组的php代码。
-
已完成,希望对您有所帮助!谢谢!
标签: php pagination