cela semble être un calcul très simple, mais mon cerveau ne peut penser à rien ...
j'essaie d'implémenter la pagination et devra calculer le décalage d'élément à utiliser pour limiter mes résultats. J'ai des problèmes pour calculer quel index le premier élément de la page devrait avoir.
par exemple.
with 1 page having 10 items
page 1 will have items 1 - 10
page 2 ............... 11 - 20
page 3 ............... 21 - 30
j'ai pensé à
offset = page * itemsPerPage + 1
mais ce ne sera pas le cas pour la page 1. il doit y avoir une formule pour cela? J'utilise PHP/Zend_Paginator/Doctrine2 mais cela devrait être indépendant de la langue
Je me demande si cela devrait être dans le site d'échange de la pile mathématique
Utilisez offset = (page - 1) * itemsPerPage + 1
.
Honnêtement dépend. Je ne suis pas PHP personne, mais je vais mettre les deux là-bas. Si vous extrayez vos enregistrements dans une forme de collection (liste, tableau, etc.), votre formule devrait être:
offset = (page - 1) * itemsPerPage
En effet, la plupart (encore une fois, je ne suis pas une personne PHP) et les listes utilisent 0 pour leur premier élément. S'ils n'utilisent pas 0 pour leur premier élément et/ou si vous extrayez d'une table ou de quelque chose d'autre dont les ID commencent à 1, alors ce devrait être:
offset = (page - 1) * itemsPerPage + 1
J'espère que c'est clair et que ça aide.
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'
En utilisant JS comme exemple, pour les personnes progressistes d'applications web ...
Les tableaux JS ont la méthode prototype .slice(start, end)
présentation ici } _ il faut un index de début et un index de fin comme arguments.
J'ai trouvé le moyen le plus simple de calculer les deux indices est le suivant:
Index de début
var start = parseInt((selectedPage - 1) * resultsPerPage);
Index final
var end = parseInt(selectedPage * resultsPerPage);
Exécution
var myPaginatedArray.slice(start, end);
J'ai déjà fait face à cela dans Angular 4, il s'agit d'une édition d'un morceau de modèle avec une liste avec une pagination simplifiée:
<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>
J'ai toujours eu la possibilité d'utiliser currentPage
après avoir cliqué sur les boutons Précédent et Suivant, mais initialisé avec 1, itemsPerPage
comme paramètre d'application et totalItemsDownloaded
est le nombre total d'éléments signalés par l'appel WebAPI.
J'espère que ça aide
utilisez ceci
$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;
}