I denne artikel, tager jeg udgangspunkt i en funktionalitet, jeg, når jeg er ude på opgaver, hele tiden støder på; nemlig side navigering udfra resultatsæt, hentet fra Databasen. I dette tilfælde viser jeg hvor vi gør det mod en MySQL database, og senere gør vi det mod en Oracle XE database.

Artikler omkring Oracle XE finder du her.

Uden at gå i detaljer omkring, hvordan teknikker som disse påvirker HTTP protekollen, den underliggende infrastruktur osv. Vil jeg fokusere på at disse teknikker, giver brugeren et abstraktions niveau, en dimention, for tydligere, at kunne "kaperer" datamængden.

Lad os i udgangspunktet bestemme at "side nummer" - er det der identificerer resultatsættet. Dvs. at resultatsættet sendes via URL som; http://www.ditdomain.dk/admin/index.php?page=2.

Vi skal have lavet en "pager" funktion, der kan inkluderes, i hver PHP fil, som er en liste. I vores tilfælde laver jeg 2 funktioner, der viser, selve listen, afgrænset at antal poster pr. side, samt somsagt 2 muligheder for navigering.

1) Navigation :  1 2 > »

Hvor aktive side ikke kan trykkes på og » betyder sidste side i datasættet. Den anden version viser navigeringen som;

Navigation :  Previous page | Next page

Også illustreret i nedenstående.

 

Start med at hente navigationen  herfra - og gem filen efter udpakning, hvor dine PHP filer ligger placeret.

Selve navigationen er opbygget som en class, og inkluderes i den fil hvor du vil benytte denne. Ved inkludering, skal vi dog først have sat et par variable; start og limit.

<?php
$p  = new NAVI;

$limit = 20;
$start = $p->findStart($limit);
?>

Start skal være record start og limit skal være antal poster på en side. $start, kalder funktionen findStart - der tager $limit med parameter. Det skulle meget gerne være således, at $start modsvarer, på hvilken side man er eller trykker på, og lister derfra og $limit poster frem.

Herfter kan navigationen implementeres i koden, som følger;

<?php
$getcount = $DB->database_query("SELECT count(id) FROM pro_posts WHERE language = '$language'");
while ($therow = $DB->database_fetch_row($getcount)) {
 $count = $therow[0];
}

$pages = $p->findPages($count, $limit);

Det vil give mig antal sider, baseret på antal rækker i den tabel jeg henter data fra. Da jeg nu kender henholdsvis start og limit parameteren, kan jeg når der tykkes på next page eller previous page, danne en SQL der er afgrænset af hvor jeg er i navigationen.

$result = $DB->database_query("SELECT * FROM pro_posts WHERE language = '$language' ORDER BY $order $sort LIMIT $start, $limit");
?>

Nu er forudsætningerne på plads og vi mangler blot at inkludere navigationen i koden;

<tr valign="top">
 <td height="1" colspan="9" valign="middle" align="right" background="../images/bg_tbl_header.jpg">Navigation :&nbsp;
<?php
 $next_prev = $p->nextPrev($_GET['page'], $pages);
 echo $next_prev; echo "&nbsp;&nbsp;";
?>

Du skal selfølgelig være opmærksom på; at count modsvarer den tabel du henter data fra samt der du henter data fra nødvendigvis som i dette tilfælde er tabellen pro_posts men en af dine egne tabeller.

God fornøjelse