Fördelen med att använda en heltäckande webbapplikationsram är att du inte behöver oroa dig för de vanliga uppgifterna som inmatningshantering, formvalidering och liknande, eftersom ramen redan tillhandahåller inslag för dessa funktioner. Således kan du koncentrera dig på applikationens affärslogik istället för att återuppfinna hjulet om och om igen.
Idag ska vi utforska ett viktigt bibliotek i CodeIgniter-ramverket - paginationsbiblioteket.
Låt mig markera de ämnen som vi kommer att täcka under denna artikel:
I det här avsnittet går vi igenom ett exempel som visar användningen av paginering i CodeIgniter. Det är det bästa sättet att förstå hur sakerna fungerar helt och hållet.
I vårt exempel bygger vi en ganska enkel användarlista där vi hämtar poster från användarens MySQL-tabell. För att lyckas köra detta exempel, se till att du har uid
och du namnger
fält i användartabellen.
Då är vi redo att rulla.
Fortsätt och skapa en kontrollerfil controllers / Paging.php
med följande innehåll.
last> bibliotek ( 'sidnumrering'); // ladda URL-hjälpen $ this-> load-> hjälpen ('url'); offentliga funktionsindex () // ladda db och modell $ this-> load-> database (); $ This-> last> modell ( 'användare'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); om ($ total_records> 0) // få aktuell sida poster $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'Personsöknings- / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> initiera ($ config); // skapa personsöknings länkar $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params); public function custom () // ladda db och modell $ this-> load-> database (); $ This-> last> modell ( 'användare'); // init params $ params = array (); $ limit_per_page = 2; $ page = ($ this-> uri-> segment (3))? ($ this-> uri-> segment (3) - 1): 0; $ total_records = $ this-> Users-> get_total (); om ($ total_records> 0) // få aktuell sida poster $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ page * $ limit_per_page); $ config ['base_url'] = base_url (). 'Personsöknings- / anpassad'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; // anpassad personsökning konfiguration $ config ['num_links'] = 2; $ config ['use_page_numbers'] = TRUE; $ config ['reuse_query_string'] = TRUE; $ config ['full_tag_open'] = ''; $ config ['full_tag_close'] = ''; $ config ['first_link'] = 'Första sidan'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Sista sidan'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Nästa sida'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Förra sidan'; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = ''; $ This-> pagination-> initiera ($ config); // skapa personsöknings länkar $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);
Därefter behöver vi en modellfil modeller / Users.php
som hämtar poster från användartabellen.
db-> gräns ($ gräns, $ start); $ query = $ this-> db-> get ("users"); om $ query-> num_rows ()> 0) foreach ($ query-> result () som $ rad) $ data [] = $ row; returnera $ data; returnera false; allmän funktion get_total () returnera $ this-> db-> count_all ("users");
Slutligen, låt oss skapa en visningsfil på visningar / user_listing.php
som visar användarlistan.
Söka exempel - Användarlista Användarlista
ID NAMN uid?> uname?> Inga användare hittades.
Nu, fortsätt och öppna vår anpassade sida på http: // din-kod-igniter-site / paging / index och du bör se användarlistan tillsammans med paginering! Så, det är det, vi har gjort det! Oroa dig inte, jag kommer inte att lämna dig så snart, eftersom vi börjar att dissekera varje del av koden nu.
Vi börjar med modellfilen modeller / Users.php
som det är något som kommer att hämtas från våra regleringsmetoder. Det finns två viktiga metoder, get_current_page_records
och get_total
, att vår modell implementerar för att bygga paginationslänkarna.
Låt oss gå igenom get_total
metod. Det är vanligt att räkna antalet poster i användartabellen.
allmän funktion get_total () return $ this-> db-> count_all ("users");
Därefter finns det a get_current_page_records
metod.
offentlig funktion get_current_page_records ($ limit, $ start) $ this-> db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("users"); om $ query-> num_rows ()> 0) foreach ($ query-> result () som $ rad) $ data [] = $ row; returnera $ data; returnera false;
Det finns två viktiga argument som du bör notera i get_current_page_records
metod. Det första argumentet, $ gräns
, används för att ange antalet poster som kommer att returneras under frågan. Och det andra argumentet, $ start
, fungerar som startindex för posten.
Så, som du kan se, givet värdena på $ start
och $ gräns
vi kan hämta poster efter sida. Det är kärnan i personsökning, och under tiden har vi implementerat den viktigaste metoden i denna artikel!
Så det var vår modell - enkel och elegant!
Förflyttning framåt, låt oss skicka vår uppmärksamhet åt kontrollerfilen. Gå vidare och ta tag i koden för konstruktormetoden.
offentlig funktion __construct () förälder :: __ construct (); // ladda paginationsbiblioteket $ this-> load-> library ('pagination'); // ladda URL-hjälpen $ this-> load-> hjälpen ('url');
För att kunna använda paginering i CodeIgniter är det första du behöver göra för att ladda paginationsbiblioteket. Och vi kan göra det genom att använda $ This-> last> bibliotek (sidnumrering)
.
Vi har också laddat URL-hjälpen så att vi kan använda globala hjälparfunktioner som tillhandahålls av den hjälpen.
Nu är vi redo att gå igenom hjärtat av vår controller-the index
metod.
offentliga funktionsindex () // ladda db och modell $ this-> load-> database (); $ This-> last> modell ( 'användare'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); om ($ total_records> 0) // få aktuell sida poster $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'Personsöknings- / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> initiera ($ config); // skapa personsöknings länkar $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);
Till att börja med ser vi till att databasen är laddad korrekt. Efter det laddar vi användare
modell så att vi kan använda modellmetoderna.
$ This-> last> databas (); $ This-> last> modell ( 'användare');
Därefter initierar vi några viktiga variabler.
// init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total ();
Variabeln $ limit_per_page
definierar gränsen per sida. Självklart kan du ställa in det som du vill den är inställd på 1 för tillfället för exempel.
De $ START_INDEX
variabel innehåller startindex för MySQL-posten. När CodeIgniter bygger paginationslänkarna lägger det till startsidan för sidan som det tredje segmentet i webbadressen som standard. Du kan ändra det här standardbeteendet, men det är något vi reserverar för det sista avsnittet i den här artikeln, där vi diskuterar anpassningsalternativ.
Slutligen kallar vi get_total
Metod för användarmodellen för att få den totala posten på användartabellen, och den är tilldelad till $ total_records
variabel.
Därefter hämtar vi de aktuella sidans register med hjälp av get_current_page_records
metod.
// få aktuell sida poster $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index);
Innan vi faktiskt kan gå vidare och bygga paginationslänkar, måste vi initiera den minimala personsökningskonfigurationen med hjälp av initialisera
sättet för personsökningsbiblioteket.
$ config ['base_url'] = base_url (). 'Personsöknings- / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> initiera ($ config);
Och det är uppsättningen av minimiparametrar för att bygga paginationslänkarna.
Slutligen använder vi create_links
metod för att bygga paginationslänkar.
// skapa personsöknings länkar $ params ["links"] = $ this-> pagination-> create_links ();
Resten är bara formaliteten att kalla vår åsikt user_listing
och gör utdata! Kör URL http: // your-code-igniter-site / paging / index för att se användarlistan tillsammans med paginationslänkarna.
Så det är ett mycket enkelt men ändå användbart paginationsexempel till ditt förfogande som du kan förlänga för att passa dina behov.
I nästa avsnitt utforskar vi hur du kan anpassa standardpaginering när det gäller utseende och funktionalitet.
I det här avsnittet undersöker vi vilka alternativ som du kan använda om du vill anpassa standardpaginationslänkarna.
Även om CodeIgniter-personsökningsbiblioteket automatiskt upptäcker den personsökningsrelaterade parametern från URL-adressen, kan du definiera ett anpassat värde om du har olika webbadressmönster.
$ config ["uri_segment"] = 4;
De NUM_LINKS
alternativet kan du definiera antalet siffra länkar som visas före och efter det aktiva sidnumret i paginationslänkarna.
$ config ['num_links'] = 2;
När du öppnar segmentet Paging URI är det ett startindex som standard. Om du till exempel har tio poster per sida är söknings-URI-segmentet 20 för den tredje sidan. Istället kan du ställa in om du vill visa faktiska sidnummer i söklänken use_page_numbers
till SANN
.
$ config ['use_page_numbers'] = TRUE;
Självklart måste du se till att du beräknar rätt startindex baserat på sidnumret som du hämtar från webbadressen.
Ofta slutar du i den situation där du vill behålla frågesträngsparametrar som inte är relaterade till paginering. Du kan använda reuse_query_string
möjlighet att aktivera den anläggningen.
$ config ['reuse_query_string'] = TRUE;
Dessa var några alternativ som du kan använda för att ändra standardpaginationsfunktionaliteten. Därefter ser vi på några andra alternativ som låter dig ändra hur paginationslänkar visas.
Om du vill pakka in paginationskoden med någon annan HTML-tagg kan du göra det med hjälp av full_tag_open
och full_tag_close
alternativ.
$ config ['full_tag_open'] = ''; $ config ['full_tag_close'] = '';
Det kan vara mycket användbart om du vill använda anpassad styling till paginationslänkarna.
Om du vill ändra texten som kommer att visas för första, sista, nästa och tidigare länkar kan du också göra det.
$ config ['first_link'] = 'Första sidan'; $ config ['last_link'] = 'Sista sidan'; $ config ['next_link'] = 'Nästa sida'; $ config ['prev_link'] = 'Förra sidan';
Om du vill lägga in de enskilda länkarna med någon HTML-tagg kan du också göra det på samma sätt som vi gjorde för att pakka hela personsökarkoden.
$ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = '';
Ibland vill du ställa in den aktiva länken annorlunda. Det kan du göra genom att använda wrapper-taggar som visas nedan.
$ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = '';
På samma sätt, om du vill sätta in siffrelänkar med något:
$ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';
Och det slutar berättelsen om anpassning. Faktum är att du kan gå vidare och titta på anpassningsexemplet på http: // your-code-igniter-site / paging / custom som redan ingår i vår kontrollerfil!
Nu är du medveten om konfigurationen som krävs för att skapa en anständig pagination med någon modelllista. Och för det mesta vill du behålla detsamma på hela webbplatsen. Vad ska du göra för att uppnå det? Du kan vara frestad att kopiera konfigurationskoden och klistra in den i varje åtgärd som kräver paginationskonfigurationen.
Det finns faktiskt ett bättre sätt att hantera detta scenario. Du kan skapa en personsökningskonfigurationsfil på application / config / pagination.php
och använd $ config
variabel för att definiera dina inställningar.
'; $ config ['full_tag_close'] = '
Baserat på det, den reviderade index
åtgärdsmetoden ska se ut så här:
offentliga funktionsindex () // ladda db och modell $ this-> load-> database (); $ This-> last> modell ( 'användare'); // init params $ params = array (); $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); // ladda konfigurationsfil $ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination'); $ inställningar ['total_rows'] = $ this-> Users-> get_total (); $ inställningar ['base_url'] = base_url (). 'Personsöknings- / config'; om ($ total_records> 0) // få aktuell sida poster $ params ["results"] = $ this-> Users-> get_current_page_records ($ settings ['per_page'], $ start_index); // använd inställningarna för att initiera biblioteket $ this-> pagination-> initialize ($ settings); // skapa personsöknings länkar $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);
Självklart är det TOTAL_ROWS
och base_url
variabler ändras från åtgärd till handling, så du måste ange dem explicit i varje åtgärd.
För att uppnå det måste du ladda paginationskonfigurationen i första hand.
$ this-> config-> load ('pagination', SANT); $ settings = $ this-> config-> item ('pagination');
Därefter kan du åsidosätta de åtgärdsspecifika inställningarna.
$ inställningar ['total_rows'] = $ this-> Users-> get_total (); $ inställningar ['base_url'] = base_url (). 'Personsöknings- / config';
Och du är färdig med det!
Så det var historien om paginationskonfigurationen, och det avslutar också den här artikeln!
Idag gick vi igenom paginationsbiblioteket i CodeIgniter.
I den första delen av denna artikel visade jag hur du kan använda paginationsbiblioteket genom att ge ett mycket enkelt men användbart exempel.
Därefter diskuterade vi de anpassningsalternativ som står till ditt förfogande när du ställer in paginering.
Slutligen diskuterade vi paginationskonfigurationen i det sista avsnittet.
CodeIgniter är en kraftfull PHP-plattform. Oavsett om du bara har börjat eller börjar med nästa version, glöm inte att kolla vad vi har tillgång till för dig också.
Jag skulle gärna vilja veta din feedback i form av frågor och kommentarer med hjälp av flödet nedan!