Lehekülgedele jagamine

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, '|&lt;-');
        }
 
        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, '-&gt;');
        }
    } 
 
    // 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:

 
pager.txt · Viimati muutnud: 2006/12/10 22:05 (external edit)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki