J'utilise la pagination bootstrap et une méthode PHP/mysql pour afficher mes résultats (ex: results.php? Results = 1 pour chaque page). Cela fonctionne très bien, mais affiche réellement la division de pagination au fond de ma page, c.-à-d. Laquelle est active, si vous pouvez cliquer sur les éléments suivants ou précédents (s'il y a réellement des résultats sur ces pages)Affichage de la pagination PHP
J'ai fait un cas spécifique pour à peu près toutes les combinaisons que je pourrais penser qui affecteraient n'importe quoi, mais ce n'est certainement pas efficace. Quelqu'un peut-il suggérer une meilleure façon de le faire? Certains des cas seront évidents, comme si je suis sur la première page, je ne veux pas montrer la page 0 et -1 dans la pagination, d'autres sont moins évidentes, comme si je suis à la page 3, et il y a pas plus de pages, je veux que la page 3 soit au milieu, car il y a 5 chiffres affichés, mais vous ne devriez pas pouvoir cliquer sur 4 et 5.
J'utilise une réplique exacte du plugin here sauf que j'ai ajouté gauche/droite augmenter/diminuer de un en plus de la première/dernière page.
<div id="pagination" style="width: 340px; margin-left: auto; margin-right: auto;">
<? if ($results == 1) { ?>
<ul class="pagination">
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li class="active"><a href="#"><? echo $results; ?> <span class="sr-only">(current)</span></a></li>
<li <?if ($num_rows < $num_res) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 2)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 3); ?>"><? echo $results + 3; ?></a></li>
<li <?if ($num_rows < ($num_res * 4)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 4); ?>"><? echo $results + 4; ?></a></li>
<li <?if ($num_rows < ($num_res)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if ($results == 2) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results; ?> <span class="sr-only">(current)</span></a></li>
<li <?if ($num_rows < ($num_res * 2)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 3); ?>"><? echo $results + 3; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results == 3) && (($last_page == 3))) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results; ?><span class="sr-only">(current)</span></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results > 2) && ($results < ($last_page - 1))) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results; ?><span class="sr-only">(current)</span></a></li>
<li><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results > 2) && ($results == ($last_page - 1))) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 3); ?>"><? echo $results - 3; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results ?><span class="sr-only">(current)</span></a></li>
<li><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results > 2) && ($results == $last_page) && ($results != 3)){ ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 4); ?>"><? echo $results - 4; ?> </a></li>
<li><a href="<? echo $url."&results=".($results - 3); ?>"><? echo $results - 3; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results ?><span class="sr-only">(current)</span></a></li>
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
</div>
Si personne ne se sent comme aider à la première partie, je comprends, il fonctionne comme il est aussi loin que je peux dire.
Mais je me demande aussi s'il y a un moyen que sur mon class="disabled"
, je peux supprimer les hrefs? Ou dois-je simplement mettre une instruction if sur chacun d'eux? Merci.
Éditer: Basé sur les recommandations de @ Scopey. J'ai changé quelques choses comme je l'entendais, ainsi que quelques noms de variables.
$numberOfPages = ceil($num_rows/$num_res);
$numberOfPages = (int)$numberOfPages;
$url = explode('&', $_SERVER['REQUEST_URI']);
function myFilter($string) {
return strpos($string, 'results=') === false;
}
$url = array_filter($url, 'myFilter');
$url = implode('&', $url);
?>
<ul class="pagination">
<li<?php if($results === $numberOfPages): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== $numberOfPages){
echo $url.'&results=' . 1;
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li<?php if($results === 1): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== 1){
echo $url.'&results=' . ($results - 1);
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<?php
// Print the pagination...
// Minimum of 5 pages in the pagination, even if there aren't 5 pages...
$pageCount = ($numberOfPages < 5) ? 5 : $numberOfPages;
// Loop through from page 1 until the last page ($pageCount)
for($i = 1; $i <= $pageCount; $i++)
{
// Echo out just the beginning of the <li> tag as we don't yet
// know if this needs to be disabled...
echo '<li';
// Added to show if current page is active
if($i === $results) {
echo ' class="active"';
}
// Check if:
// - This current page is greater than the amount of pages of
// results we have
// - OR, this is the currently selected page
if($i > $numberOfPages || $results === $i)
{
// <li> tag needs the disabled class....
echo ' class="disabled"';
}
// Finish the <li> tag and start generating the link
echo '><a href="';
// Opposite logic from above... Only if this is a page we know about
// AND this is not the current page.
if($i < $numberOfPages && $results !== $i)
{
// The link will be your page, with the get param, and the
// current page number we're printing
echo $url.'&results=' . $i;
}
else
{
// Otherwise just a # (no link)
echo '#';
}
// Finish this page... Print the page number ($i)
echo '">' . $i . '</a></li>';
}
?>
<li<?php if($results === $numberOfPages): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== $numberOfPages){
echo $url.'&results=' . ($results + 1);
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li<?php if($results === $numberOfPages): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== $numberOfPages){
echo $url.'&results=' . $numberOfPages;
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
<?php
@Scobey, cela fonctionne très bien, comme prévu, et même que mon article original, sauf pour quelques choses. Dans mon exemple, j'ai pu obtenir la page actuelle au milieu de la. Par exemple, < < 1 | 2 | | 4 | 5 >>, c'est pourquoi j'ai eu tellement de différentes déclarations avec +1 et -1, +2, -2
Deuxièmement, mon intention était d'afficher 5 options de page en tout temps, pas seulement un minimum de cinq . Donc, si j'étais à la page 6, je ne verrais que < < 4 | 5 | | 7 | 8 >>, pas 1-8. Il n'est peut-être pas nécessaire de le faire de cette façon, c'est bien d'avoir. Mais, je ne veux pas arriver à un point où j'ai plus de 50 numéros de pages différents dans la pagination.
comment peut-on écrire du code comme ça? ou le lire. –
C'est pourquoi je demande de l'aide ici. En ce qui concerne la lecture, c'est juste 6 de la même UL, avec des résultats différents. – dcclassics
Eh bien, vous n'avez pas besoin des blocs presque identiques, une fonction \ boucle le ferait à un total de 6 lignes –