2010-03-20 35 views
1

我在看分页脚本(发布如下),发现它是gros,s,而且不是很好,尤其是在试图定制它时。这个分页脚本是涂鸦 - 我需要一个更好的!

这是主要页面的样子:

<?php 
include('config.php'); 
$per_page = 9; 

//Calculating no of pages 
$sql = "select * from messages"; 
$result = mysql_query($sql); 
$count = mysql_num_rows($result); 
$pages = ceil($count/$per_page) 
?> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/ 
libs/jquery/1.3.0/jquery.min.js"></script> 
<script type="text/javascript" src="jquery_pagination.js"></script> 

<div id="loading" ></div> 
<div id="content" ></div> 
<ul id="pagination"> 
<?php 
//Pagination Numbers 
for($i=1; $i<=$pages; $i++) 
{ 
echo '<li id="'.$i.'">'.$i.'</li>'; 
} 
?> 
</ul> 

代码的顶部从MySQL数据库得到的结果比使用这些信息在这个页面的正文中显示的数字。

我想把这样的东西放在像count_page.php这样的单独页面上,然后只包含它。

我想我的问题是,如果有更好的方法来做到上述更好的结构。更好的方法是通过db并计算结果并显示适当的数字。上面看起来很乱。

感谢您的任何帮助或建议。

回答

1

这是非常有用的分页类。 这很简单,你会明白,我敢肯定

class PS_Pagination { 
    var $php_self; 
    var $rows_per_page = 10; //Number of records to display per page 
    var $total_rows = 0; //Total number of rows returned by the query 
    var $links_per_page = 5; //Number of links to display per page 
    var $append = ""; //Paremeters to append to pagination links 
    var $sql = ""; 
    var $debug = false; 
    var $conn = false; 
    var $page = 1; 
    var $max_pages = 0; 
    var $offset = 0; 

    /** 
    * Constructor 
    * 
    * @param resource $connection Mysql connection link 
    * @param string $sql SQL query to paginate. Example : SELECT * FROM users 
    * @param integer $rows_per_page Number of records to display per page. Defaults to 10 
    * @param integer $links_per_page Number of links to display per page. Defaults to 5 
    * @param string $append Parameters to be appended to pagination links 
    */ 

    function PS_Pagination($connection, $sql, $rows_per_page = 10, $links_per_page = 5, $append = "") { 
     $this->conn = $connection; 
     $this->sql = $sql; 
     $this->rows_per_page = (int)$rows_per_page; 
     if (intval($links_per_page) > 0) { 
      $this->links_per_page = (int)$links_per_page; 
     } else { 
      $this->links_per_page = 5; 
     } 
     $this->append = $append; 
     $this->php_self = htmlspecialchars($_SERVER['PHP_SELF']); 
     if (isset($_GET['page'])) { 
      $this->page = intval($_GET['page']); 
     } 
    } 

