5 pagina's voor en na

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maikel  B

Maikel B

19/04/2011 11:53:10
Quote Anchor link
Ik heb een script dat zoekresultaten op verschillende pagina's zet.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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 " - ";
                        }
                    }

?>


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
 
PHP hulp

PHP hulp

19/04/2024 22:47:26
 
- Mark -

- Mark -

19/04/2011 12:01:40
Quote Anchor link
Is al wat ouder en niet helemaal naar wens maar komt grotendeels in de richting.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>


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 -
 
Maikel  B

Maikel B

19/04/2011 13:47:18
Quote Anchor link
oke bedankt ;)
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$vorige
= $huidige_pagina - 1;
                    $volgende = $huidige_pagina + 1;

                    if ($huidige_pagina == 0) {
                        echo "&nbsp;";
                    }
else {
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=0&zoek=".$_REQUEST['zoek']."\">Eerste pagina</a>&nbsp;|&nbsp;";
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$vorige."&zoek=".$_REQUEST['zoek']."\">Vorige</a>&nbsp; &nbsp; ...";
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 4)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 3)."</a>&nbsp;";
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 3)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 2)."</a>&nbsp;";
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 2)."&zoek=".$_REQUEST['zoek']."\">".($vorige - 1)."</a>&nbsp;";
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($vorige - 1)."&zoek=".$_REQUEST['zoek']."\">".$vorige."</a>&nbsp;";
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$vorige."&zoek=".$_REQUEST['zoek']."\">".($vorige + 1)."</a>";
                    }


                    echo "&nbsp;<font size='4'><b>".($huidige_pagina + 1)."</b></font>&nbsp;";

                    if (($huidige_pagina + 1) == $aantal_paginas) {
                        echo "&nbsp;";
                    }
else {
                        echo "<a href=\"".$_SERVER['PHP_SELF']."?search&p=".$volgende."&zoek=".$_REQUEST['zoek']."\">".($volgende + 1)."</a>";
                        echo "&nbsp;<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 1)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 2)."</a>";
                        echo "&nbsp;<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 2)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 3)."</a>";
                        echo "&nbsp;<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 3)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 4)."</a>";
                        echo "&nbsp;<a href=\"".$_SERVER['PHP_SELF']."?search&p=".($volgende + 4)."&zoek=".$_REQUEST['zoek']."\">".($volgende + 5)."</a>";
                        echo "...&nbsp; &nbsp; <a href=\"".$_SERVER['PHP_SELF']."?search&p=".$volgende."&zoek=".$_REQUEST['zoek']."\">Volgende</a>&nbsp;|&nbsp;";
                        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
 
- Mark -

- Mark -

19/04/2011 15:30:49
Quote Anchor link
Wat is mis met mijn voorbeeld? Die doet toch wat je wilde op het vet gedrukte na? Dat kan trouwens veranderd worden op regel 123. Het toevoegen van de zoekterm moet je dan doen op regel 104, 121 en 136

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 -
 
Maikel  B

Maikel B

19/04/2011 15:51:25
Quote Anchor link
Er is niks mis met jouw voorbeeld alleen deze code die ik nu gebruik heb ik helemaal zelf gemaakt en ik snap die code dus. Als ik naar jou code kijk zitten er nog een aantal dingen in die ik nog niet snap (ben pas met php bezig).
Daarom zou ik liever mijn eigen code verder uitbreiden.
 
- Mark -

- Mark -

19/04/2011 16:46:38
Quote Anchor link
Het logica gedeelte zullen we maar zeggen zit in regel 41 t/m 85. Het kan best zo zijn dat het nog korter kan maar ik ben uitgekomen op 4 stappen. In jouw geval krijg je dan 4 blokken met code.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.