Creearea unui script de paginare în PHP
Oricine a făcut un website cu adăugare de conținut dinamic, cu siguranță s-a lovit de problema paginării datelor. Paginarea reprezintă împărțirea conținutului afișat, pe mai multe pagini. De ce vrem să facem asta? Răspunsul este simplu: Să ne imaginăm un blog cu 1000 de articole care trebuie să le afișăm. Dacă toate ar fi afișate pe o singură pagină, nu numai că ar fi dificil de vizualizat, dar majoritatea browserelor le-ar afișa cu o întârziere sesizabil de mare.
Pentru a întelege cât mai bine script-ul de mai jos, am adăugat comentarii pentru fiecare secțiune sau linie de cod folosită. Pentru a adapta script-ul la nevoile website-ului tău va trebui să modifici câteva date precum: user-ul, parola și numele bazei de date, numele tabelei, numărul de elemente afișate pe pagină.
Înainte de toate va trebui să facem conectarea și selectarea bazei de date pe care o folosim:
<?php @mysql_connect("localhost","user_bd","parola_bd" ) or die(); @mysql_select_db("nume_bd" ) or die(); @mysql_set_charset("utf8" ); ?>
Script-ul pentru paginare:
<?php // selectăm articolele din baza de date $query=mysql_query("SELECT COUNT(*) AS `num` FROM `nume_tabela_bd`" ); $result=mysql_fetch_assoc($query); $nr_total_de_articole=$result['num']; // numărul total de articole care le-am găsit în baza de date $nr_articole_pe_pagina=10; // aici definim numărul de articole afișate pe o pagină $nr_de_pagini=ceil($nr_total_de_articole/$nr_articole_pe_pagina); // calculăm câte pagini vor fi în total // dacă variabila p este setată și este de tip numeric atunci pagina curentă va lua valoarea variabilei p, altfel va lua valoarea 1 if(isset($_GET['p']) && is_numeric($_GET['p'])){ $pagina_curenta=(int)$_GET['p']; } else{ $pagina_curenta=1; } // dacă pagina curentă are valoarea mai mare decât numărul de pagini atunci o setăm la valoarea ultimei pagini if($pagina_curenta > $nr_de_pagini){ $pagina_curenta=$nr_de_pagini; } // dacă pagina curentă este mai mică decât 1 atunci o resetăm la valoarea 1 elseif($pagina_curenta < 1){ $pagina_curenta=1; } // definim variabila paginare prin afișarea paginii curente și a numărului total de pagini existente $paginare='<a class="paginare">Pagina '.$pagina_curenta.' din '.$nr_de_pagini.'</a>'; $interval=3; // setăm numărul de pagini din jurul paginii curente pentru care afișăm link-uri // dacă pagina curentă este mai mare decât intervalul setat atunci afișăm link-uri pentru prima pagină și pentru pagină înapoi if($pagina_curenta > (1+$interval)){ $paginare.='<a class="paginare" href="index.php?p=1">Prima</a>'; $pagina_inapoi=$pagina_curenta-1; $paginare.='<a class="paginare" href="index.php?p='.$pagina_inapoi.'">«</a>'; } // dacă pagina curentă este mai mare decât 1 și mai mică sau egală decât intervalul setat atunci afișăm link doar pentru pagină înapoi elseif(($pagina_curenta > 1) && ($pagina_curenta <= (1+$interval))){ $pagina_inapoi=$pagina_curenta-1; $paginare.='<a class="paginare" href="index.php?p='.$pagina_inapoi.'">«</a>'; } // calculăm link-urile pentru paginile care trebuie afișate for($x=($pagina_curenta - $interval); $x < (($pagina_curenta + $interval) + 1); $x++){ if(($x > 0) && ($x <= $nr_de_pagini)){ if($pagina_curenta != $x){ $paginare.='<a class="paginare" href="index.php?p='.$x.'">'.$x.'</a>'; } else{ $paginare.='<a class="paginare" style="background-color:#ffffff; color:#000000;">'.$x.'</a>'; // link-ul pentru pagina curentă îl afișăm cu altă culoare } } } // dacă pagina curentă nu este ultima și este mai mică decât intervalul setat atunci afișăm link-uri pentru ultima pagină și pentru pagină înainte if(($pagina_curenta != $nr_de_pagini) && ($pagina_curenta < ($nr_de_pagini - $interval))){ $pagina_inainte=$pagina_curenta+1; $paginare.='<a class="paginare" href="index.php?p='.$pagina_inainte.'">»</a>'; $paginare.='<a class="paginare" href="index.php?p='.$nr_de_pagini.'">Ultima</a>'; } // dacă pagina curentă nu este ultima și este mai mare sau egală decât intervalul setat atunci afișăm doar link-ul pentru pagină înainte elseif(($pagina_curenta != $nr_de_pagini) && ($pagina_curenta >= ($nr_de_pagini - $interval))){ $pagina_inainte=$pagina_curenta+1; $paginare.='<a class="paginare" href="index.php?p='.$pagina_inainte.'">»</a>'; } $inceput=($pagina_curenta - 1) * $nr_articole_pe_pagina; // stabilim intrarea din baza de date de unde începe select-ul pentru pagina curentă $query_afisare_articole="SELECT * FROM `nume_tabela_bd` ORDER BY `data` DESC LIMIT $inceput, $nr_articole_pe_pagina"; // aici se face afisarea articolelor print $paginare; // afișăm link-urile paginării creeate mai sus ?>
Acum că am terminat cu partea de cod php putem stiliza puțin afișarea link-urilor de paginare cu ajutorul unei clase css:
.paginare{ color:#ffffff; background-color:#000000; border:1px solid #cccccc; display:inline-block; text-decoration:none; padding:5px; text-align:center; } .paginare:hover{ background-color:#ffffff; color:#000000; }
Sper că vă este de folos acest tutorial. Succes!
1. |
Foarte bravo baieti
|
2. |
Foarte util si usor de inteles! Multumesc mult!
|
3. |
Mă bucur că v-a fost de folos acest tutorial.
|
4. |
Bravo ! Foarte de folos tutorial-ul !
|
5. |
foarte de folos! dar daca are o selectare in baza de exemplu tabela upload si trebuie selectata categoria ex romania cum facem?
|