Simplificare numerotare in Script paginare

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
adrian_ady
Mesaje:80

Simplificare numerotare in Script paginare

Salut,
Am scriptul paginare de mai jos.

Cod: Selectaţi tot

<?
class Navigation
{
    // $total_rows = total rows;
    // $page = current page, if(empty($_GET['page'])) $page=1; else $page = $_GET['page'];
    // $limit = number of rows per page, $limit != 0;
    // $this_script = file name, it must finish with '?' or '&';
    
    public function __construct()
    {
        //..
    }

    static function display($total_rows,$page,$limit,$this_script) // first page = 1
    {
        if(empty($page)) $page=1;
        if($page > 1)
        {
            echo "<a class='LinkPage pagini' href='".$this_script."page=".($page-1)."'>&nbsp; &laquo; &nbsp;</a>&nbsp;";
        }
        for($i=1;$i<=ceil($total_rows/$limit);$i++)
        {    
            if($i == $page)
                echo "<span class='page pagini'>".$i."</span>";        
            else    
                echo "<a href='".$this_script."page=".$i."' class='LinkPage pagini'>".$i."</a>";
        }
        if($page < ($total_rows/$limit))
        {
            echo "&nbsp;<a class='LinkPage pagini' href='".$this_script."page=".($page+1)."'>&nbsp; &raquo; &nbsp;</a>&nbsp;";
        }
    }
}
?>
In prezent arata asa:
<< 1 2 3 4 5 6 7 >>
si doresc ca atunci cand paginile devin numeroase sa simplific cam asa:
<< 1 2 3 ... 6 7 >>
Ce trebuie sa modific?

MarPlo Mesaje:4343
Salut
Pe site e o Clasa PHP de Paginare care are si proprietate de $range (numar de link-uri afisate in jurul paginii curente). O poti folosi; iar ca idee vezi cum e facut in metoda getLinks(), partea de cod cu instructiunea for():

Cod: Selectaţi tot

 for($x = ($currentpage - $this->range); $x <= ($currentpage + $this->range); $x++) {
// ...
} 
- Sau incearca sa inlocuieste in scriptul tau, instructiuniea for() din functia display() cu acesta:

Cod: Selectaţi tot

$pages = ceil($total_rows/$limit);
$pct = ' ... ';
for($i=1;$i<=$pages;$i++) {    
  if($i == $page) echo "<span class='page pagini'>".$i."</span>";
  else if($pages > 4 && $i > ($page + 1) && $i < ($pages -2)) { echo $pct; $pct = '';}
  else echo "<a href='".$this_script."page=".$i."' class='LinkPage pagini'>".$i."</a>";
} 

adrian_ady Mesaje:80
Am inteles, am rezolvat asa:

Cod: Selectaţi tot

tatic function display($total_rows,$page,$limit,$this_script) // first page = 1
    {
        if(empty($page)) $page=1;
        if($page > 1)
        {
            echo "<a class='LinkPage pagini' href='".$this_script."page=".($page-1)."'>&nbsp; &laquo; &nbsp;</a>&nbsp;";
        }
        for($i=1;$i<=ceil($total_rows/$limit);$i++)
        {
        $pages = ceil($total_rows/$limit);
        if($pages > 15)
        {    
            if($i == $page)
                echo "<span class='page pagini'>".$i."</span>";    
            else if(($i == ($page + 1)) AND (($i > 4) && $i < ($pages - 3)) OR ($i == 5))
                echo "&nbsp; ... &nbsp;";
            else if(($i > 4) && $i < ($pages - 3))
                echo "";
            else    
                echo "<a href='".$this_script."page=".$i."' class='LinkPage pagini'>".$i."</a>";
        }
        else
        {    
            if($i == $page)
                echo "<span class='page pagini'>".$i."</span>";        
            else    
                echo "<a href='".$this_script."page=".$i."' class='LinkPage pagini'>".$i."</a>";
        }
        }
        if($page < ($total_rows/$limit))
        {
            echo "&nbsp;<a class='LinkPage pagini' href='".$this_script."page=".($page+1)."'>&nbsp; &raquo; &nbsp;</a>&nbsp;";
        }
    }