Pagination i CodeIgniter Den kompletta guiden

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:

  • Demonstration av grundläggande personsökning
  • Utforska anpassningsalternativen
  • Paginationskonfiguration

Demonstration av Basic Paging

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.

  • base_url: Den URL-adress som ska användas när du bygger paginationslänkar
  • TOTAL_ROWS: Totalt antal poster
  • per sida: Rekordtal per sida

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.

Utforska Anpassningsalternativ

I det här avsnittet undersöker vi vilka alternativ som du kan använda om du vill anpassa standardpaginationslänkarna.

URI-segmentet

Ä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;

Antal siffror

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;

Sidantal som URI-segment

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.

Bevara frågestring

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.

Wrapper Tag

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.

Första, Senast, Nästa och Föregående

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'] = '';

Aktiv länk och nummerlänk

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!

Personsökarkonfiguration

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'] = '
'; $ 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'] = '';

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!

Slutsats

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!