【问题标题】:This pagination script is doodoo - I need a better one!这个分页脚本是 doodoo - 我需要一个更好的!
【发布时间】:2010-07-09 11:22:31
【问题描述】:

我正在查看分页脚本(发布在下面),发现它很糟糕,而且一点也不太好,尤其是在尝试自定义它时。

这是主页的样子:

<?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 db 中获取结果,然后使用此信息在此页面的正文中显示数字。

我正在尝试将这样的内容放在单独的页面上,例如 count_page.php,然后将其包含在内。

我想我的问题是,如果有更好的方法来做上述更好的结构。一种更好的方法来遍历数据库并计算结果并显示适当的数字。上面看起来很乱。

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

【问题讨论】:

    标签: php jquery pagination


    【解决方案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;
        }
    }
    

    【讨论】:

    • 谢谢,比我的那个好多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2022-08-11
    • 1970-01-01
    相关资源
    最近更新 更多