Jag kan komma ihåg år sedan när jag först började koda i PHP och MySQL, hur upphetsad var jag första gången jag fick information från en databas för att dyka upp i en webbläsare.
För någon som hade lite databas och programmeringskunskap såg de här tabellraderna upp på skärmen baserat på koden jag skrev (okej så jag kopierade ett exempel från en bok - låt oss inte dela hår) gav mig en triumferande hög. Jag har kanske inte helt förstått all magi på jobbet då, men den första framgången ledde mig till större och bättre projekt.
Medan min nivå av överflöd över databaser kanske inte är densamma som den en gång var,
Sedan min första "hej värld" möte med PHP och MySQL har jag blivit knuten
på kraften att göra saker enkelt och enkelt att använda.
Som utvecklare är ett problem som jag ständigt konfronteras med att ta en stor uppsättning information och gör det lätt att smälta. Oavsett om det är ett stort företags kundlista eller en personlig mp3-katalog som måste sitta och stirra i rader på rader på rader av data kan vara avskräckande
och frustrerande. Vad kan en bra utvecklare göra? Paginera!
Om du letar efter en snabb lösning finns det en bra samling av paginationsskript och hjälpare över på Envato Market.
Denna PHP-paginationsklass är verkligen användbar. Det kan implementeras med alla PHP-stödda databasmotorer, det är väldigt lätt att anpassa och implementera, stöder två skärmar som standard, har flerfärgade designscheman och mer.
Pagination är i huvudsak processen att ta en uppsättning resultat och spridning
dem ut över sidor för att göra dem enklare att visa.
Jag insåg det tidigt om jag hade 5000 rader information att visa inte bara
skulle det vara en huvudvärk för någon att försöka läsa, men de flesta webbläsare skulle ta
en Internet-evighet (dvs mer än ungefär fem sekunder) för att visa den.
För att lösa detta skulle jag koda olika SQL-satser för att dra ut bitar av data, och om jag var
I ett gott humör kan jag till och med slänga in ett par "nästa" och "tidigare" knappar.
Efter ett tag måste du släppa den här koden i alla liknande projekt och anpassa
den passade blev gammal. Snabb. Och som alla goda utvecklare vet känner lathet rasande uppfinningsrikedom
eller något sådant. Så en dag satt jag ner och bestämde mig för att komma upp med en enkel,
flexibel och lätt att använda PHP-klass som automatiskt skulle göra det smutsiga arbetet för
mig.
Ett snabbt ord om mig och PHP klasser. Jag är ingen objektorienterad whiz. Faktum är att jag knappast
Använd någonsin sakerna. Men efter att ha läst några OOP-exempel och tutorials, och några
Enkla exempel på prov och fel, jag bestämde mig för att ge det en virvel och du vet vad?
Det fungerar perfekt för pagination. Koden som används här är skriven i PHP 4 men kommer att
jobba i PHP 5.
Måste älska MySQL. Inget brott mot de andra databassystemen där ute, men för
mig, allt jag behöver är MySQL. Och en bra funktion i MySQL är att de ger dig lite
gratis provdatabaser att spela med på http://dev.mysql.com/doc/#sampledb.
För mina exempel använder jag världsdatabasen (~ 90k zipped) som innehåller över
4000 poster att spela med, men skönheten i PHP-skriptet vi ska skapa är
att den kan användas med vilken databas som helst. Nu tror jag att vi alla kan vara överens om att om vi bestämde oss
att inte paginera våra resultat att vi skulle hamna med en mycket lång och ojämn
resultat som följande:
(klicka för full storlek, löjligt lång bild ~ 338k)
Så det går lätt att bryta upp våra data så att de lätt kan smälta biter så här:
Vackert är det inte? När du har släppt paginationsklassen i din kod kan du
snabbt och enkelt omvandla en stor uppsättning data till lätt att navigera sidor med
bara några rader av kod. Verkligen.
Det här exemplet kommer att bestå av två skript, den återanvändbara paginator klassen och indexfilen som visar tabellobjekten och kontrollerna.
Paginator-klassen har bara två metoder och konstruktören, vi kommer att bygga den, förklarar gradvis varje steg när vi går framåt.
Den här definitionen är bara en paginator som kräver medlemsvariabler, eftersom det här är en hjälparklass och den är avsedd för pagination, kommer den att förlita sig på en giltig anslutning till MySQL-servern och en redan definierad fråga som vi kommer att lägga till parametrarna som behövs för att paginera resultaten. Vi börjar med konstruktormetoden.
_conn = $ conn; $ this -> _ query = $ query; $ rs = $ this -> _ conn-> fråga ($ this -> _ query); $ this -> _ total = $ rs-> num_rows;
Ganska enkelt rätt? Den här metoden anger bara objektets databasanslutning och den nödvändiga frågan. Efter det beräknar det totala antalet rader som hämtas av den frågan utan någon gräns eller hoppa över parametrar, är denna summa nödvändig för att skapa länkarna för paginorn.
Observera att för enkelhet gör vi inte felkontroll eller någon annan validering av de angivna parametrarna, men i en verklig applikation måste dessa kontroller vara nödvändiga.
Hämtar resultat
Låt oss nu skapa den metod som faktiskt kommer att paginera data och returnera resultaten.
_limit = $ limit; $ this -> _ page = $ page; om ($ this -> _ limit == 'all') $ query = $ this -> _ query; annars $ query = $ this -> _ query. "LIMIT". (($ this -> _ page - 1) * $ this -> _ limit). ", $ this -> _ limit"; $ rs = $ this -> _ conn-> fråga ($ query); medan ($ row = $ rs-> fetch_assoc ()) $ results [] = $ row; $ result = new stdClass (); $ result-> page = $ this -> _ page; $ result-> limit = $ this -> _ limit; $ result-> total = $ this -> _ total; $ result-> data = $ results; returnera $ resultat;Låt oss analysera det här steget i taget, först ställer vi gränsen och sidparametrarna, som som standard är inställda 10 respektive 1. Då kontrollerar vi om användaren kräver ett visst antal rader eller alla av dem, baseras på den här och sidparametern vi ställer in
BEGRÄNSA
parametern för frågan tar "- 1" av sidan hänsyn till det faktum att vi börjar sidorna i 1 istället för 0.Därefter utvärderar vi enkelt frågan och får resultaten, slutligen skapar vi ett nytt resultatobjekt som innehåller gränsen, sidan och totalparametrarna för den exekverade frågan samt uppgifterna för var och en av de hämtade raderna.
Visar paginationslänkar
Låt oss nu skriva metoden som används för att få paginationslänkarna.
_limit == 'alla') return '; $ last = maximum ($ this -> _ total / $ this -> _ limit); $ start = (($ detta -> _sidan - $ länkar)> 0)? $ this -> _ sida - $ länkar: 1; $ end = (($ detta -> _ sida + $ länkar) < $last ) ? $this->_page + $ länkar: $ last; $ html = '
Det här är en ganska lång metod, något som 34 linjer kod, så nu låt oss förklara vad som händer i den här metoden.
Det är allt som finns till Paginator.class, vi kan naturligtvis lägga till setters och getters för databasanslutning, gräns, sida, fråga och totala parametrar, men för enkelhet kommer vi att behålla det här sättet.
Nu skapar vi filen som ansvarar för att använda Paginator-klassen och visar data, så först låt mig visa dig basen HTML.
PHP-paginering PHP-paginering
Stad Land Kontinent Område