freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Σελιδοποίηση αποτελεσμάτων από βάση δεδομένων ΙΙ


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » PHP Προγραμματισμός και εφαρμογές » PHP τα δικά μας scripts
Moderators:  PHP Moderators, Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [14 Μηνύματα]       Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
korgr
Honorary Member

Μέλος από: 07 Οκτ 2008
Βοηθήματα: 5
Scripts: 2
Μηνύματα: 256+

Περιοχή: Corinth
View users profile
portfolio skype 
ΜήνυμαΣτις: 15 Οκτ 2008 18:17    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Με την ευκαιρία που ήρθε το topic αυτό στην επιφάνεια (και έτσι το είδα και εγώ), ας συνεισφέρω και εγώ κάτι.
Πριν από μερικές μέρες είχα δημοσιεύσει ένα pagination tutorial στο vcdc.gr το οποίο κατά τύχη είναι νοητή συνέχεια αυτού που δημοσίευσε εδώ ο panosru. Αν λοιπόν έχουμε τις δύο σημαντικές μεταβλητές ($getDataLen ==> πόσα αποτελέσματα έχουμε και $lpr ==> ανά πόσα θα εμφανίζονται σε κάθε σελίδα), έρχεται να αναλάβει η δική μου function:

function pagination($numrows, $rows_per_page, $hasdetails, $qstring)

Τα ορίσματα είναι:
$numrows σύνολο εγγραφών δηλαδή η $getDataLen
$rows_per_page ανά πόσες εγγραφές θα αλλάζουμε σελίδα, δηλαδή η $lpr
$hasdetails (true/false) αν θέλουμε να εμφανίζει τους extra headers "Βρέθηκαν χ εγγραφές (Σελίδα χ από χ)
$qstring οποιεσδήποτε άλλες GET μεταβλητές θέλουμε να περνάμε από σελίδα σε σελίδα, χωρισμένες με κόμμα (πχ $qstring = 'section,category,mode')

Δυνατότητες:
first page- previous page- next page- last page
εμφάνιση τρέχουσας σελίδας πλαισιωμένη από χ σελίδες προς κάθε κατεύθυνση

κώδικας:

<?
function pagination($numrows, $rows_per_page, $hasdetails, $qstring){
if(!$numrows || !$rows_per_page) { return; }
$qstring = ($qstring != '') ? buildquerystring($qstring) : '' ; // αν υπάρχουν μεταβλητές να κτισθεί το Query String
$page = (isset($_GET['page'])) ? $_GET['page'] : 1; // αν δεν έχει δωθεί η μεταβλητή $page να ορισθεί ως 1 (πρώτη)
$lastpage = ceil($numrows/$rows_per_page); // υπολογισμός του αριθμού της τελευταίας σελίδας αποτελεσμάτων
$page = (int)$page; // η $page να είναι πάντα ακέραιος
$page = ($page > $lastpage) ? $lastpage : $page; //έλεγχος αν η μεταβλητή $page ισούται με την τελευταία σελίδα
$page = ($page < 1) ? 1 : $page; // έλεγχος αν η μεταβλητή $page είναι μικρότερη από 1
$offset = 5; // πόσες σελίδες να εμφανίζονται ως προηγούμενες και επόμενες σε σχέση με την τρέχουσα σελίδα ($page)
$leftoffset = (($page-$offset) > 0) ? $offset : $page-1; // αριθμός εμφανιζόμενων σελίδων αριστερά από την τρέχουσα
$rightoffset = (($page+$offset) < $lastpage ) ? $offset : $lastpage-$page; // αριθμός εμφανιζόμενων σελίδων δεξιά από την τρέχουσα

if($hasdetails){
echo("<div class='pages'>Βρέθηκαν $numrows αποτελέσματα (Σελίδα $page από $lastpage)</div>");
echo("<div class='free'></div>");
}
if($numrows > $rows_per_page){ // εμφάνιση μόνο αν τα αποτελέσματα δεν χωράνε σε μία σελίδα
echo("<div class='pagination'>");
echo("<p class='container'>");

if($page > 1) {
if($page > 2) {
echo("<a href='?page=1$qstring' class='startarrow' title='πρώτη σελίδα'><<</a>");
}
$p = $page-1;
echo("<a href='?page=$p$qstring' class='larrow' title='προηγούμενη σελίδα'><</a>");
}
for($n=$page-$leftoffset; $n<$page; $n++){
echo("<a href='?page=$n$qstring'  title='μετάβαση στη σελίδα $n'>$n</a>");
}
echo("<a href='#' onClick='return false;' class='current'>$page</a>");
$p = $page+1;
for($n=$p; $n<=$page+$rightoffset; $n++){
echo("<a href='?page=$n$qstring'  title='μετάβαση στη σελίδα $n'>$n</a>");
}
if($page < $lastpage) {
echo("<a href='?page=$p$qstring' class='rarrow' title='επόμενη σελίδα'>></a>");
if($page < $lastpage-1){
echo("<a href='?page=$lastpage$qstring' class='lastarrow' title='τελευταία σελίδα'>>></a>");
}
}
echo("</p>");
echo("</div><div class='free'></div>");
}
} // end of function


function buildquerystring ($vars){
$temparray= explode (',', $vars);
$qs="&";
for($i=0; $i < sizeof($temparray); $i++){
if($temparray[$i]){
global ${$temparray[$i]};
$qs.=$temparray[$i]."=".${$temparray[$i]}."&";
}
}
$querystring=substr($qs, 0, strlen($qs)-1);
return $querystring;
} // end of function

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pagination</title>
<link rel="stylesheet" type="text/css" href="pagination.css" media="all" />
</head>
<body style="margin: 20px">
<?


// -----κάποιες μεταβλητές που θέλουμε να περάσουμε στο QUERY STRING ----------
$section=2;
$category=5;
$mode="advanced_search";
// ----------------------------------------------------------------------------------------------------



$vars='section,category,mode'; // Τα ονόματα των μεταβλητών που θέλουμε να περνάμε στα query strings με GET Method, χωρισμένα με κόμμα (,)

pagination(300, 20, true, $vars); //δημιουργία pagination για 300 συνολικές εγγραφές παρουσιαζόμενες ανά 20 με εμφάνιση details
?>
<br><br><br><br><br><br><br><br><br><br><div align="center">Παρουσίαση αποτελεσμάτων...</div><br><br><br><br><br><br><br><br><br><br>
<?
pagination(300, 20, false, $vars); //δημιουργία pagination για 300 συνολικές εγγραφές παρουσιαζόμενες ανά 20 χωρίς εμφάνιση details
?>
</body>
</html>



και το css που μπορείτε να παραμετροποιήσετε:

κώδικας:

.pagination {
padding: 5px 0;
margin-right: 10px;
}
.pagination a {
font-family: Verdana, Arial;
font-size: 10px;
text-decoration: none;
display: block;
color: #000;
margin: 1px;
float: left;
padding: 1px 10px;
font-weight: bold;
background: url(images/pagination_bg.jpg) 0 0 no-repeat;
}
.pagination a:hover {
color: #fff;
background-position: 0 -20px;
}
.pages {
font-family: Verdana, Arial;
font-size: 10px;
color: #000;
color: #000;
text-align: right;
border-bottom: 1px solid;
width: auto;
padding: 7px 0;
margin: 0 10px 0 10px;
}
.free {
clear:both;
}
.pagination .current, .pagination .current:hover{
background-position: 0 -40px;
color: #fff;
cursor: default;
}
.pagination .container{
float: right;
margin: 0;
}
.pagination .larrow {margin-right: 5px;}
.pagination .rarrow {margin-left: 5px;}
.pagination .startarrow {margin-right: 10px;}
.pagination .lastarrow {margin-left: 10px;}


Live Demo για την εμφάνιση στο:
http://www.vcdc.gr/tests/pagination/

Υπάρχουν στον κώδικα ελληνικά σχόλια για να το φέρετε στα μέτρα σας
cordis
Administrator, [F|H]ounder, [C|S]EO

Μέλος από: 09 Οκτ 1999
Βοηθήματα: 95
Νέα: 477
Templates: 1
Scripts: 2
Μηνύματα: 256+

Περιοχή: Greece
View users profile Visit posters website
blog cv flickr picasa facebook linkedin 
twitter friendfeed deviantART del.icio.us 
ΜήνυμαΣτις: 15 Οκτ 2008 21:15    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

ωραίο!

το έκοψα για να είναι μόνο του, νομίζω το αξίζει

_________________
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Basilakis
PHP Moderator

Μέλος από: 17 Νοε 2003
Βοηθήματα: 68
Νέα: 7
Templates: 3
Scripts: 3
Μηνύματα: 256+

Περιοχή: Womans' Brain
View users profile Send email to user Visit posters website
blog deviantART flickr myspace facebook linkedin 
hi5 sync twitter deviantART skype 
ΜήνυμαΣτις: 15 Οκτ 2008 22:10    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Όμορφο.

Έχει το εξής πρόβλημα. θα πρέπει όταν αυξάνωνται η αριθμού, να κρίβονται κάπιοιυ και να φένονται μόνο οι καινο΄θργιοι... παράδειγμα

1 2 3 4 5 6 7

active η σελίδα 1

όταν είναι active η σελίδα 4 να είναι κάπως έτσι

4 5 6 7 8 9 10

_________________
Κατασκευη Ιστοσελιδων
korgr
Honorary Member

Μέλος από: 07 Οκτ 2008
Βοηθήματα: 5
Scripts: 2
Μηνύματα: 256+

Περιοχή: Corinth
View users profile
portfolio skype 
ΜήνυμαΣτις: 15 Οκτ 2008 22:21    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Basilakisweb ανέφερε:
Όμορφο.

Έχει το εξής πρόβλημα. θα πρέπει όταν αυξάνωνται η αριθμού, να κρίβονται κάπιοιυ και να φένονται μόνο οι καινο΄θργιοι... παράδειγμα

1 2 3 4 5 6 7

active η σελίδα 1

όταν είναι active η σελίδα 4 να είναι κάπως έτσι

4 5 6 7 8 9 10


Αν θες μια τέτοια συμπεριφορά θα πρέπει να αλλάξεις τιμές στις $rightoffset και $offset ως εξής:
$rightoffset = 0;
$offset = 6 ή όσες σελίδες θες να φαίνονται δεξιά...

cordis σε ευχαριστώ, ελπίζω να βοηθήσει κάποιους
alohagr


Μέλος από: 16 Ιουν 2007
Μηνύματα: 25

View users profile
ΜήνυμαΣτις: 20 Οκτ 2008 12:31    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

θα ήθελα να ρωτήσω αν αυτό το pagination script μπορεί να χρησιμοποιηθεί και σε στατικές σελίδες. Αν για παράδειγμα έχω 100 φωτογραφίες και θέλω να τις παρουσιάζω από 10 σε κάθε σελίδα. Γίνεται; ή θα πρέπει να υπάρχει βάση δεδομένων ; ευχαριστώ
korgr
Honorary Member

Μέλος από: 07 Οκτ 2008
Βοηθήματα: 5
Scripts: 2
Μηνύματα: 256+

Περιοχή: Corinth
View users profile
portfolio skype 
ΜήνυμαΣτις: 20 Οκτ 2008 13:31    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Η βάση στην ουσία είναι απαραίτητη...
Πάντως αν δεν τρέχει η php δεν δουλεύει καθόλου το script, οπότε για στατικές σελίδες δεν έχεις τύχη... (λογικό αφού το pagination είναι εξ ορισμού δυναμικό στοιχείο)
alohagr


Μέλος από: 16 Ιουν 2007
Μηνύματα: 25

View users profile
ΜήνυμαΣτις: 20 Οκτ 2008 14:04    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Μάλιστα. Μήπως θα μπορούσες λίγο να με βοηθήσεις σε ποιο σημείο του script θα καλέσω τον πίνακα της βάσης που θα φτιάξω. Αν για παράδειγμα έχω ένα πίνακα με τις φωτογραφίες μου που τον ονομάζω data, λογικά δεν θα πρέπει να κάνω κάπου ένα SELECT και να το συνδυάσω με το script σου. Θα με βοηθούσε πολύ αν μου έκανες ένα απλο παράδειγμα του script. Ευχαριστώ προκαταβολικά.
korgr
Honorary Member

Μέλος από: 07 Οκτ 2008
Βοηθήματα: 5
Scripts: 2
Μηνύματα: 256+

Περιοχή: Corinth
View users profile
portfolio skype 
ΜήνυμαΣτις: 20 Οκτ 2008 23:31    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Δανείζομαι τον κώδικα από το παράδειγμα pagination που δημοσίευσε ο panosru στο http://www.freestuff.gr/forums/viewtopic.php?t=28203 (php4) ώστε να δεις το mysql part και πως προκύπτουν οι βασικές δύο μεταβλητές (σύνολο εγγραφών & εμφανιζόμενες εγγραφές ανά σελίδα) και απλά αντικαθιστώ το pagination.



κώδικας:

<?php

// Connect to Database
$cID = @mysql_connect('localhost','root','admin');

// Select Database
mysql_select_db('paggination');

// Define Character set
mysql_query("SET CHARACTER SET 'utf8'",$cID);
mysql_query("SET NAMES 'utf8'",$cID);

// Get page
$page = $_GET['page'];

// If page is not defined we are on page 1
if ($page <= 0) $page = 1;

// Define how much lines per page we are showing (lpr = Lines Per Page)
$lpr = 25;

// Define start, depends on what page we are viewing
$start = ($page * $lpr) - $lpr;

// Define our queries (qp1, qp1 {= Query Part 1 / Query Part 2})
$qp1 = "SELECT * FROM `data`";
$qp2 = sprintf("%s ORDER BY `id` DESC LIMIT %d,%d",$qp1,$start,$lpr);

// Count all rows from `data` table
$getDataLen = mysql_num_rows(mysql_query($qp1));

// Calculate how many pages will be shown
$pages = $getDataLen / $lpr;

// Get ALL from table `data`
$getData = mysql_query($qp2,$cID);

// Show users
while ($rows = mysql_fetch_assoc($getData))
{
   echo $rows['user'].'<br />';
}
echo '<hr />';
//**********************************************************
// εδώ βάζεις την pagination function...
//ενοείται πως στην αρχή του κώδικά σου θα συμπεριλάβεις και τον κώδικα της function που δημοσίευσα...


pagination($getDataLen, $lpr, false, '');


//***********************************************************
   
// Close link to database
mysql_close($cID);
?>
alohagr


Μέλος από: 16 Ιουν 2007
Μηνύματα: 25

View users profile
ΜήνυμαΣτις: 21 Οκτ 2008 09:21    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Σε ευχαριστώ πάρα πολύ φίλε korgr, θα το δοκιμάσω άμεσα.
bilakios


Μέλος από: 22 Οκτ 2005
Μηνύματα: 14
Περιοχή: Glyfada
View users profile
ΜήνυμαΣτις: 22 Οκτ 2008 12:51    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

filarako korgr
poli kalo bravo Καλό ε!
korgr
Honorary Member

Μέλος από: 07 Οκτ 2008
Βοηθήματα: 5
Scripts: 2
Μηνύματα: 256+

Περιοχή: Corinth
View users profile
portfolio skype 
ΜήνυμαΣτις: 31 Οκτ 2008 18:26    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Παρατηρώ πως λείπει ένα κομμάτι κώδικα το οποίο πρέπει να το βάλουμε πριν το τελικό query ώστε από την τιμή της $page να υπολογίζουμε την $startrecord (αρχική τιμή της LIMIT στο τελικό query):

κώδικας:

$result=mysql_query("select * from table where 1"); //count records
$maxrows=mysql_num_rows ($result);
$mode=30; // Αριθμός εμφανιζόμενων εγγραφών ανά σελίδα
$page = ($page > 0) ? $page : 1; // αν δεν έχει δωθεί η μεταβλητή $page να ορισθεί ως 1
$startrecord=($page * $mode) - $mode; // η πρώτη εγγραφή του σετ (αρχική τιμή της LIMIT)
$startrecord=($startrecord < 0) ? 0 : $startrecord ; // Απαγορεύεται η αρνητική τιμή
$result=mysql_query("select * from table where 1 LIMIT $startrecord, $mode");
$rows=mysql_num_rows ($result);
if($rows){
$vars = 'getvar1,getvar2'; // αν έχουμε GET μεταβλητές τις περνάμε εδώ...
pagination($maxrows, $mode, true, $vars);
//...
//παρουσίαση αποτελεσμάτων
//...
}
pagination($maxrows, $mode, false, $vars);


Είπα να το δημοσιεύσω μήπως και δεν θεωρήθηκε δεδομένο πως χρειάζεται για την σωστή σύνταξη του query...

_________________
Projects: www.topgr.gr | www.ktizo.gr | Odyssey CMS | Οικονομική διαχείριση εσόδων-εξόδων
dimsis
Reporter

Μέλος από: 25 Ιουλ 2001
Βοηθήματα: 9
Νέα: 89
Μηνύματα: 256+


View users profile
ΜήνυμαΣτις: 07 Φεβ 2009 12:52    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αν δεν έχει περάσει ήδη το Link, ένα tutorial για pagination και απο το nettuts που έχει δεχθεί αρκετά θετικά σχόλια και περιλαμβάνει και τον source code για άμεσο download:
How to Paginate Data with PHP
cherouvim
Script Master

Μέλος από: 13 Ιουλ 2005
Βοηθήματα: 7
Νέα: 1
Scripts: 1
Μηνύματα: 256+

Περιοχή: Athens, Greece
View users profile Visit posters website
blog linkedin twitter 
ΜήνυμαΣτις: 07 Φεβ 2009 18:13    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Σχετικό άρθρο και συζήτηση από ένα guru της MySQL
http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/

_________________
blog
malla


Μέλος από: 20 Ιουλ 2010
Μηνύματα: 17

View users profile Send email to user Visit posters website
ΜήνυμαΣτις: 04 Αυγ 2010 14:01    Θέμα:
Περιγραφή θέματος: δεν γνωριζω ajax αλλα θελω να μαθω σελιδοποιηση
Απάντηση με παράθεση  Mark this post and the followings unread

καλησπερα
σελιδοποιηση για αρχαριους...πως μπορω να ξεκινησω ,τι πρεπει να ξερω,αφου δεν γνωριζω ajax..?!!
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [14 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » PHP Προγραμματισμός και εφαρμογές » PHP τα δικά μας scripts
Τώρα είναι 10 Δεκ 2016 08:53 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos