Lehekülgedele jagamist on vaja juhul kui andmeid on liiga palju korraga ekraanile kuvamiseks. Näiteks kasutajate nimekirjas on 1000 kasutajat, siis nendeväljastamisel ei ole otstarbekas kõiki korraga välja pritsida, vaid parem näidata neid nt 50 kaupa.
Funktsioon lehtedele jagamiseks:
/* * @param mixed $array - lehtedele jaotatav massiiv või elmentide arv * @param int $perpage - mitut asja ühel leheküljel kuvada * @param string $pagevar - GET muutuja aadressiribal * @param string $pageurl - sprintf formaadis lehekülje aadress * @param string $pageactive-sprintf formaadis tekst aktiivse lehe jaoks * @param string $maxlinks- mitut linki korraga kuvada (orienteeruv suurus) */ function pager($array, $perpage, $pagevar='p', $pageurl="?p=%u", $pageactive="<b>%u</b>", $maxlinks=10) { // jagatavate elementide koguarv $total = is_array($array) ? count($array) : intval($array); // aktiivne lehekülg $page = isset($_GET[$pagevar]) ? $_GET[$pagevar] : 1; // lehekülgede koguarv $pages = ceil($total / $perpage); // kui page muutuja on väiksem 1-st või suurem lehtede // koguarvust siis aktiivseks leheks määratakse 1 if($page > $pages || $page < 1) $page = 1; // leiame lingiriba alguspunkti $halfstart = $page - ($maxlinks / 2); $start = $halfstart < 1 ? 1 : $halfstart; // leiame lingiriba lõpp-punkti $halfend = $page + ($maxlinks / 2); $end = $halfend > $pages ? $pages : $halfend; // tagastatav massiiv $return = array(); // navigeerimismenüü loome ainult siis kui lehti on vähemalt 1 if($pages > 1) { // kui aktiivne leht on üle ühe siis kuvame linki algusesse if($page>1) { $url = sprintf($pageurl, 1); $return['navbar'][] = sprintf('<a href="%s">%s</a>', $url, '|<-'); } for($i=$start; $i<=$end; $i++) { if($page==$i) { $return['navbar'][] = sprintf($pageactive, $i); } else { $url = sprintf($pageurl, $i); $return['navbar'][] = sprintf('<a href="%s">%u</a>', $url, $i); } } // kui aktiivne leht on väiksem lehtede koguarvust siis kuvame lingi viimasele lehele if($page<$pages) { $url = sprintf($pageurl, $pages); $return['navbar'][] = sprintf('<a href="%s">%s</a>', $url, '->'); } } // limit päringus kasutamiseks $limit_1 = ($page-1)*$perpage; // $limit_2 asemel võiks panna $perpage // kuid igaks juhuks arvutab selle ka välja, kuna // see on abiks nt massiivi korral $limit_2 = $limit_1 + $perpage > $total ? $total-$limit_1: $perpage; $return['limit'] = $limit_1 . ', '.$limit_2; // aktiivne lehekülg $return['current'] = $page; // lehekülgede arv kokku $return['total'] = $total; return $return; }
Funktsiooni kasutamine toimub järgnevalt:
/* kõigepealt tuleb leida kui palju kasutajaid on seda saab nii: */ $kasutajaid = mysql_result(mysql_query('SELECT COUNT(*) FROM `users`'), 0); // nüüd on teada kasutajate arv ning saab hakata neid lehtedele jagama $p = pager($kasutajaid, 10); // 10 tk ühele lehele $query = mysql_query("SELECT * FROM `users` ORDER BY `varandus` DESC LIMIT ".$p['limit']); // navigeerimisriba kuvame vaid siis kui see on olemas (st lehti on üle ühe) if(isset($p['navbar'])) echo "Leheküljed: ".join(' - ', $p['navbar']); /////// lõpp // siia järgneb kasutajate väljastamine while tsükliga
Vaata ka: