Paginare simpla - PhpAndMysql

joi, 26 martie 2009 ·

Am facut o mica functie care pagineaza bazandu-se pe o baza de date care pe mine m-a ajutat foarte mult. Puteti sa o folisiti si voi si chair sa o dezoltati preferintelor voastre.

function paginate ($result, $cpp, $pgn)
{
$ids=1;
while($record= mysql_fetch_assoc($result))
{
while(list($fieldname,$fieldvalue) = each ($record))
{
$a[$ids]=$fieldvalue;
$ids++;
}
}
$ids--;
$nrpgs=floor($ids/$cpp);
if($ids%$cpp>0) $nrpgs++;
$page=$pgn;

$ec = ($page*$cpp+1)-$cpp; //pozitia de pe care se porneste afisarea
$lc = $ec + $cpp;
$mem = NULL;
$i=0;
while($ec<$lc and $ec<=$ids) { $mem[$i] = $a[$ec]; $i++; $ec++; } $pos['pages'] = $nrpgs; if($mem) $pos['in'] = implode(" ,",$mem); else $pos['in'] = NULL;return $pos; }

Parametrii:
$result = e rezultatul unui query.(ex: mysql_query("SELECT user_id FROM user");
$cpp = cate intrari doresti sa apara pe o pagina.
$pgn = pagina curenta.
Explicatii:
Functia lucra in felul urmator. Sa zicem ca ai un tabel cu useri (users) in care ai o coloane PK 'user_id' (un unique id pentru fiecare user) si vrei sa ii afisezi cate 30 pe o pagina (pe toti userii).
Functia analizeaza resultatul query-ului mysql si apoi in functie de parametrii returneaza id-urile userilor care trebuiesc afisati pe pagina respectiva ($pgn).
de exemplu: $rezultat=mysql_query("SELECT user_id FROM users WHERE users.rank = 'goldmember' ");
Dorim sa punem cate 20 pe pagina.Acum apelam functia: $var = paginate ($rezultat,20,1);
O sa ne returneze un array de forma:
$var['in'] - toate id-urile care trebuiesc afisate despartite prin virgula.La noi, id-urile care trebuiesc afisate pe prima pagina deoarece al3lea parametru este 1;
$var['pages'] - numarul total de pagini.
Acum putem selecta detaliile despre useri astfel:
mysql_query("SELECT * FROM users WHERE user_id IN (".$var['in'].")");
Cam asta e tot, e usor de folosit si pentru mine cel putin foarte folositor.Pentru alte explicatii sau eventuale update-uri sunt aici :).

0 comentarii:

Trimiteți un comentariu

Site Advertise