    /** 
    * Executes the SQL query and initializes internal variables 
    * 
    * @access public 
    * @return resource 
    */ 
    function paginate() { 
     //Check for valid mysql connection 
     if (! $this->conn || ! is_resource($this->conn)) { 
      if ($this->debug) 
       echo "MySQL connection missing<br />"; 
      return false; 
     } 

     //Find total number of rows 
     $all_rs = @mysql_query($this->sql); 
     if (! $all_rs) { 
      if ($this->debug) 
       echo "SQL query failed. Check your query.<br /><br />Error Returned: " . mysql_error(); 
      return false; 
     } 
     $this->total_rows = mysql_num_rows($all_rs); 
     @mysql_close($all_rs); 

     //Return FALSE if no rows found 
     if ($this->total_rows == 0) { 
      if ($this->debug) 
       echo "Query returned zero rows."; 
      return FALSE; 
     } 

     //Max number of pages 
     $this->max_pages = ceil($this->total_rows/$this->rows_per_page); 
     if ($this->links_per_page > $this->max_pages) { 
      $this->links_per_page = $this->max_pages; 
     } 

     //Check the page value just in case someone is trying to input an aribitrary value 
     if ($this->page > $this->max_pages || $this->page <= 0) { 
      $this->page = 1; 
     } 

     //Calculate Offset 
     $this->offset = $this->rows_per_page * ($this->page - 1); 

     //Fetch the required result set 
     $rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}"); 
     if (! $rs) { 
      if ($this->debug) 
       echo "Pagination query failed. Check your query.<br /><br />Error Returned: " . mysql_error(); 
      return false; 
     } 
     return $rs; 
    } 

    /** 
    * Display the link to the first page 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to 'First' 
    * @return string 
    */ 
    function renderFirst($tag = 'First') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page == 1) { 
      return "$tag "; 
     } else { 
      return '<a href="' . $this->php_self . '?page=1&' . $this->append . '">' . $tag . '</a> '; 
     } 
    } 

    /** 
    * Display the link to the last page 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to 'Last' 
    * @return string 
    */ 
    function renderLast($tag = 'Last') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page == $this->max_pages) { 
      return $tag; 
     } else { 
      return ' <a href="' . $this->php_self . '?page=' . $this->max_pages . '&' . $this->append . '">' . $tag . '</a>'; 
     } 
    } 

    /** 
    * Display the next link 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to '>>' 
    * @return string 
    */ 
    function renderNext($tag = '&gt;&gt;') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page < $this->max_pages) { 
      return '<a href="' . $this->php_self . '?page=' . ($this->page + 1) . '&' . $this->append . '">' . $tag . '</a>'; 
     } else { 
      return $tag; 
     } 
    } 

    /** 
    * Display the previous link 
    * 
    * @access public 
    * @param string $tag Text string to be displayed as the link. Defaults to '<<' 
    * @return string 
    */ 
    function renderPrev($tag = '&lt;&lt;') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     if ($this->page > 1) { 
      return ' <a href="' . $this->php_self . '?page=' . ($this->page - 1) . '&' . $this->append . '">' . $tag . '</a>'; 
     } else { 
      return " $tag"; 
     } 
    } 

    /** 
    * Display the page links 
    * 
    * @access public 
    * @return string 
    */ 
    function renderNav($prefix = '<span class="page_link">', $suffix = '</span>') { 
     if ($this->total_rows == 0) 
      return FALSE; 

     $batch = ceil($this->page/$this->links_per_page); 
     $end = $batch * $this->links_per_page; 
     if ($end == $this->page) { 
      //$end = $end + $this->links_per_page - 1; 
     //$end = $end + ceil($this->links_per_page/2); 
     } 
     if ($end > $this->max_pages) { 
      $end = $this->max_pages; 
     } 
     $start = $end - $this->links_per_page + 1; 
     $links = ''; 

     for($i = $start; $i <= $end; $i ++) { 
      if ($i == $this->page) { 
       $links .= $prefix . " $i " . $suffix; 
      } else { 
       $links .= ' ' . $prefix . '<a href="' . $this->php_self . '?page=' . $i . '&' . $this->append . '">' . $i . '</a>' . $suffix . ' '; 
      } 
     } 

     return $links; 
    } 

    /** 
    * Display full pagination navigation 
    * 
    * @access public 
    * @return string 
    */ 
    function renderFullNav() { 
     return $this->renderFirst() . '&nbsp;' . $this->renderPrev() . '&nbsp;' . $this->renderNav() . '&nbsp;' . $this->renderNext() . '&nbsp;' . $this->renderLast(); 
    } 

    /** 
    * Set debug mode 
    * 
    * @access public 
    * @param bool $debug Set to TRUE to enable debug messages 
    * @return void 
    */ 
    function setDebug($debug) { 
     $this->debug = $debug; 
    } 
} 
+0

谢谢,这比我有一个更好。 – ClarkSKent 2010-03-20 22:08:52

+0

不客气。 – Simon 2010-03-20 23:22:56