Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created June 24, 2020 05:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/128eec5d633d1481231b6234b78b0d2d to your computer and use it in GitHub Desktop.
Save parzibyte/128eec5d633d1481231b6234b78b0d2d to your computer and use it in GitHub Desktop.
<?php
# Este es el simple encabezado HTML
include_once "encabezado.php";
# Incluimos la conexión
include_once "base_de_datos.php";
# Cuántos productos mostrar por página
$productosPorPagina = 3;
// Por defecto es la página 1; pero si está presente en la URL, tomamos esa
$pagina = 1;
if (isset($_GET["pagina"])) {
$pagina = $_GET["pagina"];
}
# El límite es el número de productos por página
$limit = $productosPorPagina;
# El offset es saltar X productos que viene dado por multiplicar la página - 1 * los productos por página
$offset = ($pagina - 1) * $productosPorPagina;
# Necesitamos el conteo para saber cuántas páginas vamos a mostrar
$sentencia = $base_de_datos->query("SELECT count(*) AS conteo FROM productos");
$conteo = $sentencia->fetchObject()->conteo;
# Para obtener las páginas dividimos el conteo entre los productos por página, y redondeamos hacia arriba
$paginas = ceil($conteo / $productosPorPagina);
# Ahora obtenemos los productos usando ya el OFFSET y el LIMIT
$sentencia = $base_de_datos->prepare("SELECT * FROM productos LIMIT ? OFFSET ?");
$sentencia->execute([$limit, $offset]);
$productos = $sentencia->fetchAll(PDO::FETCH_OBJ);
# Y más abajo los dibujamos...
?>
<div class="col-xs-12">
<h1>Productos</h1>
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Código</th>
<th>Descripción</th>
<th>Precio de compra</th>
<th>Precio de venta</th>
<th>Existencia</th>
</tr>
</thead>
<tbody>
<?php foreach ($productos as $producto) { ?>
<tr>
<td><?php echo $producto->id ?></td>
<td><?php echo $producto->codigo ?></td>
<td><?php echo $producto->descripcion ?></td>
<td><?php echo $producto->precioCompra ?></td>
<td><?php echo $producto->precioVenta ?></td>
<td><?php echo $producto->existencia ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<nav>
<div class="row">
<div class="col-xs-12 col-sm-6">
<p>Mostrando <?php echo $productosPorPagina ?> de <?php echo $conteo ?> productos disponibles</p>
</div>
<div class="col-xs-12 col-sm-6">
<p>Página <?php echo $pagina ?> de <?php echo $paginas ?> </p>
</div>
</div>
<ul class="pagination">
<!-- Si la página actual es mayor a uno, mostramos el botón para ir una página atrás -->
<?php if ($pagina > 1) { ?>
<li>
<a href="./listar.php?pagina=<?php echo $pagina - 1 ?>">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<?php } ?>
<!-- Mostramos enlaces para ir a todas las páginas. Es un simple ciclo for-->
<?php for ($x = 1; $x <= $paginas; $x++) { ?>
<li class="<?php if ($x == $pagina) echo "active" ?>">
<a href="./listar.php?pagina=<?php echo $x ?>">
<?php echo $x ?></a>
</li>
<?php } ?>
<!-- Si la página actual es menor al total de páginas, mostramos un botón para ir una página adelante -->
<?php if ($pagina < $paginas) { ?>
<li>
<a href="./listar.php?pagina=<?php echo $pagina + 1 ?>">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
<?php } ?>
</ul>
</nav>
</div>
<?php include_once "pie.php" ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment