5 pagina's voor en na
Er komen 5 resultaten per pagina en dan wordt er een nieuwe pagina gemaakt.
Dus bv. 1 - 2 - 3 - 4 - 5 etc... en dan is de pagina waarop je zit dikgedrukt. Dit doe ik met de volgende forloop:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
for($i = 0; $i < $aantal_paginas; $i++) {
if($huidige_pagina == $i) {
// huidige pagina is niet klikbaar
echo "<b>".($i+1)."</b>";
} else {
// een andere pagina dan de huidige is wel klikbaar
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$i."&zoek=".$_REQUEST['zoek']."\">".($i+1)."</a>";
}
// deel-streepje tussen alle items
if($i < $aantal_paginas - 1) {
echo " - ";
}
}
?>
for($i = 0; $i < $aantal_paginas; $i++) {
if($huidige_pagina == $i) {
// huidige pagina is niet klikbaar
echo "<b>".($i+1)."</b>";
} else {
// een andere pagina dan de huidige is wel klikbaar
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$i."&zoek=".$_REQUEST['zoek']."\">".($i+1)."</a>";
}
// deel-streepje tussen alle items
if($i < $aantal_paginas - 1) {
echo " - ";
}
}
?>
Nu mijn vraag. Als ik een bepaalde zoekterm invul dan vind ie vaak heel veel resultaten die dan worden verdeeld over 400 pagina's. Wat nu het geval is is dat er dan onder die resultaten een lijstje komt met alle 400 pagina's. Nu wil ik dat je alleen de pagina ziet waarop je zit en dan de 5 pagina's ervoor en de 5 erna. Dus stel dat ik op pagina 12 zit dan wil ik het zo zien: 7 8 9 10 11 12 13 14 15 16 17
Weet iemand hoe ik dit kan maken? Heb al even gezocht maar kom er niet uit.
Gewijzigd op 19/04/2011 11:53:39 door Maikel B
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Settings.
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
Make sure the menu length is an uneven number.
*/
#| Maximum length of the menu.
$menu_length = 11;
#| Menu's divider.
$menu_divider = ' | ';
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Page count.
--------------------------------------------------------------------------------------------------------------------------*/
// Hier moet je je eigen code plaatsen voor het het berekenen van het aantal pagina's,
$page_count = 32;
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Validate the supplied current page. " $_GET['page'] "
--------------------------------------------------------------------------------------------------------------------------*/
#| Current page.
$current_page = (isset($_GET['page']) and in_array($_GET['page'], range(1, $page_count))) ? $_GET['page'] : 1 ;
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Menu's range.
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
Calculate the menu's range.
*/
#| Calculate the menu's middle point.
$mid_point = floor($menu_length / 2 );
#| Calculate the menu's range.
if($page_count <= $menu_length){
#| Not enough pages for the fancy stuff.
$menu_range = range(1, $page_count);
}
elseif($current_page > ($page_count - $mid_point)){
#| Last couple of pages.
$menu_range = range(($page_count - $menu_length + 1) , $page_count);
}
elseif($current_page > $mid_point){
#| Middle pages.
$menu_range = range(($current_page - $mid_point), ($current_page + $mid_point));
}
else{
#| First couple of pages.
$menu_range = range(1, $menu_length);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Pagination :: Demo</title>
</head>
<body>
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Previous page.
--------------------------------------------------------------------------------------------------------------------------*/
if($current_page > 1){
echo '<a href="?page='.($current_page - 1).'">Previous</a> ';
}
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Numeric menu.
--------------------------------------------------------------------------------------------------------------------------*/
#| Set " $menu " array for storing all the menu's items.
$menu = array();
#| Create all the menu's items.
foreach($menu_range as $page){
$menu[] = ($page == $current_page) ? '(<a href="?page='.$page.'">'.$page.'</a>) ' : '<a href="?page='.$page.'">'.$page.'</a>' ;
}
#| Display the menu.
echo implode($menu_divider, $menu);
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Next page.
--------------------------------------------------------------------------------------------------------------------------*/
if($current_page < $page_count){
echo ' <a href="?page='.($current_page + 1).'">Next</a>';
}
?>
</body>
</html>
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Settings.
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
Make sure the menu length is an uneven number.
*/
#| Maximum length of the menu.
$menu_length = 11;
#| Menu's divider.
$menu_divider = ' | ';
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Page count.
--------------------------------------------------------------------------------------------------------------------------*/
// Hier moet je je eigen code plaatsen voor het het berekenen van het aantal pagina's,
$page_count = 32;
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Validate the supplied current page. " $_GET['page'] "
--------------------------------------------------------------------------------------------------------------------------*/
#| Current page.
$current_page = (isset($_GET['page']) and in_array($_GET['page'], range(1, $page_count))) ? $_GET['page'] : 1 ;
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Menu's range.
--------------------------------------------------------------------------------------------------------------------------*/
/*---- INFO! ---->
Calculate the menu's range.
*/
#| Calculate the menu's middle point.
$mid_point = floor($menu_length / 2 );
#| Calculate the menu's range.
if($page_count <= $menu_length){
#| Not enough pages for the fancy stuff.
$menu_range = range(1, $page_count);
}
elseif($current_page > ($page_count - $mid_point)){
#| Last couple of pages.
$menu_range = range(($page_count - $menu_length + 1) , $page_count);
}
elseif($current_page > $mid_point){
#| Middle pages.
$menu_range = range(($current_page - $mid_point), ($current_page + $mid_point));
}
else{
#| First couple of pages.
$menu_range = range(1, $menu_length);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Pagination :: Demo</title>
</head>
<body>
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Previous page.
--------------------------------------------------------------------------------------------------------------------------*/
if($current_page > 1){
echo '<a href="?page='.($current_page - 1).'">Previous</a> ';
}
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Numeric menu.
--------------------------------------------------------------------------------------------------------------------------*/
#| Set " $menu " array for storing all the menu's items.
$menu = array();
#| Create all the menu's items.
foreach($menu_range as $page){
$menu[] = ($page == $current_page) ? '(<a href="?page='.$page.'">'.$page.'</a>) ' : '<a href="?page='.$page.'">'.$page.'</a>' ;
}
#| Display the menu.
echo implode($menu_divider, $menu);
/*--------------------------------------------------------------------------------------------------------------------------
(§) Pagination | Next page.
--------------------------------------------------------------------------------------------------------------------------*/
if($current_page < $page_count){
echo ' <a href="?page='.($current_page + 1).'">Next</a>';
}
?>
</body>
</html>
Toevoeging op 19/04/2011 12:39:40:
LET OP! Er zaten wat foutjes in, deze zijn er nu uitgehaald. Ik had de verkeerde versie gepost.
Gewijzigd op 19/04/2011 15:34:29 door - Mark -
ik zal kijken of ik er iets van kan maken :)
EDIT:
ik heb nu iets totaal anders als de code hierboven maar ik heb het nu voor elkaar om 5 paginas na en voor de huidige pagina te zetten. Alleen stel dat er 10 pagina's zijn en ik zit op pagina 8 dan laat ie nu gewoon 8 9 10 11 12 13 zien en als ik op pagina 2 zit laat ie ervoor -3 -2 -1 0 1 2 zien terwijl die eigenlijk bij 1 zou moeten stoppen.
Weet iemand hoe ik dit in mijn bestaande code kan krijgen
hieronder de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$vorige = $huidige_pagina - 1;
$volgende = $huidige_pagina + 1;
if ($huidige_pagina == 0) {
echo " ";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=0&zoek=".$_REQUEST['zoek']."\">Eerste pagina</a> | ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$vorige."&zoek=".$_REQUEST['zoek']."\">Vorige</a> ...";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 4)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 3)."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 3)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 2)."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 2)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 1)."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 1)."&zoek=".$_REQUEST['zoek']."\">".$vorige."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$vorige."&zoek=".$_REQUEST['zoek']."\">".($vorige + 1)."</a>";
}
echo " <font size='4'><b>".($huidige_pagina + 1)."</b></font> ";
if (($huidige_pagina + 1) == $aantal_paginas) {
echo " ";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$volgende."&zoek=".$_REQUEST['zoek']."\">".($volgende + 1)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 1)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 2)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 2)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 3)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 3)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 4)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 4)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 5)."</a>";
echo "... <a href=\"".$_SERVER['PHP_SELF']."?search&p=".$volgende."&zoek=".$_REQUEST['zoek']."\">Volgende</a> | ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($aantal_paginas - 1)."&zoek=".$_REQUEST['zoek']."\">Laatste pagina</a>";
}
?>
$vorige = $huidige_pagina - 1;
$volgende = $huidige_pagina + 1;
if ($huidige_pagina == 0) {
echo " ";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=0&zoek=".$_REQUEST['zoek']."\">Eerste pagina</a> | ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$vorige."&zoek=".$_REQUEST['zoek']."\">Vorige</a> ...";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 4)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 3)."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 3)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 2)."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 2)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 1)."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 1)."&zoek=".$_REQUEST['zoek']."\">".$vorige."</a> ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$vorige."&zoek=".$_REQUEST['zoek']."\">".($vorige + 1)."</a>";
}
echo " <font size='4'><b>".($huidige_pagina + 1)."</b></font> ";
if (($huidige_pagina + 1) == $aantal_paginas) {
echo " ";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$volgende."&zoek=".$_REQUEST['zoek']."\">".($volgende + 1)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 1)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 2)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 2)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 3)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 3)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 4)."</a>";
echo " <a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 4)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 5)."</a>";
echo "... <a href=\"".$_SERVER['PHP_SELF']."?search&p=".$volgende."&zoek=".$_REQUEST['zoek']."\">Volgende</a> | ";
echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($aantal_paginas - 1)."&zoek=".$_REQUEST['zoek']."\">Laatste pagina</a>";
}
?>
Gewijzigd op 19/04/2011 14:59:31 door Maikel B
PS Je kunt beter echo ' ' doen inplaats van dubbele quotes. dan hoef je niet alles te escapen. Het gebruik van $_SERVER['PHP_SELF'] is niet al te veilig "XSS". ook niet echt nodig in dit geval trouwens.
Gewijzigd op 19/04/2011 15:35:16 door - Mark -
Daarom zou ik liever mijn eigen code verder uitbreiden.
1. We hebben evenveel of minder aantal pagina's dan de maximale lengte van het menu. We kunnen nu gewoon zonder problemen alle pagina's gewoon weergeven.
2. De huidige pagina is nog niet ver genoeg. we kunnen gewoon 1 t'm de maximale lengte van het menu weergeven.
3. De huidige pagina is nu zo ver dat het wat moeilijker wordt. hier komt dus het gedeelte dat x aantal pagina's van de huidige pagina op en af telt en weergeeft.
4. De huidige pagina is nu zo ver dat we alleen nog de laatse pagina's hoeven weer te geven. "pagina_totaal - menu_lengte tot pagina_totaal"
PS, Ja in mijn voorbeeld zijn een paar stappen omgekeerd. Ik zal het straks even aanpassen als ik tijd heb. Voor de werking maakt het niets uit maar mooi is het niet.