Pregunta

Busco una clase php paginación, he utilizado una bastante simple en el pasado y que ya no es compatible.

Me preguntaba si alguien tenía alguna recomendación?

Parece inútil para construir mi propia cuando es probable que haya tantos buenos por ahí.

¿Fue útil?

Solución 2

Después de más de búsqueda decidí que antes de utilizar una versión frameworked debería entender completamente lo que está involucrado en un paginador. Así que construí yo mismo. Gracias por las sugerencias sin embargo!

Otros consejos

Yo sugeriría Zend_Paginator por las siguientes razones

  • Se imprecisa y no requiere de toda la biblioteca.
  • La comunidad de ZF es más grande que la comunidad PEAR y está en ejecución auditorías de seguridad de código, y la liberación de versiones de mantenimiento.
  • Se separa fuentes de datos mediante el uso de la adapter, y hay numerosos ejemplos de implementaciones de patrones de interfaz de usuario para el usuario en la documentación.

PEAR :: Pager ? Ejemplos de uso aquí .

puede probar esto: Zebra_Pagination, una, Twitter Bootstrap compatibles, clase genérica de paginación escrito en PHP comprobar el enlace de abajo: http://stefangabos.ro/php-libraries/zebra-pagination

// 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;
    }
}

Uso:

$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();

Resultados:

<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">&laquo;</a> <a href="?page=' . ($page - 1) . '" title="Previous page">&lsaquo;</a>' : '<span class="disabled">&laquo;</span> <span class="disabled">&lsaquo;</span>';
    // The "forward" link
    $nextlink = ($page < $pages) ? '<a href="?page=' . ($page + 1) . '" title="Next page">&rsaquo;</a> <a href="?page=' . $pages . '" title="Last page">&raquo;</a>' : '<span class="disabled">&rsaquo;</span> <span class="disabled">&raquo;</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>';
    }



}

Es muy posible que su consulta SQL SELECT declaración puede 1,000 resultado en miles de registros. Pero no es una buena idea para mostrar todos los resultados en una sola página. Así podemos dividir este resultado en muchas páginas según el requisito como Clase paginación.

DATOS paginate CON CLASE PAGINATION MUY FÁCIL

Clase de paginación ayuda a generar paginación

Cómo utilizar paginación Clase visitar este enlace para más información http://utlearn.com/2017/02/15 / paginación de clase de uso de la paginación-clase /

<?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 ?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top