ugrás a tartalomhoz

Oldal számozása, eredmény lista lapozása

mpdt · 2007. Aug. 16. (Cs), 15.04
Sziasztok!

Nem kaptam sajnos sok segítséget pedig próbáltam nagyon de nem nagyon találtam . Az lenne a gondom ,hogy van egy programom ami kilistázza az adatábzisból a regisztrált felhasználókat . Gondolom én ,hogy ez egy picit necces lenne 200-500 usernél a litázás .

Azt szeretném megoldani ,hogy egy oldalra mondjuk 30 usert listázzon ki ha van 90 user akkor 3 oldal legyen :)

Kipróbáltam egy SQL limitet ami > order by id DESC LIMIT 30 . ezzel az a gondom ,hogy kilistázza a 30 usert csak lapozni nem tudom :S

Hogyan lehetne ezt megoldani ,hogy működjön ? Nos találtam egy docs-ot ami nekem nem sikerült beüzemelnem .

http://netprog.eu/index.php?center=segedletek#oldal_szamozas

Előrre is THX, Üdv : Bence
 
1

Használd bátran a keresőt

Török Gábor · 2007. Aug. 16. (Cs), 15.21
Mielőtt kérdezek, keresek, hátha már mások is belefutottak ebbe a problémába.
2

Talan ez segithet

scoby · 2007. Aug. 17. (P), 09.37
3

oo saját

breakline · 2007. Aug. 17. (P), 12.56
én így használok egy oldalszámozó osztályt, amivel lehet laponként, vagy eredményhalmazonként is lépkedni, én mostanában már csak a laponkénti verziót használom:

<?php

class pager {
	
	//alapértelmezett oldal
	var $defaultPage = 1;

	//jelenlegi oldal
	var $currPage;
	//következő oldal
	var $nextPage;
	//előző oldal
	var $prevPage;
	//kezdőpont
	var $startPoint;
	//végpont
	var $endPoint;
	
	var $nextItems;
	var $prevItems;
	
	var $numOfItems;
	var $numOfPages;
	
	var $itemLimit;
	
	var $pageSelect;
	
	//ez az oldalakkal operáló konstruktor, $page a megjelenítenő oldal
	//természetesen ha nincs, akkor
	//beállítja, $itemLimit az oldalankénti limit
	//$numOfItems az összes "dolog" száma

	function construct_page($page,$itemLimit,$numOfItems) {
		$page = (isset($page)) ? intval($page) : $this -> defaultPage;
		$this -> currPage = $page;
		$this -> numOfPages = ceil($numOfItems/$itemLimit);
		if($this -> numOfPages==0) {
			$this -> numOfPages = 1;
		}
		$this -> itemLimit = $itemLimit;
		$this -> nextPage = ($page+1>$this -> numOfPages) ? $page : $page+1;
		$this -> prevPage = ($page-1<=0) ? 1 : $page-1;
		$this -> startPoint = ($page*$itemLimit)-$itemLimit;
		$this -> endPoint = ($page*$itemLimit);
		return true;
	}

	//ez a limites verzió, már nem használom

	function construct_limit($start,$itemLimit,$numOfItems) {
		$start = intval($start);
		$this -> nextItems = ($start+$itemLimit>$numOfItems) ? $start : ($start+$itemLimit);
		$this -> prevItems = ($start-$itemLimit<0) ? 0 : ($start-$itemLimit);
		return true;
	}

	//visszaadja az előző és a következő oldal számát egy tömbben, ebbőll lehet aztán linkeket képezni
	
	function get_pages() {
		return array("next"=>$this -> nextPage,"prev"=>$this -> prevPage);
	}

	//visszaadja a "pontokat", pl. ha egy tömböt szeretnénk szűrni, 
	//jól jöhet, pl. az első oldal 15-ös 
	//oldalankénti limit esetén 0-15, a 2. oldal 15-30 stb..

	function get_points() {
		return array("start"=>$this -> startPoint,"end"=>$this -> endPoint);
	}

	//ez tömböt gyárt, méghozzá az ismert "listázzuk az összes oldalt" formátumhoz, az $offset annyit
	//jelent, hogy az aktuális oldaltól +- hány oldalt mutasson, tehát pl. 2-es offset 
	//és 10-es aktuális oldal esetén így néz ki a visszaadott 
	//tömb (összesen pl. 80 oldal): [1] [8] [9] [10] [11] [12] [88]

	function get_all_pages($offset = 1) {
		$return = array();
		for ($i=1;$i<$this -> numOfPages+1;$i++) {
			if (in_array($i,$return)) {
				continue;
			}
			$return[$i] = "";
			if ($i==$this -> currPage) {
				for ($j = 1;$j<$offset+1;$j++) {
					if (!in_array($i-$j,$return)) {
						if (!($i-$j<0)) {
							$return[$i-$j] = $i-$j;
						}
					}
				}
				$return[$i] = $i;
				for ($j = 1;$j<$offset+1;$j++) {
					if (!in_array($i+$j,$return)) {
						if (!($i+$j>$this -> numOfPages)) {
							$return[$i+$j] = $i+$j;
						}
					}
				}
			}
		}
		if (!in_array(1,$return)) {
			$return[1] = 1;
		}
		if (!in_array($this -> numOfPages,$return)) {
			$return[$this -> numOfPages] = $this -> numOfPages;
		}
		return $return;
	}
	
}
?>
//és pl. így lehet használni, most mondjuk az $eredmeny egy akármilyen tömb:

$page = $_GET['page'];
$limit = 10;
$darab = count($eredmeny);

$pager = new pager;
$pager -> construct_page($page,$limit,$darab);
$points = $pager -> get_points();
$pages = $pager -> get_pages();
$all_pages = $pager -> get_all_pages(1);
for ($i = $points['start'];$i<$points['end'];$i++) {
	// itt kiiratjuk amit akarunk
}
?>
<a href="?page=<?=$pages['prev'];?>">Előző oldal</a>
<?php
//itt listázunk minden oldalt
foreach ($all_pages as $index=>$currPage) {
	$link = "?page=".$currPage;
	if (empty($currPage)) continue;
	if ($currPage = $pager -> currPage) {
		//ha az aktív oldal van soron
		echo '<a href="'.$link.'" class="akt">['.$currPage.']</a>';
		continue;
	}
	echo '<a href="'.$link.'">['.$currPage.']</a>';
}
?>
<a href="?page=<?=$pages['next'];?>">>Következő oldal</a>
<?php
Még annyit, hogy ha nincs következő oldal, akkor a legnagyobb oldal számát kapod meg következő linknek.

üdv
BL
4

THX

mpdt · 2007. Aug. 18. (Szo), 18.42
Nagyon köszönöm a segítséget ;)