Класс для постраничного вывода данных из mysql в браузер
Категория: PHP
2011-09-03 16:56:16
Класс pagination является инструментом, который позволит Вам разбивать большие наборы результатов на несколько страниц. Пример:
code: #php
- <?php
- …
- $paginationObj = new pagination(total_limit);
- $limit = $paginationObj->paginationGetLimit();
- mysql query(variable $limit goes here)
- …
- $paginationObj->paginationCreatePages();
- …
- ?>
Значения по умолчанию:
- общий лимит (total_limit) = 500
- результатов на странице = 30
- страниц с номерами = 5
Примечание:
Работает только с динамическими url ввида: samplecode.ru/script.php?page=num или script.php?переменная=значение&страница=номер и т. п.
code: #php
- class pagination
- {
- private $max_rows = 30;//MAXIMUM NUMBER OF DISPLAYING ITEMS
- private $max_num = 5;//MAXIMUM NUMBER OF NUMERIC LINKS
- private $limit;
- private $maxId;//TOTAL NUMBER OF ITEMS
- private $lastpage;
- private $page;
- private $url;
- private $match = "page=";
- public function __construct($maxId = null)
- {
- if(!$maxId)
- {
- $this->maxId = 500;
- }
- else
- {
- $this->maxId = $maxId;
- }
- }
- public function getPage()
- {
- return $this->page;
- }
- public function paginationGetLimit()
- {
- $this->page = isset($_GET['page']) ? strip_tags($_GET['page']) : 1;
- $this->lastpage = ceil($this->maxId / $this->max_rows);
- $this->page = (int)$this->page;
- if($this->page < 1)
- {
- $this->page = 1;
- }
- elseif($this->page > $this->lastpage)
- {
- $this->page = $this->lastpage;
- }
- return ($this->limit = 'LIMIT ' .($this->page - 1) * $this->max_rows .',' .$this->max_rows);
- }
- public function paginationCreatePages()
- {
- $this->url = $_SERVER['REQUEST_URI'];//THE REQUESTED URL
- $pos = strpos($this->url, $this->match);
- .
- echo "<div class='pagination'>";
- echo "<ul>";
- //NEXT ENTRIES
- if ($this->page == 1)
- {
- //do nothing
- }
- else
- {
- $prevpage = $this->page-1;
- if($pos != '')
- {
- $nextUrl = str_replace($this->match.$this->page, $this->match.$prevpage, $this->url);
- echo "<li>";
- echo "<a href='".$nextUrl."'>«</a>";
- echo "</li> ";
- }
- else
- {
- print "The document can not create pages";
- return;
- }
- }
- //MIDDLE PAGES
- if($this->lastpage != 1)
- {
- $max_links = $this->max_num + 1;
- $h = 1;
- if($this->page > $max_links)
- {
- $h = (($h + $this->page) - $max_links);
- }
- if($this->page >= 1)
- {
- $max_links = $max_links + ($this->page-1);
- }
- if($max_links > $this->lastpage)
- {
- $max_links = $this->lastpage + 1;
- }
- for($i=$h; $i<$max_links; $i++)
- {
- if ($i == $this->page)
- {
- echo "<li id='f'>";
- echo $i;
- echo "</li>";
- }
- else
- {
- if($pos == '')
- {
- if(strpos($this->url, '?') != '')
- {
- $specialChar = "&";
- }
- else
- {
- $specialChar = "?";
- }
- $currentUrl = $this->url.$specialChar.$this->match.$i;
- }
- else
- {
- $currentUrl = str_replace($this->match.$this->page, $this->match.$i, $this->url);
- }
- echo "<li>";
- echo "<a href='".$currentUrl."'>$i</a>";
- echo "</li> ";
- }
- }
- }
- //PREVIOUS ENTRIES
- if ($this->page == $this->lastpage)
- {
- //do nothing
- }
- else
- {
- $nextpage = $this->page + 1;
- if($pos == '')
- {
- if(strpos($this->url, '?') != '')
- {
- $specialChar = "&";
- }
- else
- {
- $specialChar = "?";
- }
- $prevUrl = $this->url.$specialChar.$this->match.$nextpage;
- }
- else
- {
- $prevUrl = str_replace($this->match.$this->page, $this->match.$nextpage, $this->url);
- }
- echo "<li>";
- echo "<a href='".$prevUrl."'>»</a>";
- echo "</li> ";
- }
- echo "</ul>";
- echo "</div>";
- }
- }
code: #css
- .pagination
- {
- width:100%;
- margin-top:20px;
- margin-left:10px;
- clear:left
- }
- .pagination ul
- {
- list-style-type: none;
- margin:0;
- padding:0;
- }
- .pagination ul li
- {
- color:#666666;
- float:left;
- font: Eras Bold ITC;
- font-size: 12px;
- letter-spacing: .01em;
- }
- .pagination ul li a
- {
- color: #47809E;
- display: block;
- margin: 0 0.1em;
- padding: 2px;
- padding-left: 4px;
- padding-right: 4px;
- text-decoration: none;
- }
- li#f
- {
- background-color:#fff;
- display: block;
- margin: 0 0.1em;
- padding: 2px;
- padding-left: 4px;
- padding-right: 4px;
- text-decoration: none;
- color:#666666;
- }
- .pagination ul li a:hover
- {
- text-decoration:underline;
- }
Поделиться: