添加';上一个';和';下一个';用于PHP分页的按钮。在中间取出大量的数字
我正在处理一个从MySQL数据库显示假日信息的网站。我已经成功地以列表格式显示了信息,并且包含了分页,每页大约有20个条目,但是因为条目太多,我最后在底部看到了大量的数字,看起来不太好看。我想知道是否有人知道如何在PHP中包含“prev”和“next”按钮,并从中间取出一些数字,替换为“…”,就像本网站在问题页面底部使用的分页格式一样 这是我的密码:添加';上一个';和';下一个';用于PHP分页的按钮。在中间取出大量的数字,php,Php,我正在处理一个从MySQL数据库显示假日信息的网站。我已经成功地以列表格式显示了信息,并且包含了分页,每页大约有20个条目,但是因为条目太多,我最后在底部看到了大量的数字,看起来不太好看。我想知道是否有人知道如何在PHP中包含“prev”和“next”按钮,并从中间取出一些数字,替换为“…”,就像本网站在问题页面底部使用的分页格式一样 这是我的密码: <?php //connect mysql_connect('localhost', 'xxxx', 'xxxx') or die(mys
<?php
//connect
mysql_connect('localhost', 'xxxx', 'xxxx') or die(mysql_error());
mysql_select_db('hdb') or die(mysql_error());
//pagination
$per_page = 20;
$pages_query = mysql_query("SELECT COUNT('id') FROM `holidaytable` WHERE brandname = 'Spain'");
$count = mysql_result($pages_query, 0);
$pages = ceil(mysql_result($pages_query, 0) / $per_page);
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
$start = ($page - 1) * $per_page;
echo '<p>There are '.$count.' holidays<hr></p><br /><br />';
//construct query and insert values
$query = mysql_query("SELECT * FROM holidaytable WHERE brandname = 'Spain' LIMIT $start, $per_page") or die(mysql_error());
while($rows = mysql_fetch_assoc($query))
{
$name = $rows['name'];
$id2 = $rows['id2'];
$hotelname = $rows['hotelname'];
$desc = $rows['desc'];
$spec = $rows['spec'];
$resort = $rows['resort'];
$awtrack = $rows['awtrack'];
$awthumb = $rows['awthumb'];
$awimage = $rows['awimage'];
$mthumb = $rows['mThumb'];
$mlink = $rows['mlink'];
$mimage = $rows['mimage'];
$awcatid = $rows['awcatid'];
$mcat = $rows['mcat'];
$brandname = $rows['brandname'];
echo "$id2 <br>$name <br>$hotelname <br>$desc <br><h2>$resort, $brandname</h2><br><img src='$mthumb'><br><img src='$mimage'> <br> <a href='$awtrack' target='_blank'>link</a>";
echo "<br /><br /><hr>";
};
//pagination
if ($pages >= 1 && $page <= $pages) {
for ($x=1; $x<=$pages; $x++) {
echo ($x == $page) ? '<strong><a href="?page='.$x.'">'.$x.'</a> </strong> ' : '<a href="?page='.$x.'">'.$x.'</a> ';
}
}
mysql_close();
?>
我以前在我的一个项目中使用过此功能,请随意尝试:
我正在使用表,但如果需要,可以将其删除
<style type="text/css">
table,td { font-family:tahoma;}
a.pn {padding:4px;}
</style>
<?php
function pager($page,$rowsCount, $rowsPerPage = 10,$pageGroup = 10, $hrefPrefix='?page=')
{
$pageCount = ceil($rowsCount/$rowsPerPage);
$pageIndex = $page > 1 ? $page : 1;
$htm = array();
$htm[] = '<table class="pager" cellspacing="0" cellpadding="0" border="0">';
$htm[] = '<tr>';
$htm[] = '<td class="label"><label>Page ' . $pageIndex . ' of ' . $pageCount . '</label> </td>';
if($pageCount > 1) {
$offset = ($pageIndex % $pageGroup == 0) ? $pageIndex - 1 : $pageIndex;
$startPage = (floor($offset/$pageGroup) * $pageGroup) + 1;
$lastPage = ($startPage + $pageGroup) - 1;
if($lastPage > $pageCount){
$lastPage = $pageCount;
}
if($pageIndex > $pageGroup){
$htm[] = '<td class="prev"><a href="'. $hrefPrefix. ($startPage-1) . '">«</a></td>';
}
for($i=$startPage;$i<=$lastPage; $i++) {
if($pageIndex==$i)
$htm[] = '<td><b>' . $i . '</b></td>';
else
$htm[] = '<td><a class="pn" href="' .$hrefPrefix. $i . '">' . $i . '</a></td>';
}
if($lastPage < $pageCount) {
$htm[] = '<td class="next"><a href="' .$hrefPrefix. ($lastPage+1) . '">»</a></td>';
}
}//pagecount>1
$htm[] = '</tr>';
$htm[] = '</table>';
echo implode("\n", $htm);
}
//sample usage:
$cp = (isset($_GET['page'])) ? intval($_GET['page']) : 1;
$total_rows = 120;
pager($cp, $total_rows);
表,td{font-family:tahoma;}
a、 pn{padding:4px;}
你也可以使用。它实现了您要求的所有内容,并且您编写的代码要少得多。您可以向它传递一个Zend_Db实例,但如果您不想使用它,也可以向它传递一个PHP数组,这意味着Zend Paginator实际上是一个可以独立使用的组件,不需要任何其他Zend Framework组件。典型的设置如下所示:
$paginator = Zend_Paginator::factory($array);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage(8);
$paginator->setPageRange(3);
$paginator->setView($this->view);
在你看来:
<html>
<body>
<h1>Example</h1>
<?php if (count($this->paginator)): ?>
<ul>
<?php foreach ($this->paginator as $item): ?>
<li><?php echo $item; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php echo $this->paginationControl($this->paginator,
'Sliding',
'my_pagination_control.phtml'); ?>
</body>
</html>
实例
请参阅Zend Framework手册中的,以获取分页控件phtml
文件的示例。这很好!我已将其添加到代码的末尾,以替换底部的旧“分页”部分。然而,只有7页的数据,底部仍然显示12页。第8-12页是空白的。你知道我如何解决这个问题吗?我已经尝试将70设置为总计行数,这对我来说很有效,要有效地使用这个函数,你必须至少为$page、$rowsCount和$rowsPerPage传递适当的值