objects all_products pagination

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''