Vēlreiz par lappusēm…

12
Jun
5

Nereti gadās situācijas, kad, piemēram, kaut kādu datu sarakstu jāsadala pa lappusēm. Vienreiz jau rakstīju, kāds, manuprāt, ir labākais risinājums lappušu skaita iegūšanai, šeit būs tāds kā turpinājums…

Ko darīt, ja lappušu skaits pārāk liels un visu lappušu linkus nav iespējams izvadīt? Protams, jāizvada tikai daļa no tām (arī pie tā raksta kāds jautāja par šādu algoritmu).

Nekā sarežģīta jau tur nav, bet vienmēr esmu rakstījis kaut kādu garu funkciju, kas rēķina sākuma ciparu un beigu ciparu, izejot no atvērtās lappuses. Pirms pāris nedēļām strādāju pie kāda foruma, kur radās šī pati problēma, taču šoreiz, dzerot aliņu, tika izdomāts algoritms, kurš aizņem, nevis 20, bet 2 rindiņas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
function draw_pages($count, $perpage, $offset = 5){
	$pages = ceil($count/$perpage);
	if($pages<2){
		return '';
	}
	$r = '<ul class="pages">';
	$page = (empty($_GET['p']) || $_GET['p']<2) ? 1 : $_GET['p'];
	$first = $page >= $offset+1 ? $page-$offset : 1;
	$last = $page <= $pages-$offset ? $page+$offset : $pages;
	if($page>1){
		$r.= sprintf('<li><a href="?p=1">«</a></li><li><a href="?p=%d">&lt;</a></li>', $page-1);
	}
	for($i=$first;$i<=$last;$i++){
		$r.= sprintf('<li%s><a href="?p=%d">%d</a></li>', $page==$i ? ' class="active"' : '', $i, $i);
	}
	if($page<$pages){
		$r.= sprintf('<li><a href="?p=%d">&gt;</a></li><li><a href="?p=%d">»</a></li>', $page+1, $pages);
	}
	$r.= '</ul>';
	return $r;
}
?>

Atzīstu, ir tādas, lietas, kuras kādreiz tikušas izdomātas un tiek lietotas vēl šodien. Tomer, ja kaut ko mēģina uztaisīt no šodienas skata punkta, loģiski – tas sanāk daudz ātrāk un vienkāršāk.

Filed under: PHP, datubāzes
5 Comments

5 Comments

  1. ginekologs
    11:53 on June 13th, 2009

    atradu divas kļūdas….
    if($page<$count){

    }

    jaabuut

    if($page<$pages){

    }

    savaadaak esot pēdējā lpp turpina rādīt to »

    Un vēl…
    $last = $page <= $pages-2 ? $page+$offset : $pages;

    jābūt

    $last = $page <= $pages-$offset ? $page+$offset : $pages;

    savādāk esot lapām pa vidu, rāda vairāk lapas, nekā ir īstenībā… :)

    anyway tnx par pageri, noderēja..

  2. Mārcis
    16:33 on June 13th, 2009

    Jup, nav pirmā reize, kad kopējot jau uztaisītu kodu, kaut ko pamainu un kaut ko aizmirstu pamainīt.
    Jebkurā gadījumā, paldies, ka ievēroji.

  3. palīdzība
    23:25 on June 22nd, 2009

    esmu iesācējs un man būs jāprasa 1 lieta…

    kā šo lpp dalīšanu skriptu pielāgot šim http://paste.php.lv/726036e7946dd89ba663ba7159ea5ce1?lang=php ipb jaunumu skriptam lai viss strādātu..vai lpp dalīšanu skripta kōds jāliek jaunumu skripta failā iekšā vai kkā caur db ? lūdzu tikai nerunājat pārgudrā valodā kā nekā esmu iesācējs!

  4. Mārcis
    23:54 on June 22nd, 2009

    Izlasi šo rakstu.

  5. Toms
    13:22 on September 30th, 2009

    tātad šī f-ja jāaizvieto ar iepriekšējā raksta lappušu izvadi?

Leave a comment

RSS barotne komentāriem pie šī raksta