Într-un articol anterior am prezentat o funcție de bază pentru generarea paginării în PHP. Odată cu evoluția cerințelor din proiectele practice, am extins și perfecționat această funcție pentru a oferi mai mult control și o integrare simplificată în orice șablon web.
Comparativ cu varianta inițială, versiunea revizuită adaugă posibilitatea de a personaliza separatorul dintre pagini printr-un parametru opțional dedicat ($delim). Astfel, aveți libertate deplină de configurare a aspectului vizual, fără a altera logica internă a scriptului.
Codul sursă al funcției de paginare revizuite
Iată implementarea completă și structurată în PHP:
<?php
function make_pages($total_page, $curr_page, $url, $next = 0, $delim = " | ") {
$da = "";
if ($next == 1) {
if ($total_page > 1) {
if ($curr_page > 1) {
$da .= '<a href="' . str_replace("[page]", ($curr_page - 1), $url) . '" class="paginatie_prev_page"> </a> ' . $delim . ' ';
} else {
$da .= '<a href="#" class="paginatie_prev_page"> </a> ' . $delim . ' ';
}
}
}
if ($total_page < 1) {
$da .= '<a href="' . str_replace("[page]", 1, $url) . '">1</a> ' . $delim . ' ';
}
if ($total_page < 15) {
for ($i = 1; $i < ($total_page + 1); $i++) {
if ($i == $curr_page) {
$da .= '<span class="curr">' . $i . '</span> ' . $delim . ' ';
} else {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
}
} else {
if ($curr_page < 8) {
for ($i = 1; $i < 11; $i++) {
if ($i == $curr_page) {
$da .= '<span class="curr">' . $i . '</span> ' . $delim . ' ';
} else {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
}
$da .= " .... ";
for ($i = ($total_page - 5); $i < ($total_page + 1); $i++) {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
} elseif (($curr_page > 7) && ($curr_page < ($total_page - 4))) {
for ($i = 1; $i < 4; $i++) {
if ($i == $curr_page) {
$da .= '<span class="curr">' . $i . '</span> ' . $delim . ' ';
} else {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
}
$da .= " ... ";
for ($i = ($curr_page - 3); $i < ($curr_page + 3); $i++) {
if ($i == $curr_page) {
$da .= '<span class="curr">' . $i . '</span> ' . $delim . ' ';
} else {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
}
$da .= " ... ";
for ($i = ($total_page - 3); $i < ($total_page + 1); $i++) {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
} elseif ($curr_page > 7) {
for ($i = 1; $i < 4; $i++) {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
$da .= " ... ";
for ($i = ($total_page - 7); $i < ($total_page + 1); $i++) {
if ($i == $curr_page) {
$da .= '<span class="curr">' . $i . '</span> ' . $delim . ' ';
} else {
$da .= '<a href="' . str_replace("[page]", $i, $url) . '">' . $i . '</a> ' . $delim . ' ';
}
}
}
}
if ($next == 1) {
if ($total_page > 1) {
if ($curr_page < $total_page) {
$da .= '<a href="' . str_replace("[page]", ($curr_page + 1), $url) . '" class="paginatie_next_page"> </a> ' . $delim . ' ';
} else {
$da .= '<a href="#" class="paginatie_next_page"> </a> ' . $delim . ' ';
}
}
}
return $da;
}
Explicarea parametrilor funcției
- $total_page: numărul total de pagini rezultate în urma împărțirii setului de date;
- $curr_page: numărul paginii active pe care se află vizitatorul;
- $url: șablonul de adresă web ce include marcatorul
[page], care va fi înlocuit dinamic cu numărul paginii (de exemplu:articole.php?p=[page]); - $next: parametru binar (1 sau 0) ce activează sau dezactivează butoanele de navigare „pagina precedentă” și „pagina următoare”;
- $delim: șirul de caractere folosit ca delimitator vizual între linkurile paginilor (implicit:
" | ").
Integrare și stilizare CSS
Funcția returnează un șir HTML semantic, pregătit pentru stilizare prin clase CSS dedicate precum paginatie_prev_page, paginatie_next_page și curr pentru marcarea paginii curente. Puteți descărca și include această funcție direct în proiectele dumneavoastră PHP.
arata ciudat codul la functia de paginatie; cred ca ti-o da peste cap evidentiatorul de sintaxa, sau ceva…