Ik kan me jaren geleden herinneren toen ik voor het eerst begon met coderen in PHP en MySQL, hoe opgewonden was ik de eerste keer dat ik informatie uit een database kreeg om in een webbrowser te verschijnen.
Voor iemand die weinig database- en programmeerkennis had, zag ik die tabelrijen op het scherm verschijnen op basis van de code die ik schreef (oké dus ik kopieerde een voorbeeld uit een boek - laten we geen haartjes splitsen) gaf me een triomfantelijke high. Ik heb misschien toen nog niet alle magie op het werk volledig begrepen, maar dat eerste succes spoorde me aan tot grotere en betere projecten.
Hoewel mijn niveau van uitbundigheid over databases misschien niet hetzelfde is als het ooit was,
sinds mijn eerste 'Hello World' ontmoeting met PHP en MySQL ben ik verslaafd geraakt
over de kracht om dingen eenvoudig en gebruiksvriendelijk te maken.
Als ontwikkelaar is een probleem waar ik voortdurend mee geconfronteerd ben een grote hoeveelheid informatie te vergaren en het gemakkelijk te verteren. Of het nu gaat om een klantenlijst van een groot bedrijf of een persoonlijke mp3-catalogus, het moet ontmoedigend zijn om rijen en rijen naar rijen te kijken
en frustrerend. Wat kan een goede ontwikkelaar doen? Pagineren!
Als u op zoek bent naar een snelle oplossing, is er een grote verzameling scripties en helpers voor paginering bij Envato Market.
Deze PHP-pagineringklasse is echt handig. Het kan worden geïmplementeerd met elke door PHP ondersteunde database-engine, het is heel gemakkelijk aan te passen en te implementeren, ondersteunt standaard twee schermen, heeft meerkleurige ontwerpschema's en meer.
Paginering is in wezen het proces van het nemen van een reeks resultaten en verspreiding
ze uit over pagina's om ze gemakkelijker te bekijken.
Ik besefte al vroeg dat als ik 5000 rijen informatie had om niet alleen weer te geven
zou het een hoofdpijn zijn voor iemand om te proberen te lezen, maar de meeste browsers zouden dit wel doen
een internet-eeuwigheid (dat wil zeggen meer dan ongeveer vijf seconden) om het weer te geven.
Om dit op te lossen zou ik verschillende SQL-statements coderen om stukjes data te verwijderen, en als dat zo was
in een goed humeur zou ik zelfs een paar "volgende" en "vorige" knoppen erin kunnen gooien.
Na een tijdje moet je deze code in elk vergelijkbaar project laten vallen en aanpassen
het passen werd oud. Snel. En zoals elke goede ontwikkelaar weet, kweekt luiheid inventiviteit
of zoiets. Dus op een dag ging ik zitten en besloot om met een simpele te komen,
flexibele en eenvoudig te gebruiken PHP-klasse die automatisch het vuile werk zou doen
me.
Een kort woordje over mij en PHP-lessen. Ik ben geen objectgeoriënteerde sukkel. Sterker nog, ik nauwelijks
ooit de dingen gebruiken. Maar na het lezen van enkele OOP-voorbeelden en tutorials, en sommige
eenvoudige voorbeelden van vallen en opstaan, ik besloot het een werveling te geven en je weet wat?
Het werkt perfect voor paginering. De code die hier wordt gebruikt is geschreven in PHP 4 maar zal
werk in PHP 5.
Moet wel van MySQL houden. Geen aanstoot aan de andere database-systemen die er zijn, maar voor
Ik heb alleen MySQL nodig. En een geweldige functie van MySQL is dat ze je wat geven
gratis voorbeelddatabases om mee te spelen op http://dev.mysql.com/doc/#sampledb.
Voor mijn voorbeelden gebruik ik de werelddatabase (~ 90k gecomprimeerd) die over bevat
4000 platen om mee te spelen, maar de schoonheid van het PHP-script dat we zullen creëren is
dat het met elke database kan worden gebruikt. Nu denk ik dat we het er allemaal over eens zijn dat als we besloten hebben
niet om onze resultaten te pagineren dat we uiteindelijk heel lang en onpraktisch zouden eindigen
resultaten zoals de volgende:
(klik voor volledige grootte, belachelijk lang beeld ~ 338k)
Dus laten we het hebben over het opsplitsen van onze gegevens in makkelijk te verteren beten zoals deze:
Mooi toch? Zodra u de pagination-klasse in uw code hebt geplaatst, kunt u dit doen
snel en eenvoudig een enorme set gegevens omzetten in gemakkelijk te navigeren pagina's met
slechts een paar regels code. Werkelijk.
Dit voorbeeld bestaat uit twee scripts, de herbruikbare paginatorklasse en het indexbestand waarin de tabelitems en bedieningselementen worden weergegeven.
De paginatorklasse heeft slechts twee methoden en de constructor, we zullen deze stapsgewijs opbouwen en elke stap uitleggen wanneer we verder gaan.
Deze definitie is alleen de paginator vereiste lidvariabelen, omdat dit een helperklasse is en het is bestemd voor paginering alleen zal het vertrouwen op een geldige verbinding met de MySQL-server en een reeds gedefinieerde vraag dat we de parameters zullen toevoegen die nodig zijn om de resultaten te pagineren. We zullen beginnen met de constructormethode.
_conn = $ conn; $ this -> _ query = $ query; $ rs = $ this -> _ conn-> query ($ this -> _ query); $ this -> _ total = $ rs-> num_rows;
Heel eenvoudig toch? Deze methode stelt alleen de databaseverbinding van het object en de benodigde query in, waarna het het totale aantal rijen berekent dat door die query is opgehaald zonder enige beperking of parameters overslaan, dit totaal is nodig om de koppelingen voor de paginator te maken.
Merk op dat we voor de eenvoud geen foutcontrole of andere validatie van de gegeven parameters uitvoeren, maar in een toepassing in de echte wereld zijn deze controles noodzakelijk.
Resultaten ophalen
Laten we nu de methode maken die de gegevens daadwerkelijk pagineert en de resultaten retourneert.
_limit = $ limiet; $ this -> _ page = $ pagina; if ($ this -> _ limit == 'all') $ query = $ this -> _ query; else $ query = $ this -> _ query. " BEGRENZING " . (($ this -> _ page - 1) * $ this -> _ limit). ", $ this -> _ limit"; $ rs = $ this -> _ conn-> query ($ query); while ($ row = $ rs-> fetch_assoc ()) $ results [] = $ row; $ resultaat = nieuwe stdClass (); $ result-> page = $ this -> _ pagina; $ result-> limit = $ this -> _ limit; $ resultaat-> totaal = $ dit -> _ totaal; $ result-> data = $ resultaten; return $ resultaat;Laten we dit stap voor stap analyseren, eerst stellen we de limiet- en paginaparameters in, die standaard respectievelijk de 10 en 1 instellen. Vervolgens controleren we of de gebruiker een bepaald aantal rijen of allemaal nodig heeft, baseer hierop en de paginaparameter die we hebben ingesteld
BEGRENZING
parameter van de query, houdt de "- 1" van de pagina rekening met het feit dat we de pagina's beginnen in 1 in plaats van 0.Hierna evalueren we eenvoudig de query en krijgen de resultaten. Als laatste maken we een nieuw resultatenobject met de limiet, pagina en totale parameters van de uitgevoerde query en de gegevens voor elk van de opgehaalde rijen.
Pagineringkoppelingen weergeven
Laten we nu de methode schrijven die wordt gebruikt om de paginakoppelingen te krijgen.
_limit == 'all') return "; $ last = ceil ($ this -> _ total / $ this -> _ limit); $ start = (($ this -> _ page - $ links)> 0)? $ this -> _ pagina - $ links: 1; $ end = (($ this -> _ pagina + $ links) < $last ) ? $this->_page + $ links: $ laatste; $ html = '
Dit is een vrij lange methode, zoiets als 34 regels code, dus laten we nu eens uitleggen wat er in deze methode aan de hand is.
Dat is alles wat er is met de Paginator.class, natuurlijk kunnen we setters en getters toevoegen voor de databaseverbinding, limiet, pagina, query en totale parameters, maar voor de eenvoud houden we het zo.
Nu gaan we het bestand maken dat verantwoordelijk is voor het gebruik van de Paginator-klasse en de gegevens weergeven, dus laat me u eerst de HTML-basis laten zien.
PHP-paginering PHP-paginering
stad land Continent Regio