Jeg kan huske år siden da jeg først begynte å kode i PHP og MySQL, hvor spennende jeg var første gang jeg fikk informasjon fra en database for å dukke opp i en nettleser.
For noen som hadde liten database og programmeringskunnskap, ser de tabellrommene opp på skjermen basert på koden jeg skrev (ok, så jeg kopierte et eksempel fra en bok - la oss ikke dele hår) ga meg en triumferende høy. Jeg har kanskje ikke fullt ut forstått all den magiske på jobben da, men den første suksessen førte meg til større og bedre prosjekter.
Selv om nivået av utroskap over databaser kanskje ikke er det samme som det en gang var,
Helt siden min første 'hallo verden' møte med PHP og MySQL har jeg blitt hekta
på kraften til å gjøre ting enkle og enkle å bruke.
Som utvikler er et problem jeg stadig står overfor med å ta et stort sett med informasjon og gjør det enkelt å fordøye. Enten det er et stort selskaps kundeliste eller en personlig mp3-katalog, må du sitte og stirre på rader på rader på rader med data, som kan avlede
og frustrerende. Hva kan en god utvikler gjøre? Paginer!
Hvis du leter etter en rask løsning, er det en flott samling av paginasjonsskript og hjelpere på Envato Market.
Denne PHP pagineringskursen er veldig nyttig. Den kan implementeres med en hvilken som helst PHP-støttet databasemotor, det er veldig enkelt å tilpasse og implementere, støtter to skjermer som standard, har flerfarget designordninger og mer.
Paginering er i hovedsak prosessen med å ta et sett med resultater og spredning
dem ut over sider for å gjøre dem enklere å vise.
Jeg skjønte tidlig om det hvis jeg hadde 5000 rader med informasjon å vise ikke bare
ville det være en hodepine for noen å prøve å lese, men de fleste nettlesere ville ta
en Internett-evighet (dvs. mer enn omtrent fem sekunder) for å vise den.
For å løse dette ville jeg kode forskjellige SQL-setninger for å trekke ut biter av data, og om jeg var
I et godt humør kan jeg til og med kaste inn et par "neste" og "forrige" knapper.
Etter en stund, måtte du slippe denne koden i alle lignende prosjekter og tilpasse
det å passe ble gammel. Rask. Og som enhver god utvikler vet, raser latskap oppfinnsomhet
eller noe sånt. Så en dag satte jeg seg og bestemte meg for å komme opp med en enkel,
fleksibel og brukervennlig PHP-klasse som automatisk ville gjøre det skitne arbeidet for
meg.
Et raskt ord om meg og PHP-klasser. Jeg er ingen objektorientert whiz. Faktisk, jeg knapt
Bruk alltid tingene. Men etter å ha lest noen OOP-eksempler og opplæringsprogrammer, og noen
Enkle eksempler på prøving og feiling, bestemte meg for å gi det en virvel og du vet hva?
Det fungerer perfekt for paginering. Koden som brukes her er skrevet i PHP 4, men vil
jobbe i PHP 5.
Må elske MySQL. Ikke fornærmet de andre databasesystemene der ute, men for
Jeg, alt jeg trenger, er MySQL. Og en flott funksjon av MySQL er at de gir deg noe
gratis prøvedatabaser å spille med på http://dev.mysql.com/doc/#sampledb.
For mine eksempler skal jeg bruke verdensdatabasen (~ 90k zip) som inneholder over
4000 poster å spille med, men skjønnheten i PHP-skriptet vi skal skape er
at den kan brukes med hvilken som helst database. Nå tror jeg at vi alle kan være enige om at hvis vi bestemte oss
Ikke å paginere våre resultater at vi ville ende opp med noen veldig lange og uhåndterlige
resultater som følger:
(klikk for full størrelse, latterlig lang bilde ~ 338k)
Så kan vi komme ned for å bryte opp dataene våre til lett å fordøye biter som dette:
Vakre er det ikke? Når du slipper pagineringsklassen i koden du kan
raskt og enkelt forvandle et stort sett med data til enkle å navigere sider med
bare noen få linjer med kode. Egentlig.
Dette eksemplet vil bli komponert av to skript, den gjenbrukbare paginator-klassen og indeksfilen som viser tabellelementene og kontrollene.
Paginator-klassen har bare to metoder, og konstruktøren, vi skal bygge den, forklarer hvert trinn hvert trinn når vi beveger oss fremover.
Denne definisjonen er bare satt til paginatoren påkrevde medlemsvariabler, siden dette er en hjelpeklasse og den er bestemt for paginering, vil den stole på en gyldig forbindelse til MySQL-serveren og en allerede definert spørring som vi vil legge til parametrene som er nødvendige for å paginere resultatene. Vi starter med konstruktormetoden.
_conn = $ conn; $ this -> _ query = $ query; $ rs = $ this -> _ conn-> spørring ($ dette -> _ spørringen); $ dette -> _ totalt = $ rs-> num_rows;
Ganske enkelt rett? Denne metoden er bare satt til objektets databaseforbindelse og den nødvendige spørringen, etter at den beregner totalt antall rader hentet av den forespørselen uten noen grense eller hoppeparametre, er denne summen nødvendig for å opprette koblingene for paginisten.
Legg merke til at for enkelhets skyld ikke gjør vi feilkontroll eller annen validering av de oppgitte parametrene, men i en ekte verdensapplikasjon vil denne kontrollen være nødvendig.
Henter resultater
La oss nå lage metoden som faktisk vil paginere dataene og returnere resultatene.
_limit = $ limit; $ dette -> _ side = $ side; hvis ($ this -> _ limit == 'all') $ query = $ this -> _ spørringen; ellers $ query = $ dette -> _ spørringen. " GRENSE " . ((denne $ - _ _ side - 1) * $ dette -> _ grense). ", $ dette -> _ grense"; $ rs = $ dette -> _ conn-> spørring ($ spørring); mens ($ row = $ rs-> fetch_assoc ()) $ results [] = $ row; $ result = new stdClass (); $ result-> page = $ this -> _ side; $ result-> limit = $ this -> _ limit; $ resultat-> totalt = $ dette -> _ totalt; $ result-> data = $ results; returnere $ resultat;La oss analysere dette trinnet om gangen, først fastsetter vi grensen og sideparametrene, som som standard er satt henholdsvis 10 og 1. Deretter sjekker vi om brukeren krever et gitt antall rader eller alle av dem, base på dette og sideparameteren vi setter inn
GRENSE
parameteren for spørringen, tar «- 1» av siden hensyn til det faktum at vi starter sidene i 1 i stedet for 0.Etter dette vurderer vi bare spørringen og får resultatene, til slutt lager vi et nytt resultatobjekt som inneholder grensen, siden og totalparametrene for den utførte spørringen, samt dataene for hver av de hentede rader.
Viser pagineringslinker
La oss nå skrive metoden som brukes til å få paginasjonslinkene.
_limit == 'alle') return; $ last = tak ($ dette -> _ totalt / $ dette -> _ grense); $ start = (($ dette -> _ side - $ linker)> 0)? $ dette -> _ side - $ linker: 1; $ end = (($ dette -> _ side + $ linker) < $last ) ? $this->_page + $ links: $ last; $ html = '
Dette er en ganske lang metode, noe som 34 linjer med kode, så nå la oss forklare hva som skjer i denne metoden.
Det er alt som er til Paginator.class, selvfølgelig kan vi legge til setters og getters for databasetilkoblingen, grensen, siden, spørringen og totalparametrene, men for enkelhet vil vi holde det på denne måten.
Nå lager vi filen som har ansvaret for å bruke Paginator-klassen og viser dataene, så la meg først vise deg basen HTML.
PHP-paginering PHP-paginering
By Land Kontinent Region