Класс для постраничного вывода данных из mysql в браузер

Класс pagination является инструментом, который позволит Вам разбивать большие наборы результатов на несколько страниц. Пример:

code: #php
  1. <?php
  2. $paginationObj = new pagination(total_limit);
  3. $limit = $paginationObj->paginationGetLimit();
  4.  
  5. mysql query(variable $limit goes here)
  6. $paginationObj->paginationCreatePages();
  7. ?>

Значения по умолчанию:

  • общий лимит (total_limit) = 500
  • результатов на странице = 30
  • страниц с номерами = 5

Примечание:

Работает только с динамическими url ввида: samplecode.ru/script.php?page=num или script.php?переменная=значение&страница=номер и т. п.

code: #php
  1. class pagination
  2.  {
  3.  
  4.    private $max_rows = 30;//MAXIMUM NUMBER OF DISPLAYING ITEMS
  5.    private $max_num = 5;//MAXIMUM NUMBER OF NUMERIC LINKS
  6.    private $limit;
  7.    private $maxId;//TOTAL NUMBER OF ITEMS
  8.    private $lastpage;
  9.    private $page;
  10.    private $url;
  11.    private $match = "page=";
  12.  
  13.  
  14.  public function __construct($maxId = null)
  15.  {
  16.    if(!$maxId)
  17.    {
  18.      $this->maxId = 500;
  19.    }
  20.    else
  21.    {
  22.      $this->maxId = $maxId;
  23.    }
  24.  }
  25.  
  26.  
  27.  public function getPage()
  28.  {
  29.    return $this->page;
  30.  }
  31.  
  32.  
  33.  public function paginationGetLimit()
  34.  {
  35.    $this->page = isset($_GET['page']) ? strip_tags($_GET['page']) : 1;
  36.    $this->lastpage = ceil($this->maxId / $this->max_rows);
  37.    $this->page = (int)$this->page;
  38.  
  39.    if($this->page < 1)
  40.    {
  41.      $this->page = 1;
  42.    }
  43.    elseif($this->page > $this->lastpage)
  44.    {
  45.      $this->page = $this->lastpage;
  46.    }
  47.  
  48.    return ($this->limit = 'LIMIT ' .($this->page - 1) * $this->max_rows .',' .$this->max_rows);
  49.  }
  50.  
  51.  
  52.  public function paginationCreatePages()
  53.  {
  54.    
  55.    $this->url = $_SERVER['REQUEST_URI'];//THE REQUESTED URL
  56.    $pos = strpos($this->url, $this->match);
  57.    .
  58.    echo "<div class='pagination'>";
  59.    echo "<ul>";
  60.    //NEXT ENTRIES
  61.    if ($this->page == 1)
  62.    {
  63.      //do nothing
  64.    }
  65.    else
  66.    {
  67.      $prevpage = $this->page-1;
  68.  
  69.      if($pos != '')
  70.      {
  71.        $nextUrl = str_replace($this->match.$this->page, $this->match.$prevpage, $this->url);
  72.  
  73.        echo "<li>";
  74.        echo "<a href='".$nextUrl."'>&laquo;</a>";
  75.        echo "</li> ";
  76.      }
  77.      else
  78.      {
  79.        print "The document can not create pages";
  80.        return;
  81.      }
  82.    }
  83.    //MIDDLE PAGES
  84.    if($this->lastpage != 1)
  85.    {
  86.      $max_links = $this->max_num + 1;
  87.      $h = 1;
  88.  
  89.      if($this->page > $max_links)
  90.      {
  91.        $h = (($h + $this->page) - $max_links);
  92.      }
  93.  
  94.      if($this->page >= 1)
  95.      {
  96.        $max_links = $max_links + ($this->page-1);
  97.      }
  98.  
  99.      if($max_links > $this->lastpage)
  100.      {
  101.        $max_links = $this->lastpage + 1;
  102.      }
  103.  
  104.      for($i=$h; $i<$max_links; $i++)
  105.      {
  106.        if ($i == $this->page)
  107.        {
  108.          echo "<li id='f'>";
  109.          echo $i;
  110.          echo "</li>";
  111.        }
  112.        else
  113.        {
  114.          if($pos == '')
  115.          {
  116.            if(strpos($this->url, '?') != '')
  117.            {
  118.              $specialChar = "&amp;";
  119.            }
  120.            else
  121.            {
  122.              $specialChar = "?";
  123.            }
  124.  
  125.            $currentUrl = $this->url.$specialChar.$this->match.$i;
  126.          }
  127.          else
  128.          {
  129.            $currentUrl = str_replace($this->match.$this->page, $this->match.$i, $this->url);
  130.          }
  131.  
  132.          echo "<li>";
  133.          echo "<a href='".$currentUrl."'>$i</a>";
  134.          echo "</li> ";
  135.        }
  136.      }
  137.    }
  138.    //PREVIOUS ENTRIES
  139.    if ($this->page == $this->lastpage)
  140.    {
  141.      //do nothing
  142.    }
  143.    else
  144.    {
  145.      $nextpage = $this->page + 1;
  146.  
  147.      if($pos == '')
  148.      {
  149.        if(strpos($this->url, '?') != '')
  150.        {
  151.          $specialChar = "&amp;";
  152.        }
  153.        else
  154.        {
  155.          $specialChar = "?";
  156.        }
  157.  
  158.        $prevUrl = $this->url.$specialChar.$this->match.$nextpage;
  159.      }
  160.      else
  161.      {
  162.        $prevUrl = str_replace($this->match.$this->page, $this->match.$nextpage, $this->url);
  163.      }
  164.  
  165.      echo "<li>";
  166.      echo "<a href='".$prevUrl."'>&raquo;</a>";
  167.      echo "</li> ";
  168.    }
  169.    
  170.    echo "</ul>";
  171.    echo "</div>";
  172.  }
  173.  
  174.  
  175. }
code: #css
  1. .pagination
  2.  {
  3.    width:100%;
  4.    margin-top:20px;
  5.    margin-left:10px;
  6.    clear:left
  7.  }
  8.  
  9.  .pagination ul
  10.  {
  11.    list-style-type: none;
  12.    margin:0;
  13.    padding:0;
  14.  }
  15.  
  16.  .pagination ul li
  17.  {
  18.    color:#666666;
  19.    float:left;
  20.    font: Eras Bold ITC;
  21.    font-size: 12px;
  22.    letter-spacing: .01em;
  23.  }
  24.  
  25.  .pagination ul li a
  26.  {
  27.    color: #47809E;
  28.    display: block;
  29.    margin: 0 0.1em;
  30.    padding: 2px;
  31.    padding-left: 4px;
  32.    padding-right: 4px;
  33.    text-decoration: none;
  34.  }
  35.  
  36.  li#f
  37.  {
  38.    background-color:#fff;
  39.    display: block;
  40.    margin: 0 0.1em;
  41.    padding: 2px;
  42.    padding-left: 4px;
  43.    padding-right: 4px;
  44.    text-decoration: none;
  45.    color:#666666;
  46.  }
  47.  
  48.  .pagination ul li a:hover
  49. {
  50.    text-decoration:underline;
  51.  }
Поделиться:

Похожие статьи: