Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przesuwanie paginacji.
ratosluaf
post
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 4
Dołączył: 14.10.2012

Ostrzeżenie: (0%)
-----


Zrobiłem paginację do skryptu AMXBans. Problem polega na tym, że wyświetla się 10 stron, i gdy dojdę do 10, nie mogę otworzyć 11, bo nie wyświetlają się kolejne. Co zrobić, aby po dojściu do 10 strony automatycznie pokazywały się strony z przedziału 6-14?
Kod:
Kod
<?php
/**
* PHPSense Pagination Class
*
* PHP tutorials and scripts
*
* @package        PHPSense
* @author        Jatinder Singh Thind
* @copyright    Copyright (c) 2006, Jatinder Singh Thind
* @link        http://www.phpsense.com
*/

// ------------------------------------------------------------------------


class PS_Pagination {
    var $php_self;
    var $rows_per_site = 50; //Number of records to display per site
    var $total_rows = 0; //Total number of rows returned by the query
    var $links_per_site = 7; //Number of links to display per site
    var $append = ""; //Paremeters to append to pagination links
    var $sql = "";
    var $debug = false;
    var $conn = false;
    var $site = 1;
    var $max_sites = 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_site Number of records to display per site. Defaults to 10
     * @param integer $links_per_site Number of links to display per site. Defaults to 5
     * @param string $append Parameters to be appended to pagination links
     */
    
    function PS_Pagination($connection, $sql, $rows_per_site = 10, $links_per_site = 5, $append = "") {
        $this->conn = $connection;
        $this->sql = $sql;
        $this->rows_per_site = (int)$rows_per_site;
        if (intval($links_per_site ) > 0) {
            $this->links_per_site = (int)$links_per_site;
        } else {
            $this->links_per_site = 5;
        }
        $this->append = $append;
        $this->php_self = htmlspecialchars($_SERVER['PHP_SELF'] );
        if (isset($_GET['site'] )) {
            $this->site = intval($_GET['site'] );
        }
    }
    
    /**
     * 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 sites
        $this->max_sites = ceil($this->total_rows / $this->rows_per_site );
        if ($this->links_per_site > $this->max_sites) {
            $this->links_per_site = $this->max_sites;
        }
        
        //Check the site value just in case someone is trying to input an aribitrary value
        if ($this->site > $this->max_sites || $this->site <= 0) {
            $this->site = 1;
        }
        
        //Calculate Offset
        $this->offset = $this->rows_per_site * ($this->site - 1);
        
        //Fetch the required result set
        $rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_site}" );
        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 site
     *
     * @access public
     * @param string $tag Text string to be displayed as the link. Defaults to 'First'
     * @return string
     */
    function renderFirst($tag = 'Pierwsza') {
        if ($this->total_rows == 0)
            return FALSE;
        
        if ($this->site == 1) {
            return "$tag";
        } else {
            return '<a href="' . $this->php_self . '?site=1&' . $this->append . '">' . $tag . '</a> ';
        }
    }
    
    /**
     * Display the link to the last site
     *
     * @access public
     * @param string $tag Text string to be displayed as the link. Defaults to 'Last'
     * @return string
     */
    function renderLast($tag = 'Ostatnia') {
        if ($this->total_rows == 0)
            return FALSE;
        
        if ($this->site == $this->max_sites) {
            return '';
        } else {
            return '<span class="site_link"> <a href="' . $this->php_self . '?site=' . $this->max_sites . '&' . $this->append . '">' . $this->max_sites . '</a></span>';
        }
    }
    
    /**
     * Display the next link
     *
     * @access public
     * @param string $tag Text string to be displayed as the link. Defaults to '>>'
     * @return string
     */
    function renderNext($tag = '...') {
        if ($this->total_rows == 0)
            return FALSE;
        
        if ($this->site < $this->max_sites) {
            return '<span class="site_link">'. $tag .'</span>';
        } else {
            return '';
        }
    }
    
    /**
     * 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;
    }
    
    /**
     * Display the site links
     *
     * @access public
     * @return string
     */
    function renderNav($prefix = '<span class="site_link">', $suffix = '</span>') {
        if ($this->total_rows == 0)
            return FALSE;
        
        $batch = ceil($this->site / $this->links_per_site );
        $end = $batch * $this->links_per_site;
        if ($end == $this->site) {
            //$end = $end + $this->links_per_site - 1;
        //$end = $end + ceil($this->links_per_site/2);
        }
        if ($end > $this->max_sites) {
            $end = $this->max_sites;
        }
        $start = $end - $this->links_per_site + 1;
        $links = '';
        
        for($i = $start; $i <= $end; $i ++) {
            if ($i == $this->site) {
                $links .= $prefix . "$i" . $suffix;
            } else {
                $links .= '' . $prefix . '<a href="' . $this->php_self . '?site=' . $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;
    }
}
?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


W zasadzie masz dwie opcje:
1. Nauczyć się PHP i samemu poprawić gotowca
2. Stworzyć odpowiedni temat w dziale Giełda, gdzie ktoś za pewną sumę pieniędzy zrobi to za Ciebie

Ten post edytował CuteOne 29.10.2012, 00:41:37
Go to the top of the page
+Quote Post
ratosluaf
post
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 4
Dołączył: 14.10.2012

Ostrzeżenie: (0%)
-----


Było też trzecie wyjście, użyć innej klasy paginacji, dokładnie zebry.
Mimo wszystko dzięki za pomoc, a temat powinien pójść do zamknięcia.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 16:47