OO Paginanummering

Door Roel -, 10 jaar geleden, 7.498x bekeken

Een tijd geleden heb ik een paginanummeringsscript gemaakt en die heb ik hier ook toegevoegd op PHPhulp. Een tijdje daarna heb ik mezelf eraan gewaagd deze in OO stijl te maken, alleen deze was erg brak.

Vandaar nu een volledig opnieuw gebouwd OO paginanummeringsscript: OO Paginanummering

Kent niet heel veel opties, maar is vooral handig en flexibel in het gebruik.

Hoe werkt het?
1. Laad de klasse in
2. Maak je query
3. Maak het paginanummeringsobject
4. Haal je resultaten op
5. Laat een navigatiemenu zien

Gebruik voor je SQL resource in je while-lus de functie getResultaten() - deze bevat de resource met de resultaten van de huidige pagina.

Op de plaats van je navigatie gebruik je de functie getNavigatie(). Deze stuurt een multidimensionale array terug met daarin een navigatiemenu. Deze arrays bevatten de volgende waardes die je kunt uitlezen:

Quote:
soort - het soort navigatieitem dat het is (de soorten staan hieronder)
nummer - het paginanummer dat je in je URL gebruikt
schermnummer - het nummer dat je op je pagina toont


Soorten in het attribuut 'soort'
Quote:
vorige - knop voor de vorige pagina
eerste - knop voor de eerste pagina
pagina - knop voor een paginanummer
huidig - het huidige paginanummer (hoort geen knop te zijn)
laatste - knop voor de laatste pagina
volgende - knop voor de volgende pagina


De getNavigatie() functie stuurt dus een multidimensionale array terug, die lees je dus uit met een foreach()-lus. Gebruik voor de link het attribuut 'nummer' en voor het nummer dat op het scherm moet komen het attribuut 'schermnummer'. Het soort item dien je dus uit te lezen met een switch(), om te bepalen wat je met het item gaat doen. (denk aan opmaak e.d.)

Klinkt lastig? Bekijk de klasse dan maar eens, er staat heel wat commentaar bij! Alles wordt vanzelf duidelijk. In index.php staat ook een voorbeeld voor in de praktijk.

Ik hoop dat jullie er wat aan hebben! Commentaar is natuurlijk altijd welkom ;-)

(De functies getResultaten() en getNavigatie() zitten natuurlijk in het object, maar dat spreekt voor zich)

Gesponsorde koppelingen

PHP script bestanden

  1. index.php
  2. paginanummering.class.php

 

Er zijn 15 reacties op 'Oo paginanummering'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Roel -
Roel -
10 jaar geleden
 
0 +1 -0 -1
Is iedereen zo stil van het resultaat dat ie niks zegt?
Niels K
Niels K
10 jaar geleden
 
0 +1 -0 -1
Beste Roel,

Ik heb de code even doorgenomen en ik heb een vraag over de denk / implementatie wijze.
Is het niet mooier / beter om het Adapter pattern te gebruiken?

Mvg,

Niels
Roel -
Roel -
10 jaar geleden
 
0 +1 -0 -1
Zoals een samenwerking met Zend?
Niels K
Niels K
10 jaar geleden
 
0 +1 -0 -1
Dat bedoelde ik niet echt. Ik bedoelde meer iets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$paginator
= new Paginator(Paginator_Array(array()));

?>


Ik vind zelf Zend_Paginator heel goed opgebouwd. Kijk daar eens naar zou ik zeggen.

Niels
Pim -
Pim -
10 jaar geleden
 
1 +1 -0 -1
Niels, ik wou net hetzelfde reageren ;)
Roel -
Roel -
10 jaar geleden
 
0 +1 -0 -1
Dat ziet er heel anders uit dan mijn script (in het gebruik dan).
Hebben jullie verder nog wat over mijn klasse te zeggen? Wat er beter kan bijvoorbeeld.
Tom Swinkels
Tom Swinkels
10 jaar geleden
 
0 +1 -0 -1
Ik heb je code even globaal bekeken. Maar volgensmij doen je methodes ook meerdere dingen. Bij OO mag een methode maar één ding doen, anders moet je het verder op splitsen.
Dennis Sluijk
Dennis Sluijk
9 jaar geleden
 
0 +1 -0 -1
Wat als ik pagination wil gebruiken met data die niet uit de database komt? Dat kan dan niet. Mischien daarvoor een oplossing zoeken. En dan kan je bijvoorbeeld 1 hoofd klassen hebben Pagination en dan een sub classe bijoorbeeld Mysql_Data_Pagination die Pagination extends.
Niels K
Niels K
9 jaar geleden
 
0 +1 -0 -1
@Dennis,

Vandaar dus mijn vraag 'Is het niet mooier / beter om het Adapter pattern te gebruiken?'

;-)
Jeffrey Achternaam
Jeffrey Achternaam
9 jaar geleden
 
0 +1 -0 -1
Ik ga hier zeker gebruik van maken!
Bedankt voor het delen :)
Ik heb ook gelijk gestemt bij de scripts!
Jeroen VD
Jeroen VD
9 jaar geleden
 
0 +1 -0 -1
ook deze reactie is weer totaal nutteloos jeffrey, de reacties hier zijn bedoeld om de tutorial vooruit te helpen, niet om te zeggen dat je erop gestemd hebt!
Jeffrey Achternaam
Jeffrey Achternaam
9 jaar geleden
 
0 +1 -0 -1
Wat een onaangename manier van reageren heb jij Jeroen! Het script van Roel heeft mij verder geholpen en dat is toch waar het om draait? Mensen bedanken voor de tijd die ze erin gestoken hebben zie ik als iets vanzelfsprekends maar dat wordt hier blijkbaar niet gewaardeerd.
Roel -
Roel -
9 jaar geleden
 
0 +1 -0 -1
Een bedankje wordt zeker gewaardeerd! Bedankt Jeffrey :-)
Jeroen VD
Jeroen VD
9 jaar geleden
 
0 +1 -0 -1
Mijn excuses voor die uitval, maar ik erger me groen en geel aan nutteloze reacties op tutorials en script. In mijn ogen zet je bij deze reacties alleen opbouwende kritiek neer, of een aantal vragen over het betreffende onderwerp. Daarbij een bedankje plaatsen is natuurlijk nooit weg. Maar het plaatsen van losse bedankjes (die van jou was 3 weken na de laatste reactie) zorgt ervoor dat scripts/tutorials telkens weer omhoog gehaald worden, terwijl er alles al van gezegd is. Ik zie hier geregeld scripts/tutorials van jaren oud omhooggehaald worden met nuttoze reacties, en daar heb ik gewoon een hekel aan.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jordi Kroon
Jordi Kroon
9 jaar geleden
 
0 +1 -0 -1
jeroen scripts zijn er om te helpen. De maker van het script heeft moeite gedaan en dat mogen de gebruikers best waarderen. Het is daardoor fijn om complimentjes te ontvangen voor het werk wat ze hebben verricht.

Vragen over een script worden afgehandeld in een nieuw door de gebruiker aangemaakte topic.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. index.php
  2. paginanummering.class.php

Labels

Navigatie

 
 

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.