Clase para el paginado de datos obtenidos mediante consulta SQL o desde un objeto o array de datos.

Objectos

query: URL de cada enlace del paginador, al final se añade $page para pasar a 'registers'
records: Número de resultados de la consulta.
scroll: Número de enlaces (páginas) entre los botones de avance y retroceso del paginador.
registers: Número de resultados por página, si se omite se utiliza el valor por defecto.
current: Página actual, si se omite se toma 1 por defecto.
size: Tamaño del estilo bootstram (lg|sm) - Por defecto se usa el tamaño normal.
first: Icono alternativo para ir al primer registro.
previous: Icono alternativo para ir al anteror registro.
next: Icono alternativo para ir al siguiente registro.
last: Icono alternativo para ir al último registro.
icons: Iconos para los botones (glyphicon|fa|mdi) - por defecto se usan caracteres ASCII
pad: Opción válida en getPager() y showPager() para desplazar (padding) la barra del paginador...
        Si es numérico se desplaza por ese valor hacia la derecha.
        Si se indica "right" la barra se alinea flotando a la derecha.
margin_top: Margen de espacio sobre la barra (10px por defecto).
margin_bottom: Margen de espacio debajo de la barra (10px por defecto).
disable: true descoencta el paginador.
limit_start: Devuelve el valor inicial de que necesita LIMIT para la consulta SQL.
dataset: Objeto o array para generar un paginado (alternativa a usar SQL).
data: Contiene el conjunto de datos de la página actual cuando se usa dataset.
preserve_keys: true mantiene las claves del array del set de datos, cuando no son numéricas igualmente mantiene las originales
return_object: Devuelve los datos como un objeto
pages_count_txt: Texto para generar el texto de la cuenta de páginas con dos %s
                               Por ejemplo "Página %s de %s" devolvería:
                              "Página 3 de 4" en el objeto pager->pages_count.
records_count_txt: Texto para generar el texto de la cuenta de registros con dos %s.
                                 por ejemplo "Productos %s al %s de %s" devolvería:
                                "Productos 21 al 30 de 38" en el objeto pager->records_count.
pages_count: Contiene el texto de la página actual y número de páginas.
records_count: Contiene el texto del número de registros de la página actual.
pageid: Añade un índice a la propia página al final del enlace, p.e., /index.php?page2#pageid


Métodos

initPager(): Inicializa el paginador actual.
object2Array(): Covierte un objeta en array recursivamente
limitStart(): Registro de inicio para la cláusula LIMIT de la consulta SQL.
getPager(): Devuelve el paginador.
showPager(): Muestra el paginador.

 

 

Ejemplo de uso:

//Cuenta los registros de la tabla SQL
$records = $wv->db->get_var("SELECT count(id) FROM tabla");

//Configuración del paginador class_pager
$config['query'] = "/$wv->pageAlias?page=";
$config['records'] = $records;
$config['current'] = $page;
$config['registers'] = 20; //registros por página
$config['scroll'] = 5; //número de páginas de la barra del paginador
$config['pages_count_txt'] = "Página %s de %s";
$config['records_count_txt'] = 'Productos %s al %s de %s';

//Inicializa el paginado actual
$wv->initPager($config);

