pagination - all_products - liquid objects shopify
Cálculo de compensación de ítems para la paginación (6)
esto parece una matemática muy simple, pero de alguna manera, mi cerebro no puede pensar ...
Estoy tratando de implementar la paginación y necesitaré calcular la compensación del artículo para usar al limitar mi conjunto de resultados. Tengo problemas para calcular qué índice debe tener el primer elemento de la página.
p.ej.
with 1 page having 10 items
page 1 will have items 1 - 10
page 2 ............... 11 - 20
page 3 ............... 21 - 30
Pensé en
offset = page * itemsPerPage + 1
pero este no será el caso para la página 1. debe haber una fórmula para esto? estoy usando PHP / Zend_Paginator / Doctrine2 pero esto debería ser independiente del lenguaje
se pregunta si esto debería estar en el sitio de intercambio de pila de matemáticas
Honestamente depende. No soy una persona de PHP, pero pondré ambos por ahí. Si está colocando sus registros en algún tipo de colección (lista, matriz, etc.), entonces su fórmula debería ser:
offset = (page - 1) * itemsPerPage
Esto se debe a que la mayoría de las matrices y listas (de nuevo, no soy una persona de PHP) usan 0 para su primer elemento. Si no usan 0 para su primer elemento y / o está sacando de una tabla u otra cosa donde los ID comienzan en 1, entonces debería ser:
offset = (page - 1) * itemsPerPage + 1
Espero que sea claro y ayude.
Me he enfrentado a esto antes en Angular 4, esta es una edición de una pieza de plantilla con una lista con paginación más simple:
<div *ngFor="let item of pagedItems; let i = index">
<div class="item-caption">
Item {{(currentPage - 1) * itemsPerPage + (i + 1)}} of {{totalItemsDownloaded}}
</div>
<div class="item-name">{{item.name}}</div>
</div>
Siempre he currentPage
como resultado de hacer clic en los botones Prev y Next, pero inicializado con 1, itemsPerPage
como configuración de la aplicación y totalItemsDownloaded
es el recuento de los ítems totales reportados por la llamada WebAPI.
Espero que ayude
Usando JS como ejemplo, para personas con aplicaciones web progresivas ...
Los arreglos JS tienen el .slice(start, end)
método prototipo .slice(start, end)
Aquí se toma un índice de inicio y un índice final como argumentos.
Encontré que la manera más fácil de calcular ambos índices es la siguiente;
Índice de comienzo
var start = parseInt((selectedPage - 1) * resultsPerPage);
Índice final
var end = parseInt(selectedPage * resultsPerPage);
Ejecución
var myPaginatedArray.slice(start, end);
Use offset = (page - 1) * itemsPerPage + 1
.
utilizar esta
$row_page = 5; //items per page
if(isset($_GET[''p''])){
$page_num = $_GET[''p''];
} else {
$page_num = 0;
}
$offset = ( $page_num ) * $row_page;
$cn = 31;
$pg = (int)ceil($cn / $row_page);
for ($i = 1; $i <= $pg; $i++){
echo "<br/><a href=''?p=$i''>".$i;
}
start = (page - 1) * itemsPerPage + 1
end = totalItems
if (itemsPerPage < totalItems) {
end = itemsPerPage * page
if (end > totalItems) {
end = totalItems;
}
}
// e.g. "21-30 of 193 items"
start + ''-'' + end + '' of '' + totalItems + '' items''