Paginación de resultados con PHP
Cuando tenemos muchos registros y no queremos mostrar una lista de registro muy larga podemos usar paginación para mostrar los resultados de la consulta en distintas páginas. La paginación de resultados se puede conseguir con PHP.
En muchas ocasiones, cuando se presentan en una página web registros de una base de datos, se deberían mostrar demasiados registros como para colocarlos todos en una única página.
En estas ocasiones se suele paginar los resultados, quizás cientos, en distintas páginas con conjuntos de registros mucho menos numerosos. Por ejemplo, podríamos presentar los resultados en páginas de 10 elementos o 20, dependiendo de nuestras intenciones y el tipo de datos que se estén presentando. Este efecto lo has podido observar repetidas veces en los buscadores.
Para realizar este tarea es posible trabajar con PHP y MySQLi.
En el ejemplo en funcionamiento que hemos preparado para este tutorial mostramos el número total de artículos o elementos.
En cada página se muestran 6 artículos ordenados por fecha de actualización en formato descendente. En todo momento mostramos el número de página que estamos viendo.
Los enlaces de la paginación se pueden poner arriba o abajo. En el ejemplo hemos decidido ponerlo después de mostrar los artículos. Justo debajo se ve mejor y es más lógico por temas de usabilidad pero tu puedes ponerlo donde más desees.
Conexión con la base de datos
Para implementar lo que estamos comentando lo primero que debemos hacer es conectar con la base de datos que vamos a tratar y ejecutar la primera consulta. Al principio del todo, en tu archivo PHP, antes de abrir cualquier etiqueta HTML, coloca el siguiente código:
<?php
require('config.php');
$result = $connexion->query('SELECT COUNT(*) as total_products FROM product WHERE active = 1');
$row = $result->fetch_assoc();
$num_total_rows = $row['total_products'];
?>
En esta porción de código que será lo primero que se ejecute, estamos incluyendo un archivo config.php que usamos para la configuración y conexión con la base de datos. Este archivo contiene:
<?php
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'your_data_base_username');
define('DB_SERVER_PASSWORD', 'your_data_base_password');
define('DB_DATABASE', 'your_data_base_name');
define('NUM_ITEMS_BY_PAGE', 6);
$connexion = new mysqli(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);
?>
En él tan solo definimos varias constantes para conectar con la base de datos y definimos el número máximo de artículos por página. En este caso deseamos que los elementos sean paginados de 6 en 6.
Después de conectar con la base de datos, hacemos una consulta a la tabla de productos en este caso para obtener el número total de registros que depositamos en la variable $num_total_rows.
Paginación
El código más interesante debes colocarlo dentro del cuerpo de la página, dentro de la etiqueta <body>:
<?php
if ($num_total_rows > 0) {
$page = false;
//examino la pagina a mostrar y el inicio del registro a mostrar
if (isset($_GET["page"])) {
$page = $_GET["page"];
}
if (!$page) {
$start = 0;
$page = 1;
} else {
$start = ($page - 1) * NUM_ITEMS_BY_PAGE;
}
//calculo el total de paginas
$total_pages = ceil($num_total_rows / NUM_ITEMS_BY_PAGE);
//pongo el numero de registros total, el tamano de pagina y la pagina que se muestra
echo '<h3>Numero de articulos: '.$num_total_rows.'</h3>';
echo '<h3>En cada pagina se muestra '.NUM_ITEMS_BY_PAGE.' articulos ordenados por fecha en formato descendente.</h3>';
echo '<h3>Mostrando la pagina '.$page.' de ' .$total_pages.' paginas.</h3>';
$result = $connexion->query(
'SELECT * FROM product p
LEFT JOIN product_lang pl ON (pl.id_product = p.id_product AND pl.id_lang = 1)
LEFT JOIN `image` i ON (i.id_product = p.id_product AND cover = 1)
WHERE active = 1
ORDER BY date_upd DESC LIMIT '.$start.', '.NUM_ITEMS_BY_PAGE
);
if ($result->num_rows > 0) {
echo '<ul class="row items">';
while ($row = $result->fetch_assoc()) {
echo '<li class="col-lg-4">';
echo '<div class="item">';
echo '<h3>'.$row['name'].'</h3>';
...
echo '</div>';
echo '</li>';
}
echo '</ul>';
}
echo '<nav>';
echo '<ul class="pagination">';
if ($total_pages > 1) {
if ($page != 1) {
echo '<li class="page-item"><a class="page-link" href="index.php?page='.($page-1).'"><span aria-hidden="true">«</span></a></li>';
}
for ($i=1;$i<=$total_pages;$i++) {
if ($page == $i) {
echo '<li class="page-item active"><a class="page-link" href="#">'.$page.'</a></li>';
} else {
echo '<li class="page-item"><a class="page-link" href="index.php?page='.$i.'">'.$i.'</a></li>';
}
}
if ($page != $total_pages) {
echo '<li class="page-item"><a class="page-link" href="index.php?page='.($page+1).'"><span aria-hidden="true">»</span></a></li>';
}
}
echo '</ul>';
echo '</nav>';
}
?>
Parece mucho código y complicado pero si te paras a mirarlo un momento es bastante sencillo de entender.
Lo primero que hacemos es establecer y calcular variables importantes para el proceso.
- $page -> contiene el número de página actual. Puede ser falso si entramos por primera vez y estamos en la primera página.
- $start -> se calcula para obtener el límite de la consulta y su valor dependerá de la página en la que estemos.
- $total_pages -> Contiene el total de páginas.
- NUM_ITEMS_BY_PAGE -> Está en el archivo config.php definida y representa el número de elementos por página.
El número de registros totales, el número de elementos por página y la página actual se muestran por pantalla.
A continuación realizamos la consulta donde sacamos todos los productos activos ordenados por fecha de actualización en formato descendente y limitado a 6 productos. Si hay datos, recorremos los resultados para mostrar la información que nos interese de los productos.
Después del bucle, solo queda agregar el código de la paginación, que no son más que enlaces dinámicos.
La maquetación o diseño de este ejemplo está basada en la tecnología Bootstrap 4.
Hola José, saludos para ti, por casualidad tienes a mano algún ejemplo pero utilizando un cursor o utilizando la técnica keyset, es q tengo millones de registros y la paginación offset ya me es muy lenta, saludos
Hola, La verdad es que no pero si tengo un tutorial que utiliza el scroll infinito. Quizá te pueda interesar. Te dejo un enlace directo – https://www.jose-aguilar.com/blog/scroll-infinito-con-javascript-nativo-usando-fetch/
Hola, podrías facilitar la estructura de las tablas de la base de datos porfa
Hola, me gustaría poder pasarte la base de datos pero se está sacando la información de una base de datos real. La estructura la puedes ver una una instalación limpia de la plataforma ecommerce PrestaShop.
Saludos buen aporte.
Queria saber si me puedes proporcionar la base de datos del ejemplo cuando descargo el archivo no veo la base de datos.
Hola,
Lamento decir que no puedo pasarte la base de datos como tal ya que se trata de información de un sitio real.
Si te interesa, puedo localizarte la estructura de la tabla «product» pero sin contenido
Saludos
Muchas gracias por la información, yo tengo 15 000 productos y en cada pagina muestro de 10 en 10. Obviamente me salen 1500 páginas arriba en el índice. ¿Cómo puedo hacer para que solo me aparezcan 10 o 20?
En este caso, tienes que armar la lógica para mostrar en el paginador a algo como lo que sigue:
1 2 3 4 5 … 1495 1496 1497 1498 1499
En algún proyecto lo he hecho pero no recuerdo en cual. Solo tienes que pensar y cambiar la lógica de visualización de los números de la paginación.
Me lo anoto para hacer un tutorial con una solución para esto
[…] https://www.jose-aguilar.com/blog/paginacion-resultados-con-php/ […]
tengo un problema con la paginación, cuando traigo valores desde la base por un filtro, en la primer pagina me muestra los elementos de la consulta, pero cuando paso a la siguiente pagina se borra la consulta que se realizo y se muestra todo lo que contiene la base de datos, espero puedan ayudarme.
Hola,
En tu proyecto revisa bien lo que contiene en cada paso la variable $start que, en el ejemplo en funcionamiento, la puedes ver ubicada en el
.Saludos
esta bien pero le falto poner esa páginación en los comentarios xD
Hola José antes que nada quiero darte las gracias porque siempre me salvas en lo que necesito. Ahora te quería hacer una consulta para llevarlo esto a SQL Server cambie hasta llegar a la consulta y la limitación de registros. Como ahí es diferente la estructura en vez de LIMIT se utiliza el TOP pero no me funciona igual ya que los mismos primeros tres registros muestra en todas las paginas quería saber si habría otra solución?
Hola Rodrigo,
Lamento decir que en SQL Server no podría darte mucho soporte ya que nunca lo he utilizado.
Si el SQL Server funciona con SQL lo de TOP no me cuadra.
Saludos
Excelente post, funciona a la perfección con mysqli y php.
El problema que tengo es al «traducir» las sentencias mysql a wordpress, podrías ayudarme con esto:
mysql
$result = $connexion-> query(‘SELECT COUNT(*) as total_countries FROM pais’);
$row = $result->fetch_assoc();
$result = $wpdb->get_results(«SELECT * FROM $table_papi_clients LIMIT 1,5»);
$num_total_rows = $row[‘total_countries’];
wordpress
global $wpdb;
$tabla_paises = $wpdb->prefix . ‘paises’;
$row = $wpdb->get_results(«SELECT * FROM $table_paises»);
$num_total_rows = $wpdb->get_var(«SELECT COUNT(*) FROM $table_paises»);
El problema viene aquí, como sería una sentencia válida en wordpress?
//Lista con cada item
$result = $connexion->query(‘SELECT * FROM wp_pais LIMIT ‘.$start.’, ‘.NUM_ITEMS_BY_PAGE);
$result = $wpdb->get_results(«SELECT * FROM $table_paises LIMIT $start,NUM_ITEMS_BY_PAGE»);
$num_rows = $wpdb->get_var(«SELECT COUNT(*) FROM $table_papi_clients LIMIT $start,NUM_IT…»);
if ($num_rows > 0) {
echo »;
while ($row = $result) {
?¿?¿?¿? Si lo anterior estuviera bien, me faltaría mostrar los resultados de la página
Gracias de antemano
Hola,
Sería questión de probar.
La primera prueba que haría sería cambiar esto;
$num_total_rows = $wpdb->get_var(«SELECT COUNT(*) FROM $table_paises»);
y poner:
$num_total_rows = count($row);
e ir probando cosas hasta que des con el resultado.
Saludos
¿algún modo de hacer que cuando salgan tantas páginas que no quepan en lo ancho de la pantalla la paginación se autoajuste y muestre solo las que quepan? En mi caso salen 320 páginas mostrando de 20 en 20, y pues no cabe la tira de páginas en la pantalla.
Dentro del for que recorre las páginas:
for ($i=1;$i<=$total_pages;$i++) { Puedes condicionar las páginas del medio para que no salgan. Saludos
Hola
Solo paso a agradecer te tu aporte, me funciono al 100%.
https://meridaelite.com/blog/
hola por favor hay la posibilidad de adjuntar su base de datos esto nos ayudaria entende mejor.
Hola,
Lamento decir que no hay posibilidad de facilitar los datos de esta base de datos ya que estoy interactuando directamente con una tienda en linea.
Si necesitas ver la estructura de las tablas puedes descargar un PrestaShop última versión (1.7) para fijarte en las tablas ps_product y ps_product_lang.
Saludos
Hola, no entiendo muy bien la parte de
<< echo '’.strip_tags(utf8_encode($row[‘description_short’])).»;
echo ».round($row[‘price’], 2).’ EUR’; >>
Esto es cuando muestras todos los resultados, dos preguntas;
Yo tengo una base muy simple en phpmyadmin. Que campos tengo que cambiar? aqui donde se hace la llamada, al texto guardado,(la llamada he visto que se hace antes, pero que es todo en conjunto?)
la otra pregunta es; el diseño de como se muestran donde esta especificado, en el style.css, o en eso que pone .col-sm-4.
Me gusta mucho esto, fue gracias a un amigo que me recomendo esta pagina web.
Hola,
Gracias por tu mensaje.
Es posible que los campos que se usan en este ejemplo no sean iguales a los de tu base de datos. Tan solo los debes cambiar según tu necesidad.
Para el diseño estamos usando la tecnología Bootstrap y para alguna especialización el archivo styles.css que viene incluido en la descarga.
Los col-sm-4 son clases de Bootstrap.
Saludos
Soy muy novato en esto, quisiera saber si este código me sirve para esta página:
https://nicolasvesga.github.io/mariacamilaperez/index.html
No sé como implementarlo para mostrar 5 fotos por página,
Hola,
No hemos podido ver el enlace indicado. Quizás no está disponible temporalmente.
De todas formas, si las imágenes vienen de una base de datos no creo que tengas problemas para adaptar este tutorial a tu código.
Saludos
Hola Jose Aguilar la verdad me sirvio y funciona al 100 solo tengo una duda como puedo hacer para agrupar el paginador ya que si tengo no se 100 paginas se ven en lineas los numeros de las paginas y mas bien separarlas para que se vean de no se 10 en 10 paginas no se si me doy a entender gracias de antemano
Hola,
Para resolver este problema tienes 2 posibilidades:
1- Mostrar más artículos por página para disponer de menos números en el paginador.
2- Modificar el código para mostrar los números de páginas de 5 en 5, en vez de 1 o 1 como en el ejemplo en funcionamiento.
Saludos
Me sirvió amigo gracias
Jose gracias por tu publicacion me has salvado un resto, tengo el problema cuando he traido los valores de la base de datos filtrados por una categoria especifica, me sale el resultado en la primera pagina, pero en la segunda se pierde el filtro, que puedo hacer? gracias
Hola,
Si todavía necesita ayuda o soporte técnico puede enviar su solicitud junto con su código a nuestro centro de soporte técnico:
https://www.jose-aguilar.com/modulos-prestashop/es/soporte
En el caso de haber una respuesta rápida no dudaremos en responderle gratuitamente.
Saludos
y como hacemos para que no muestre las 16 paginas sino que valla mostrando digamos de 5 en 5
Hola,
En el caso del ejemplo en funcionamiento debes cambiar el valor de la variable $TAMANO_PAGINA con el valor 5.
Saludos
Hola.
Tengo un error en cuanto a los registros de la BD, ya puse los numeros para la paginacion pero la tabla no se divide, se queda tal y como esta, ¿que debo hacer?
una pregunta donde se encuentran la base de datos
Hola buenos días,
La base de datos la debes crear en tu servidor. Lo que te puede facilitar es el código de creación de la tabla que se usa en el ejemplo que es la siguiente:
CREATE TABLE `noticias` (
`idNoticia` int(10) NOT NULL,
`seccion` int(10) NOT NULL,
`titulo` varchar(75) NOT NULL,
`resumen` text NOT NULL,
`cuerpo` text NOT NULL,
`metadescripcion` text NOT NULL,
`keywords` varchar(255) NOT NULL,
`imagen` varchar(75) NOT NULL,
`lecturas` int(10) NOT NULL,
`fecha_insercion` datetime NOT NULL,
`fecha_modificacion` datetime NOT NULL,
`destacado` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Hola, muchas gracias por tu aporte, me está siendo de utilidad, pero tengo un problema y es que me muestra bien la primera página de paginación, pero cuando intento acceder a las demás me da un error 404. La página donde muestro la paginación es un template. Cómo puedo hacerlo?
Excelente explicacion sr. Aguilar.
Saludos!
Hey te pasaste mil gracias por quitarme un dolor de cabeza, graciasss….
Como lo uso? 🙁
hola buen aporte muchas gracias!, te queria hacer la pregunta si tienes una paginacion con letras y numeros
Hola,
Quizá necesites algo como lo que tenemos en el siguiente tutorial:
https://www.jose-aguilar.com/blog/search-abc/
Jose Aguilar,
Saludos
buenas noches excelente aporte.. una pregunta te dejo si quisiera agregarle un select .. como seria??
saludos
Hola que tal,
Para este tipo de ayudas que se salen de lo que hay disponible en el blog lo que podemos hacer es que nos envíes un correo a blog@jose-aguilar.com con todos los detalles para que revisemos como podemos proceder.
Saludos
Buenos días, mil gracias por el aporte.
En lugar de imprimir 10 registros por página imprime todos los registros de la BD. 111 en total.
A parte la paginación siempre esta en el uno (1), 2, 3, 4, 5, 6… no me deja avanzar página, en cambio en la url si me detecta la id (paginas.php?pagina=2,3,4,5…).
Por decirle algo más no me da ningún error, ni en la consulta, ni variables no definidas o de sintaxis.
Gracias de nuevo!!
Solucionado!!!!! como decía antes, gran aporte.
GRACIAS!!!!!
Hola José llevo tiempo estudiando por mi propia cuenta y todo lo que he aprendido fue leyendo libros viejos porque ni internet tenia, En mis quebraderos de cabeza logre hacer un paginado sin mirar ningún ejemplo, como digo yo un paginado de piedra, bien rustico y tosco pero que al final me funciono, por otro lado tiene el doble de código que el tuyo, Ahora que veo el tuyo y lo simple que es hacerlo te doy las gracias por eso. Ahora estoy incursionando en la POO y en los frameworks en PHP y MySQL si puedes sugerirme video tutoriales o libros te lo agradecería. De casualidad tienes una versión de este paginador en POO?? Saludos desde Cuba.
Hola,
Me alegra saber que te haya servido. Siento decirle que este post es antiguo y no tenemos una versión en POO. Creo que el siguiente tutorial podría ayudarte a pasarlo a POO:
http://www.jose-aguilar.com/blog/interactuar-con-una-base-de-datos-utilizando-mysqli/
Saludos
Saludos
Buenas, muy buen aporte.
Pero si cargo los resultados en un div luego el panel de navegacion me redirije a una pagina en blanco en la que carga los resultados, me gustaria que siguiese en el div, alguna ayudita? 😮
Hola,
Quizá te pueda servir este otro tutorial:
http://www.jose-aguilar.com/blog/paginacion-jquery-ajax-php/
Saludos
Muchas gracias José, que tengas un buen dia. ^^
bien pelao..
me da el valido xD
gracias sufri mucho por encontrar algo bien explicado te lo agradezco muchisimo!!!
Gracias José, Me ha ayudado muchisimo, sigue así…
En esta parte me da problemas
«$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);»
por que si tengo digamos 13 campos y mi variable $TAMANO_PAGINA vale 5, el resultado es 2, con residuo de 3, por lo tanto no me muestra el número con la página que contiene los últimos 3 elementos.
En principio al utilizar ceil no debería darte ese problema puesto que redondea hacia arriba el valor más cercano, por lo tanto si cuentas con 13 registros y sólo dejas 5 registros por cada página, el resultado de dividir 13/5 sería 2,6 por tanto debe redondear a 3 páginas.
Muy bien explicado Jose, me ha ayudado mucho.
Hola josé,
Muchas gracias por compartir el codigo, funciona de maravillas y esta perfectamente explicado.
Te hago una consulta nomas, estoy tratando de adaptarlo para que los resultados aparezcan en 4 columnas pero no logro hacerlo, siempre me queda un resultado debajo del otro ya sea que use tablas o listas.
Tendras algun ejemplo de como encolumnar el resultado???
Ej, que quede una grilla de 4×4 en cada pagina, no uno debajo del otro.
Muchisimas gracias
Saludos y que tengas muy buen dia
Chiara
Hola buenos días,
Mi recomendación es que utilices bootstrap para la muestra de los resultados:
http://www.jose-aguilar.com/blog/maquetacion-web-con-bootstrap-responsive-design/
Saludos
Muchas gracias José,
Lo descargue, adapté y funciono perfecto!
Saludos!!!
Mil gracias, me fue de gran ayuda. Ya tenia un sistema en funcionamiento y actualice el wamp y se me daño la paginación que tenia. Este codigo me funcionó perfectamente 😀
Undefined index: pagina
hola como puedes mostrar el numero de paginas en 10 en 10 e ir aumentando en tu ejemplo se muestran de 1,2,3,4,5,6… hasta 16 pero al tener 32 se muestran 1,2,3,4,5…32 te imaginas si tengo 100 como le puedo hacer para hacerlo mas practico
Si, es posible, solo tienes que modificar un poco el código condicionando los enlaces a mostrar cuando superen x páginas.
Hola Jose, buenas tardes… oye me encanto tu post y me esta ayudando bastante. quisiera saber si podrias ayudarme con una cosita mas. como haces para linkear el contenido que muestra cada pagina como lo hiciste en el ejemplo en funcionamiento? si se supone que el contenido lo muestra con un while, como hiciste para crear un id linkeado en cada registro consultado con el que redireccionas al darle click, sin que al darle click te redireccione al ultimo id como resultado del while. espero hayas entendido la pregunta y espero puedas ayudarme 😉
Hola, es lo último que explico en el post. El tema de la paginación. Tan solo debes hecharle un vistazo más detenidamente al código y verás que lo acabarás entendiendo. Estamos como dividiendo en partes el resultado del while. La clave del asunto está en el uso de LIMIT en la consulta. Si te queda claro siempre puedes enviarnos un email a blog@jose-aguilar.com donde podemos llegar a un acuerdo para planificar una explicación más personalizada. Saludos
pero no logro hacerlo aunque la idea es de 10 en 10 o sea
si es la segunda pagina la numeracion es 2,3,4,5,6,7,8,9,10,11
si es la tercera pagina seria asi 3,4,5,6,7,8,9,10,11,12
eso es lo que trato de hacer pero no puedo, alguien que pueda ayudarme??
Saul, te sugiero esta página para lo que quieres.
http://www.phpfreaks.com/tutorial/basic-pagination
como puedo darle estilo a los numeros de las paginas (1,2,3 etc) y a las flechas? porque le aplico css a los numeros pero nada que puedo cambiar la posicion de los mismos
hola, para añadirle estilo a los números antes deberás añadirle al enlace el atributo class=»number» por ejemplo:
a href=»#» class=»number» rel=»nofollow»
y luego en la hoja de estilo:
a.number {
color: red;
}
Saludos
Hello!!
realice el siguiente cambio y me funciona OK!
$pagina = «»;
if(isset($_GET[«pagina»])){
$pagina = (int)$_GET[«pagina»];
}
if ($pagina ==0 || $pagina==»» ){
$inicio= 0;
$pagina= 1;
}else{
$inicio =($pagina -1) * $TAMANO_PAGINA;
}
Buenas, no he entendido el tema de la pagina = $_GET[‘pagina’] me sigue mostrando el error: Undefined index: pagina
es el unico error que me muestra el codigo, podrian darme una explicación sencilla sobre el tema?
Hola, la variable $pagina se usa para saber en que página estas en principio. saludos
tengo el siguiente problema :
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba.php on line 36
1
Notice: Undefined variable: url in C:\xampp\htdocs\prueba.php on line 50
2
Notice: Undefined variable: url in C:\xampp\htdocs\prueba.php on line 53
que es lo que hago mal??
Hola buenas tardes,
Vemos que en el código del ejemplo falta definir la url. En el caso del ejemplo:
$url = «http://www.jose-aguilar.com/scripts/php/paginacion/index.php»;
En tu caso tendrás que poner la ruta completa + prueba.php
Saludos
gracias por la información es muy buen he estado buscando por todos lados y me alegro de haber llegado a tu pagina solo tengo la siguiente inquietud y desesperación espero que por favor me ayudes con esto…
cuando sigo tu codigo me sale error en la parte de :
$pagina=$_GET[«pagina»]; no se que hace ahi
y lo otro
es que solo me muestra las 10 primera pero cuando le doy siguiente no me salen las demas
ayudaaaaaa
Hola necesitaríamos ver el funcionamiento para revisar que puede estar pasando.
Muchas gracias por el tutorial muy bueno y me sirvio saludos
Hola porfavor podrias ayudarme, estoy haciendo una tienda virtual y quiero hacer una paginacion para los productos de mi tienda, hasta ahora he hecho el codigo al pie de la letra como tu lo posteas pero el problema es que no se que colocar en el $_GET[] en tu caso es pagina pero en mi caso es algo como
?section=catalogo pero me dice undefined index y no se que hacer. Esa url que tengo esta en un servidor xampp y la obtengo de esa forma porque utilize un switch en mi index dentro de mi etiqueta section para hacer el contenido dinamico, el codigo del switch es algo asi:
<?php
if (! isset($_GET['section'])){
include('inicio.php');
}else{
$section= $_GET['section'];
switch($section){
case 'inicio':
include('inicio.php');
break;
case 'quienes_somos':
include('quienes_somos.php');
echo "document.title=’.:Quienes Somos:.’;»;
break;
case ‘catalogo’:
include(‘catalogo.php’);
echo «document.title=’.:Cata\u0301logo:.’;»;
break;
case ‘contactanos’:
include(‘contactanos.php’);
echo «document.title=’.:Conta\u0301ctanos:.’;»;
break;
default:
include(‘inicio.php’);
break;
}
}
?>
Hola, osti, una tienda virtual desde 0? habiendo plataformas ya definidas como prestashop o magento?
Hola, te hago una consulta, probé tu script y funciona muy bien, sin embargo cuando uso url amigables, no funciona, me muestra siempre la primera pagina, porque puede ser?
Excelente José!! una vez más me ahorraste un montón de tiempo. Te felicito y muchas gracias. Saludos
Hola José, voy a utilizar tu ejemplo para hacer una consulta.
Ya tengo la paginación, el problema es que cuando google entra en un articulo que tengo paginado, en tu ej. seria «Toggle Content», quiero tener un link para ir a la pagina donde se encontraría «Toggle Content». Supongamos que es la 7.
Como hago para saber en que pagina está el registro o articulo «Toggle Content» para armar el link a la paginación. (Como se que está en la 7)
Quiero saber en que pagina cae el articulo, luego armo el link a esa pagina.
Esto es para google porque el usuario puede usar el back.
a este script se le podria adaptar que los resultados sean 123…20?
saludos
hola oye me marca erro tu codigo en esta pare:
$query_num_ratings = mysql_query(«SELECT COUNT(*) as num FROM services_rating WHERE rating_id=».$row_services[‘service_id’], $conexion);
$num_ratings = mysql_result($query_num_ratings, 0, «num»);
$query_sum_ratings = mysql_query(«SELECT SUM(rating_num) as sum FROM services_rating WHERE rating_id=».$row_services[‘service_id’], $conexion);
espero me puedas ayudar o asesorar vale muchas gracias.
Hola que problema hay?
buenas jose una pregunta ese codigo solo se utiliza con php o hay que incluir ajax?
Hola buenos días,
Esta es una forma de hacerlo únicamente con php recargando la página.
Saludos
Mil gracias !!! solo es remplazar codigo, cambiar direccion de imagen de las flechas, yo personalmente le agregue la variable $url=»miPagina.php»; MUCHAS GRACIAS
pagina
me podrías explicar donde defino la variable búsqueda
Notice: Undefined variable: pagina
Puedes definirla inicialmente con valor null o vacío en el caso de que no exista el parámetro en la url, es decir, $_GET[‘pagina’]
Hola,
mucho gusto y antes que nada felizidades por el trbajo que relizar en el tema de programacion,
pero ahora me apoyo de ti para saber si me puedes sacar de un aporo y es que no he logrado el metodo de paginar este script:
tabla.php
$row[‘Codigo_de_Sistema’],
‘Proyecto’ => $row[‘Proyecto’],
‘Fecha_de_operacion_Inicio’ => $row[‘Fecha_de_operacion_Inicio’],
‘Fecha_de_operacion_Fin’ => $row[‘Fecha_de_operacion_Fin’],
‘Tickets_Emitidos’ => $row[‘Tickets_Emitidos’],
‘Tickets_Cobrados’ => $row[‘Tickets_Cobrados’],
‘Importe_Total_Cobrado’ => $row[‘Importe_Total_Cobrado’],
‘Tickets_Cortesia’ => $row[‘Tickets_Cortesia’],
‘Ticket_Promedio’ => $row[‘Ticket_Promedio’]
);
}
echo json_encode($datos);
}
?>
js.js)
// JavaScript Document
var ordenar = »;
$(document).ready(function(){
// Llamando a la funcion de busqueda al
// cargar la pagina
filtrar()
var dates = $( «#del, #al» ).datepicker({
yearRange: «-50»,
defaultDate: «+1w»,
changeMonth: true,
changeYear: true,
onSelect: function( selectedDate ) {
var option = this.id == «del» ? «minDate» : «maxDate»,
instance = $( this ).data( «datepicker» ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( «option», option, date );
}
});
// filtrar al darle click al boton
$(«#btnfiltrar»).click(function(){ filtrar() });
// boton cancelar
$(«#btncancel»).click(function(){
$(«.filtro input»).val(»)
$(«.filtro select»).find(«option[value=’0′]»).attr(«selected»,true)
filtrar()
});
// ordenar por
$(«#data th span»).click(function(){
var orden = »;
if($(this).hasClass(«desc»))
{
$(«#data th span»).removeClass(«desc»).removeClass(«asc»)
$(this).addClass(«asc»);
ordenar = «&orderby=»+$(this).attr(«title»)+» asc»
}else
{
$(«#data th span»).removeClass(«desc»).removeClass(«asc»)
$(this).addClass(«desc»);
ordenar = «&orderby=»+$(this).attr(«title»)+» desc»
}
filtrar()
});
});
function filtrar()
{
$.ajax({
data: $(«#frm_filtro»).serialize()+ordenar,
type: «POST»,
dataType: «json»,
url: «/Nueva_Pagina/Acosta_Verde/Resultados/Tabla_Resultados_Plaza las Torres Cd Juarez.php?action=listar»,
success: function(data){
var html = »;
if(data.length > 0){
$.each(data, function(i,item){
html += »
html += »+item.Fecha_de_operacion_Inicio+»
html += »+item.Proyecto+»
html += »+item.Tickets_Emitidos+»
html += »+item.Tickets_Cobrados+»
html += »+item.Importe_Total_Cobrado+»
html += »+item.Tickets_Cortesia+»
html += »+item.Ticket_Promedio+»
html += »;
});
}
if(html == ») html = ‘No se encontraron registros..’
$(«#data tbody»).html(html);
}
});
}
en el index.php he insertado:
Fecha
Proyecto o Estacionamiento
Tickets Emitidos
Tickets Cobrados
Importe Total Cobrado
Tickets Cortesia
Ticket Promedio
Todo sale muy bien me da los resultados y el filtro si se aplica correctamente el tema es que la paginación no funciona adecuadamente.
Por lo que reitero la solicitud de tu apoyo.
Agradeciéndote infinitamente
Kristopher Simbeck De México
Imagino que ya has podido solucionar este problema, no es asi?
Hola, excelente post. Tengo un problema. Al hacer la prueba en la raiz de la web no hay problema ninguno. Muestra los resultados paginados sin problema.
Cuando quiero hacerlo en /pagina-de-prueba
no funciona, la url cambia para /pagina-de-prueba?pagina=2
pero no cambia el resultado mostrado sigue siendo lo mismo.
alguna solución?
he probado definiendo la variable url de dos formas
$url = «http://www.miwebsite.com/pagina-de-prueba»;
$url = «/pagina-de-prueba»;
y no me funciona con ninguna.
Help me please
Indíquenos la url de su sitio para poder verlo
Gracias por tu aporte me facilito el adaptarlo a MS SQL Server.
Muchas Gracias..!!
Hola como lo adaptaste a mssql
tengo un problema el código me funciona pero me sale el error Undefined variable: url y no encuentro el error
¡Muchas gracias, ha sido de gran ayuda y una solución fácil de entender!
Excelente post, Ademas la estructura de tu codigo es muy entendible. Gracias por compartirlo 😉
EXCELENTE APORTE!!!
Busqué por varias páginas, pero la tuya fue la más clara.
Muchas gracias por el tiempo dedicado!
Saludos!
Buenas tardes, he hecho todos los pasos descritos en la web y al buscar, me muestra los primeros 10 resultados, me pone el numero de paginas que tendria la web de manera correcta pero al pasar de página no me muestra ningun resultado, me muestra la web como si no hubiera buscado nada.
¿Alguien sabe donde estaria el fallo?
Un saludo y gracias por el tutorial
Mil gracias!!!! No sabes cómo me salvaste las papas, ja.
Abrazo.
¿A qué hueco de seguridad se refiere Richard?
Si van a usar esto, editenlo hasta el punto de no tener fugas en la paginación, jose aguilar con ese ejemplo puede ser vulnerada tu pagina web, tiene un hueco gigantisimo de seguridad y manteniendolo en tu web, tu web tambien lo tiene, retiralo antes de que venga un troll y te dañe tu web 🙂 saludos!
Muchas Gracias..
Justo lo que que necesitaba…
lo probe y funciona perfecto..
Hola José Aguilar, gracias por el código, pero en mi caso me muestra todo (es decir, número de registros, número de páginas etc) pero no muestra los propios resultados. En mi caso no son enlaces, sino números o palabras. ¿Por qué puede ser?
Gracias por adelantado
Nos podría facilitar el enlace de su web para ver el problema en directo?
Ya lo resolví, gracias de todas formas. Muy útil su página web. Saludos
Hola,
en la parte final no se qué estoy haciendo mal, porque me dice que no encuentra la página siguiente al intentar pasar a cualquier otra página.
La url está bien, no se qué estoy haciendo mal 🙁
Un saludo y gracias por anticipado.
Lo arreglé, la url no estaba bien, pequeño fallo que no veía 🙂
Hola te queria pregunta es un problema con el lo ultimo al hacer el menu de la paginacion cuando doy a siguiente o a otro numero se me empieza a duplicar en la url el: ?pagina=1?pagina=2?pagina=3 y asi todo el tiempo sabes por que sera? gracias por adelantado.
Si, algo estás haciendo mal con la variable $pagina. Revísate el tutorial
HOla debe acegurarte que en la url le agregues esto: url?pagina=’1’&bla bla bla debes tener en cuenta que la siguiente pagina no tome la url de la anterior porque tu problema radica en que la url esta tomando la url anterior en la siguente… un saludo..
Muchas gracias por el tutorial! Me ha ido super bien! 🙂
disculpa me puedes decir de donde sale esto $pagina = $_GET[«pagina»];
me marca un error, me dice: Undefined index
Es un parámetro que está en la url y que se utiliza para indicar en que página estás.
Saludos, para resolver ese problema solo tienes que indicarle a la variable $_GET[‘pagina’] si existe y listo se resuelve tu problema
hola como hago para hacer eso
seria asi??
if(isset($_GET[«pagina»])){
if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina – 1) * $TAMANO_PAGINA;
}
}
Excelente, muy bien aporte, me has ayudado mucho.
buen aporte amigo pero estoy tratando de hacer un catalogo para una tienda online y me preguntaba si se podrá adaptar para lo que yo quiero y como podría hacerlo
Amigo este tutorial de paginacion se adapta a cualquier proyecto.. la unica deficiencia es que no marca 123…293031…200
Genial, fácil y efectivo.
Hola, estupenda información pero como se podria poner para que saliera el indice de esta manera:
1.2.3….14.15.16.
Gracias y un saludo.
Después de
if ($pagina != 1)
cambiar la etiqueta por una lista con estilos css, así lo hice yo:
if ($pagina != 1)
echo ‘ << ‘;
for ($i=1;$i<=$total_paginas;$i++) {
if ($pagina == $i)
//si muestro el �ndice de la p�gina actual, no coloco enlace
echo " {$pagina} «;
else
//si el �ndice no corresponde con la p�gina mostrada actualmente,
//coloco el enlace para ir a esa p�gina
echo ‘ ‘.$i.’ ‘;
}
if ($pagina != $total_paginas)
echo ‘ >> ‘;
Gracias por la explicación, muy clara y al punto.
Gracias Jose, sencillo y preciso, te felicito!!! muy buen blog
Hello There. I discovered your blog the usage of msn. This is a really smartly written article. I will be sure to bookmark it and return to learn more of your useful info. Thank you for the post. I will certainly comeback.
m,y buen aporte, no sabes el quebradero de cabeza que estaba teniendo con esto de la paginacion me funciono en segundo gracias!