paging class

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

paging class

Δημοσίευση από Khronos » 02 Μαρ 2009 15:52

Εχω βρεί αυτή την κλάση για paging. Εμφανίζει τα αποτελέσματα στη μορφή "prev 1 2 [3] 4 5 next". Υπάρχει πρόβλημα όμως στην περίπτωση που υπάρχουν πολλές σελίδες με αποτέλεσμα να δημιουργείται ένα μακρινάρι απο αριθμούς. Πώς μπορώ να την τροποποιήσω έτσι ώστε να οι σελίδες να εμφανίζονται σε αυτή τη μορφή? : prev 1 ... 5 [6] 7 ... 12.

Η χρήση της κλάσης γίνεται έτσι.

Κώδικας: Επιλογή όλων

$rs = new MySQLPagedResultSet("select * from players", 15, $cnx);

while ($row = $rs->fetchArray()) {
    echo $row['lastname'] . '-' . $row['name'];
}
?>
<p><?=$rs->getPageNav&#40;&#41;?></p>
Η κλάση:

Κώδικας: Επιλογή όλων

<?php
class MySQLPagedResultSet &#123;
	private $results;
	private $pageSize;
	private $page;
	private $row;
	
	function __construct&#40;$query,$pageSize,$cnx&#41; &#123;
		$resultpage = $_GET&#91;'page'&#93;;
		
		$this->results = mysql_query&#40;$query,$cnx&#41;;
		
		$this->pageSize = $pageSize;
		
		if &#40;&#40;int&#41;$resultpage <= 0&#41;&#123;
			$resultpage = 1;
		&#125;
		
		if &#40;$resultpage > $this->getNumPages&#40;&#41;&#41;&#123;
			$resultpage = $this->getNumPages&#40;&#41;;
		&#125;
		
		$this->setPageNum&#40;$resultpage&#41;;
	&#125;
	
	
	function getNumPages&#40;&#41;&#123;
		if &#40;!$this->results&#41;&#123;
			return FALSE;
		&#125;
		return ceil&#40;mysql_num_rows&#40;$this->results&#41; / &#40;float&#41;$this->pageSize&#41;;
	&#125;
	
	
	function setPageNum&#40;$pageNum&#41;&#123;
		if &#40;$pageNum > $this->getNumPages&#40;&#41; || $pageNum <= 0&#41;&#123;
			return FALSE;
		&#125;
		$this->page = $pageNum;
		$this->row = 0;
		mysql_data_seek&#40;$this->results,&#40;$pageNum-1&#41; * $this->pageSize&#41;;
	&#125;
	
	
	function getPageNum&#40;&#41;&#123;
		return $this->page;
	&#125;
	
	
	function isLastPage&#40;&#41;&#123;
		return &#40;$this->page >= $this->getNumPages&#40;&#41;&#41;;
	&#125;
	
	function isFirstPage&#40;&#41;&#123;
		return &#40;$this->page <= 1&#41;;
	&#125;
	
	
	function fetchArray&#40;&#41;&#123;
		if &#40;!$this->results&#41;&#123;
			return FALSE;
		&#125;
		if &#40;$this->row >= $this->pageSize&#41;&#123;
			return FALSE;
		&#125;
		$this->row++;
		return mysql_fetch_array&#40;$this->results&#41;;
	&#125;
	
	
	function getPageNav&#40;&#41;&#123;
		$nav = '';
		if &#40;!$this->isFirstPage&#40;&#41;&#41;&#123;
			$nav .= "<a href=\"?page=". &#40;$this->getPageNum&#40;&#41;-1&#41;.'">Prev</a> ';
		&#125;
		
		if &#40;$this->getNumPages&#40;&#41; > 1&#41;&#123;
			for &#40;$i=1; $i<=$this->getNumPages&#40;&#41;; $i++&#41;&#123;
				if &#40;$i==$this->page&#41;
					$nav .= "<strong>&#91;$i&#93;</strong> ";
				else
					$nav .= "<a href=\"?page=&#123;$i&#125;\">$i</a> ";
			&#125;
				
			if &#40;!$this->isLastPage&#40;&#41;&#41;&#123;
				$nav .= "<a href=\"?page=" . &#40;$this->getPageNum&#40;&#41;+1&#41;.'">Next</a> ';
			&#125;
		&#125;
		return $nav;
	&#125;
&#125;
?>

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

paging class

Δημοσίευση από cherouvim » 02 Μαρ 2009 16:53

Δείγμα κακής σχεδίασης.
Μέσα στο PHP class εκτός του paging μοντέλου έχει και http user interface ($_GET), mysql data access (mysql_query) και html presentation (<a href=..)

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

paging class

Δημοσίευση από Khronos » 02 Μαρ 2009 17:12

Εχεις υπόψην σου κάτι καλύτερο ή υποδείξεις για καλύτερη σχεδίαση του συγκεκριμμένου έτσι ώστε να κάνει αυτό που ψάχνω? Οτιδήποτε που θα με βοηθήσει ευπρόσδεκτο!

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

paging class

Δημοσίευση από fafos » 02 Μαρ 2009 18:02

Khronos έγραψε:Εχεις υπόψην σου κάτι καλύτερο ή υποδείξεις για καλύτερη σχεδίαση του συγκεκριμμένου έτσι ώστε να κάνει αυτό που ψάχνω? Οτιδήποτε που θα με βοηθήσει ευπρόσδεκτο!
http://www.phpclasses.org/browse/package/2012.html
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

paging class

Δημοσίευση από Khronos » 02 Μαρ 2009 19:24

Κάτι τετοιο χρειαζόμουν! Ευχαριστώ

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες