Я ищу класс pg pgination, я использовал довольно простой в прошлом, и он больше не поддерживается.
Мне было интересно, есть ли у кого-нибудь рекомендации?
Кажется бессмысленным строить свои собственные, когда есть, вероятно, так много хороших там.
После большего поиска я решил, что до того, как я использую каркасную версию, я должен полностью понять, что связано с paginator. Поэтому я сам построил. Спасибо за предложения, хотя!
Я бы предложил Zend_Paginator по следующим причинам
Вы пробовали PEAR :: Pager ? Примеры использования здесь .
// pagination class class Pagination { // database handle private $dbh; // total records in table private $total_records; // limit of items per page private $limit; // total number of pages needed private $total_pages; // first and back links private $firstBack; // next and last links private $nextLast; // where are we among all pages? private $where; public function __construct($dbh) { $this->dbh = $dbh; } // determines the total number of records in table public function totalRecords($query, array $params) { $stmt = $this->dbh->prepare($query); $stmt->execute($params); $this->total_records = $stmt->fetchAll(PDO::FETCH_COLUMN)[0]; if (!$this->total_records) { echo 'No records found!'; return; } } // sets limit and number of pages public function setLimit($limit) { $this->limit = $limit; // determines how many pages there will be if (!empty($this->total_records)) { $this->total_pages = ceil($this->total_records / $this->limit); } } // determine what the current page is also, it returns the current page public function page() { $pageno = (int)(isset($_GET['pageno'])) ? $_GET['pageno'] : $pageno = 1; // out of range check if ($pageno > $this->total_pages) { $pageno = $this->total_pages; } elseif ($pageno < 1) { $pageno = 1; } // links if ($pageno > 1) { // backtrack $prevpage = $pageno -1; // 'first' and 'back' links $this->firstBack = "<div class='first-back'><a href='$_SERVER[PHP_SELF]?pageno=1'>First</a> <a href='$_SERVER[PHP_SELF]?pageno=$prevpage'>Back</a></div>"; } $this->where = "<div class='page-count'>(Page $pageno of $this->total_pages)</div>"; if ($pageno < $this->total_pages) { // forward $nextpage = $pageno + 1; // 'next' and 'last' links $this->nextLast = "<div class='next-last'><a href='$_SERVER[PHP_SELF]?pageno=$nextpage'>Next</a> <a href='$_SERVER[PHP_SELF]?pageno=$this->total_pages'>Last</a></div>"; } return $pageno; } // get first and back links public function firstBack() { return $this->firstBack; } // get next and last links public function nextLast() { return $this->nextLast; } // get where we are among pages public function where() { return $this->where; } }
Использование:
$pagination = new Pagination($dbh); $pagination->totalRecords('SELECT COUNT(*) FROM `photos` WHERE `user` = :user', array(':user' => $_SESSION['id'])); $pagination->setLimit(12); $pagination->page(); echo $pagination->firstBack(); echo $pagination->where(); echo $pagination->nextLast();
Результат:
<div class='first-back'><a href='/xampp/web_development/new_study_2014/imagebox2016/app/public/test.php?pageno=1'>First</a> <a href='/xampp/web_development/new_study_2014/imagebox2016/app/public/test.php?pageno=3'>Back</a></div> <div class='page-count'>(Page 4 of 6)</div> <div class='next-last'><a href='/xampp/web_development/new_study_2014/imagebox2016/app/public/test.php?pageno=5'>Next</a> <a href='/xampp/web_development/new_study_2014/imagebox2016/app/public/test.php?pageno=6'>Last</a></div>
public function make_pagination() { $total = 0; $query = "SELECT COUNT(downloads.dn_id) FROM downloads WHERE downloads.dn_type = 'audios'"; $stmt = $this->conn->prepare($query); $stmt->execute(); $total = $stmt->fetchColumn(); //echo 'row_count = ' . $total; // How many items to list per page $limit = 11; // How many pages will there be $pages = ceil($total / $limit); // What page are we currently on? $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array( 'options' => array( 'default' => 1, 'min_range' => 1, ), ))); // Calculate the offset for the query $offset = ($page - 1) * $limit; // Some information to display to the user $start = $offset + 1; $end = min(($offset + $limit), $total); // The "back" link $prevlink = ($page > 1) ? '<a href="?page=1" title="First page">«</a> <a href="?page=' . ($page - 1) . '" title="Previous page">‹</a>' : '<span class="disabled">«</span> <span class="disabled">‹</span>'; // The "forward" link $nextlink = ($page < $pages) ? '<a href="?page=' . ($page + 1) . '" title="Next page">›</a> <a href="?page=' . $pages . '" title="Last page">»</a>' : '<span class="disabled">›</span> <span class="disabled">»</span>'; // Display the paging information echo '<div id="paging"><p>'.$prevlink.' Page '.$page.' of '.$pages. ' pages'. $nextlink.' </p></div>'; //prepare the page query $query2 = " SELECT * FROM downloads, map_artists, song_artists WHERE map_artists.dn_id = downloads.dn_id AND song_artists.artist_id = map_artists.artist_id AND downloads.dn_type = 'audios' GROUP BY downloads.dn_id ORDER BY downloads.dn_time DESC LIMIT :limit OFFSET :offset "; $stmt2 = $this->conn->prepare($query2); $stmt2->bindParam(':limit', $limit, PDO::PARAM_INT); $stmt2->bindParam(':offset', $offset, PDO::PARAM_INT); $stmt2->execute(); // Do we have any results? if ($stmt2->rowCount() > 0) { // Define how we want to fetch the results $stmt2->setFetchMode(PDO::FETCH_ASSOC); $iterator = new IteratorIterator($stmt2); // Display the results foreach ($iterator as $row) { echo '<p>'. $row['dn_title'].' - '. $row['artist_name'].'</p>'; } } else { echo '<p>No results could be displayed.</p>'; } }
вы можете попробовать следующее: Zebra_Pagination, общий, Twitter Bootstrap, класс разбивки на страницы, написанный на PHP, проверить ссылку ниже: http://stefangabos.ro/php-libraries/zebra-pagination
Очень возможно, что ваш запрос SQL SELECT может 1000 привести к тысячам записей. Но не стоит показывать все результаты на одной странице. Таким образом, мы можем разделить этот результат на многие страницы по требованию как класс разбиения на страницы.
PAGINATE DATA WITH PAGINATION CLASS ОЧЕНЬ ЛЕГКО
Класс разбиения на страницы помогает генерировать пейджинг
Как использовать класс разбиения на страницы, перейдите по этой ссылке для получения дополнительной информации http://utlearn.com/2017/02/15/pagination-class-use-pagination-class/
<?php /** * @package pagination class * @version 1.0 */ /* @class Name: pagination @Author: Ahmed Mohamed @Version: 1.0 @Author URI: https://www.fb.com/100002349977660 @Website URI: http://www.utlearn.com @class page URI: http://utlearn.com/2017/02/15/pagination-class-use-pagination-class */ include_once 'libs/config.php'; include_once 'libs/Database.php'; include_once 'libs/Model.php'; include_once 'libs/pagination.php'; if(!empty($_GET["page"]) and is_numeric($_GET["page"])){ $page = htmlspecialchars(strip_tags($_GET["page"])); } else { $page = 1; } // news = table name / you page URL / current page / true or false for full query // its false i just use table name $pag = new pagination("news", URL."?page=", 3, $page, false); $pagination = $pag->pagination(); $data = $pag->data(); ?> <news> <?php foreach($data as $news){ ?> <header><h1><?=$news->title ?></h1> | <span><?=$news->date ?></span></header> <div> <?=$news->content ?> </div> <?php } ?> </news> <?=$pagination ?>