//Consulta SQL para los datos de la página
$results = $wv->db->get_results("SELECT * FROM tabla ORDER BY $orden 
           LIMIT {$wv->pager->limitStart}, {$wv->pager->registers}");

//Bucle con los resultados
foreach ((object)$results as $r) { 
    echo "$r->nombre $r->apellido
";
}

//Muestra el número de página y registros
echo $wv->pager->pages_count.' -> '.$wv->pager->records_count;
$wv->showPager();



//EOF
 

Se puede suministrar un objeto o array al paginador en vez de usar MySQL y la función hará el paginado y devolverá los datos de la página actual.

De esta forma es posible, por ejemplo, paginar el resultado de funciones o de datos recibidos por otros medios, por ejemplo de una API.

Hay que tener en cuenta que en este caso el paginado lo hace el método en memoria, lo que podría causar problemas con conjuntos de datos muy grandes.

Ejemplo de uso con dataset:

//Base de datos de prueba
$data['Strange'] = ['nombre'=>'Stephen','apellido'=>'Strange'];
$data['Thor'] = ['nombre'=>'Thor','apellido'=>'Odinson'];
$data['Ironman'] = ['nombre'=>'Tony','apellido'=>'Stark'];
$data['Antman'] = ['nombre'=>'Henry','apellido'=>'Pym'];
$data['Wasp'] = ['nombre'=>'Jane','apellido'=>'Van Dyne'];
$data['Hulk'] = ['nombre'=>'Bruce','apellido'=>'Banner'];
$data['Hawkeye'] = ['nombre'=>'Clint','apellido'=>'Barton'];
$data['Scarlet Witch'] = ['nombre'=>'Wanda','apellido'=>'Maximoff'];
$data['Black Widow'] = ['nombre'=>'Natasha','apellido'=>'Romanoff'];
$data['Fury'] = ['nombre'=>'Nick','apellido'=>'Fury'];
$data['Spiderman'] = ['nombre'=>'Peter','apellido'=>'Parker'];
$data['Wolvering'] = ['nombre'=>'Logan','apellido'=>'Howlett'];
$data['Deadpool'] = ['nombre'=>'Wade','apellido'=>'Wilson'];
$data['Captain America'] = ['nombre'=>'Steve','apellido'=>'Rogers'];

//Se puede convertir el array a objeto para las pruebas, descomentando la siguiente línea:
//$data = json_decode(json_encode($data));

//Configuración
$config['query'] = "/$wv->pageAlias?page=";
$config['dataset'] = $data; //Datos a paginar, array u objeto
$config['preserve_keys'] = true; //Conserva las claves del objeto
$config['return_object'] = true; //Devuelve los datos como un objeto
$config['current'] = $page;
$config['registers'] = 6;
$config['scroll'] = 3; //número de páginas de la barra del paginador
$config['pages_count_txt'] = "Página %s de %s";
$config['records_count_txt'] = 'Productos %s al %s de %s';

//Inicializa el paginado actual
$wv->initPager($config);
    
//Recorre los registros de la página actual
if (!empty($wv->pager->records)) {
    foreach ($wv->pager->data as $k => $v) {
        if (is_array($v)) {
            echo "(array)[$k] = {$v['nombre']} {$v['apellido']}
";
        }
        if (is_object($v)) {
            echo "(object)->$k = $v->nombre $v->apellido
";
        }
    }
}

//Muestra el número de página y registros
echo $wv->pager->pages_count.' -> '.$wv->pager->records_count;
$wv->showPager();



//EOF
 

Ejemplo de uso alternativo, inicializando directamente los objetos del paginador en vez de usar un array de configuración.

// Para cargar los parámetros como objetos es necesario inicializar la clase previamente
$wv->initClass(['class_name'=>'pager'],1);

//Configura objetos de la clase
$wv->pager->query = "/$wv->pageAlias?page=";
$wv->pager->dataset = $wv->get_products();//(obtiene un array u objeto de una función)
$wv->pager->current = $page;
$wv->pager->registers = 10;
$wv->pager->scroll = 5; //número de páginas de la barra del paginador
$wv->pager->pages_count_txt = "Página %s de %s";
$wv->pager->records_count_txt = "Productos %s al %s de %s";
$wv->pager->init();

//Inicializa el paginador actual
$wv->initPager();

//Recorre los registros de la página actual
if (!empty($wv->pager->records)) {
    foreach ($wv->pager->data as $r) {
        echo "$r->nombre $r->apellido
";
    }
}

//Muestra el número de página y registros
echo $wv->pager->pages_count.' -> '.$wv->pager->records_count; 

//Muestra la barra de paginado
$wv->showPager();



//EOF