添加';上一个';和';下一个';用于PHP分页的按钮。在中间取出大量的数字

添加';上一个';和';下一个';用于PHP分页的按钮。在中间取出大量的数字,php,Php,我正在处理一个从MySQL数据库显示假日信息的网站。我已经成功地以列表格式显示了信息,并且包含了分页,每页大约有20个条目,但是因为条目太多,我最后在底部看到了大量的数字,看起来不太好看。我想知道是否有人知道如何在PHP中包含“prev”和“next”按钮,并从中间取出一些数字,替换为“…”,就像本网站在问题页面底部使用的分页格式一样 这是我的密码: <?php //connect mysql_connect('localhost', 'xxxx', 'xxxx') or die(mys

我正在处理一个从MySQL数据库显示假日信息的网站。我已经成功地以列表格式显示了信息,并且包含了分页,每页大约有20个条目,但是因为条目太多,我最后在底部看到了大量的数字,看起来不太好看。我想知道是否有人知道如何在PHP中包含“prev”和“next”按钮,并从中间取出一些数字,替换为“…”,就像本网站在问题页面底部使用的分页格式一样

这是我的密码:

<?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> &nbsp; &nbsp;</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) . '">&laquo;</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) . '">&raquo;</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传递适当的值