Paginering in CodeIgniter de complete gids

Het voordeel van het gebruik van een volledig gestapeld webtoepassingsraamwerk is dat u zich geen zorgen hoeft te maken over de algemene taken zoals invoerverwerking, formuliervalidatie en dergelijke, omdat het framework al wrappers voor die functies biedt. Zo kunt u zich concentreren op de bedrijfslogica van de toepassing in plaats van het wiel telkens opnieuw uit te vinden.

Vandaag gaan we een belangrijke bibliotheek verkennen in het CodeIgniter-raamwerk - de bibliotheek voor paginering.

Ik wil de onderwerpen die we in de loop van dit artikel behandelen toelichten:

  • Demonstratie van basisoproep
  • Ontdek de aanpassingsopties
  • Configuratie paginering

Demonstratie van Basic Paging

In deze sectie zullen we een voorbeeld bekijken dat het gebruik van paginering in CodeIgniter demonstreert. Het is de beste manier om te begrijpen hoe dingen werken.

In ons voorbeeld zullen we een vrij eenvoudige gebruikerslijst maken waarin we records ophalen van de MySQL-tabel van de gebruiker. Om dit voorbeeld met succes uit te voeren, moet u ervoor zorgen dat u de uid en je naam velden in uw gebruikerstabel.

Met die opzet zijn we klaar om te rollen.

Ga je gang en maak een controllerbestand aan controllers / Paging.php met de volgende inhoud.

load> library ( 'paginering'); // laad URL-helper $ this-> load-> helper ('url');  public function index () // laad db en model $ this-> load-> database (); $ This-> load-> model ( 'gebruikers'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ dit-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // ontvang huidige pagina records $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'Paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> initialiseren ($ config); // build paging links $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params);  openbare functie aangepast () // laad db en model $ this-> load-> database (); $ This-> load-> model ( 'gebruikers'); // 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 (); if ($ total_records> 0) // ontvang huidige pagina records $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ page * $ limit_per_page); $ config ['base_url'] = base_url (). 'Paging / custom'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; // aangepaste pagineerconfiguratie $ 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'] = 'Eerste pagina'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Laatste pagina'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Volgende pagina'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Vorige pagina'; $ 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-> initialiseren ($ config); // build paging links $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);

Vervolgens hebben we een modeldossier nodig modellen / Users.php die records uit de tabel met gebruikers ophaalt.

db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("gebruikers"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () als $ rij) $ data [] = $ rij;  retourneer $ gegevens;  return false;  public function get_total () return $ this-> db-> count_all ("users"); 

Laten we tot slot een weergavebestand maken op views / user_listing.php die de gebruikerslijst weergeeft.

   Semafoonvoorbeeld-Gebruikersvermelding   

Gebruikersvermelding

ID kaart NAAM
uid?> uname?>
Geen gebruikers gevonden.

Ga nu verder en ga naar onze aangepaste pagina op http: // uw-code-ontsteker-site / paging / index en u zou de gebruikerslijst samen met de paginering moeten zien! Dus dat is het, we hebben het gedaan! Maak je geen zorgen, ik zal je niet zo snel verlaten, omdat we nu elk deel van de code gaan ontleden.

We beginnen met het modelbestand modellen / Users.php omdat dat iets wordt genoemd vanuit onze controlemechanismemethoden. Er zijn twee belangrijke methoden, get_current_page_records en get_total, die ons model implementeert om de paginakoppelingen te bouwen.

Laten we door de get_total methode. Het wordt gebruikt om het aantal records in de tabel met gebruikers te tellen.

openbare functie get_total () return $ this-> db-> count_all ("users"); 

Vervolgens is er een get_current_page_records methode.

openbare functie get_current_page_records ($ limit, $ start) $ this-> db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("gebruikers"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () als $ rij) $ data [] = $ rij;  retourneer $ gegevens;  return false; 

Er zijn twee belangrijke argumenten die u moet noteren in de get_current_page_records methode. Het eerste argument, $ limit, wordt gebruikt om het aantal records te specificeren dat tijdens de query-run wordt geretourneerd. En het tweede argument, $ start, fungeert als de startindex van het record.

Dus, zoals je kunt zien, gezien de waarden van $ start en $ limit we kunnen records per pagina ophalen. Dat is de essentie van paging, en intussen hebben we de belangrijkste methode van dit artikel geïmplementeerd!

Dus dat was ons model - eenvoudig en elegant!

Laten we onze aandacht richten op het controllerdossier. Ga je gang en pak de code van de constructormethode.

publieke functie __construct () parent :: __ construct (); // laad Paginatiebibliotheek $ this-> load-> library ('pagination'); // laad URL-helper $ this-> load-> helper ('url'); 

Om paginering in CodeIgniter te gebruiken, moet u eerst de paginatiebibliotheek laden. En we kunnen het doen door te gebruiken $ This-> load-> library ( 'paginering').

We hebben ook de URL-helper geladen, zodat we wereldwijde helperfuncties kunnen gebruiken die door die helper worden geboden.

Nu zijn we klaar om door het hart van onze controller te gaan - de inhoudsopgave methode.

public function index () // laad db en model $ this-> load-> database (); $ This-> load-> model ( 'gebruikers'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ dit-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // ontvang huidige pagina records $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'Paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> initialiseren ($ config); // build paging links $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Om te beginnen zorgen we ervoor dat de database correct is geladen. Hierna laden we de gebruikers model zodat we de modelmethoden kunnen gebruiken.

$ This-> load-> databank (); $ This-> load-> model ( 'gebruikers');

Vervolgens initialiseren we een aantal belangrijke variabelen.

// init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ dit-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total ();

De variabele $ limit_per_page definieert de limiet per pagina. Natuurlijk kunt u dit instellen zoals u wenst; het is op dit moment bijvoorbeeld ingesteld op 1.

De $ START_INDEX variabele bevat de startindex van de MySQL-record. Wanneer CodeIgniter de paginakoppelingen opbouwt, voegt deze standaard de startindex van de pagina toe als het derde segment in de URL. U kunt dit standaardgedrag wijzigen, maar dat is iets dat we zullen reserveren voor het laatste deel van dit artikel, waar we aanpassingsopties bespreken.

Ten slotte noemen we het get_total methode van het gebruikersmodel om de totale records van de gebruikerstabel te krijgen, en deze is toegewezen aan de $ total_records veranderlijk.

Vervolgens halen we de records van de huidige pagina op met behulp van de get_current_page_records methode.

// verkrijg huidige pagina-records $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index);

Voordat we daadwerkelijk door kunnen gaan met het bouwen van pagineringkoppelingen, moeten we de minimale pagineerconfiguratie initialiseren met behulp van de initialiseren methode van de paging-bibliotheek.

$ config ['base_url'] = base_url (). 'Paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ This-> pagination-> initialiseren ($ config);

En dat is de set minimumparameters om de paginakoppelingen te bouwen.

  • base_url: De URL die wordt gebruikt bij het maken van paginakoppelingen
  • TOTAL_ROWS: Totaal aantal records
  • per pagina: Recordaantal per pagina

Ten slotte gebruiken we de create_links methode om paginakoppelingen te maken.

// build paging links $ params ["links"] = $ this-> pagination-> create_links ();

De rest is slechts de formaliteit om ons beeld te noemen user_listing en render de uitvoer! Voer de URL http: // uw-code-ontsteker-site / paging / index uit om de gebruikerslijst samen met de paginatielinks te zien.

Dus dat is een heel eenvoudig en toch handig pagineringvoorbeeld dat u kunt uitbreiden om aan uw vereisten te voldoen.

In de volgende sectie zullen we onderzoeken hoe u de standaard paginering kunt aanpassen in termen van uiterlijk en functionaliteit.

Verken aanpassingsopties

In deze sectie zullen we de beschikbare opties verkennen die u zou kunnen gebruiken als u de standaard paginakoppelingen zou willen aanpassen.

URI-segment

Hoewel de paging-bibliotheek van CodeIgniter automatisch de pagineringgerelateerde parameter uit de URL detecteert, kunt u een aangepaste waarde definiëren als u een ander URL-patroon hebt.

$ config ["uri_segment"] = 4;

Aantal cijferkoppelingen

De NUM_LINKS optie geeft u de mogelijkheid om het aantal te definiëren cijfer links die voor en na het actieve paginanummer in de paginakoppelingen worden weergegeven.

$ config ['num_links'] = 2;

Paginanummer als URI-segment

Wanneer u het paging URI-segment opent, is dit standaard een startindex. Als u bijvoorbeeld tien records per pagina hebt, is het paging-URI-segment 20 voor de derde pagina. In plaats daarvan kunt u instellen dat u werkelijke paginanummers in de paginakoppelingen wilt weergeven use_page_numbers naar TRUE.

$ config ['use_page_numbers'] = TRUE;

Natuurlijk moet u ervoor zorgen dat u de juiste startindex berekent op basis van het paginanummer dat u uit de URL ophaalt.

Bewaar queryreeks

Vaker wel dan niet, komt u terecht in de situatie dat u queryreeksparameters wilt behouden die niet gerelateerd zijn aan paginering. U kunt de reuse_query_string optie om die faciliteit in te schakelen.

$ config ['reuse_query_string'] = TRUE;

Dit waren enkele opties die u kon gebruiken om de standaardfunctie voor paginering te wijzigen. Vervolgens zullen we een aantal andere opties bekijken waarmee u de manier kunt wijzigen waarop paginakoppelingen worden weergegeven.

Wrapper-tag

Als u de paginatiecode wilt omsluiten met een andere HTML-tag, kunt u dit doen met behulp van de full_tag_open en full_tag_close opties.

$ config ['full_tag_open'] = '
'; $ config ['full_tag_close'] = '
';

Het kan erg handig zijn om aangepaste opmaak toe te passen op de paginakoppelingen.

Eerste, laatste, volgende en vorige

Als u de tekst wilt wijzigen die wordt weergegeven voor de eerste, laatste, volgende en vorige links, kunt u dat ook doen.

$ config ['first_link'] = 'Eerste pagina'; $ config ['last_link'] = 'Laatste pagina'; $ config ['next_link'] = 'Volgende pagina'; $ config ['prev_link'] = 'Vorige pagina';

Als u deze afzonderlijke koppelingen wilt omzetten met een HTML-tag, kunt u dat op dezelfde manier doen als wij deden om de hele pagingcode in te pakken..

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

Actieve link en nummerlink

Soms wilt u de actieve link anders vormgeven. U kunt dat doen door wrapper-tags toe te passen, zoals hieronder wordt weergegeven.

$ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = '';

Op dezelfde manier, als u cijferlinks wilt omsluiten met iets:

$ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';

En daarmee is het verhaal van maatwerk beëindigd. U kunt zelfs doorgaan en het aanpassingsvoorbeeld bekijken op http: // uw-code-ontsteker-site / paging / aangepast die al is opgenomen in ons controllerbestand!

Paging-configuratie

U bent nu op de hoogte van de configuratie die vereist is om een ​​fatsoenlijke paginering in te stellen met elke modelvermelding. En meestal wilt u het op de hele site hetzelfde houden. Wat ga je doen om dat te bereiken? U kunt in de verleiding komen om de configuratiecode te kopiëren en in elke actie te plakken waarvoor de configuratie van de paginering vereist is.

In feite is er een betere manier om met dit scenario om te gaan. U kunt een pagingconfiguratiebestand maken op application / config / pagination.php en gebruik de $ config variabele om uw instellingen te definiëren.

'; $ config ['full_tag_close'] = '
'; $ config ['first_link'] = 'Eerste pagina'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Laatste pagina'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Volgende pagina'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Vorige pagina'; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';

Op basis daarvan, de herziene inhoudsopgave actiemethode zou er als volgt uit moeten zien:

public function index () // laad db en model $ this-> load-> database (); $ This-> load-> model ( 'gebruikers'); // init params $ params = array (); $ start_index = ($ dit-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); // laad configuratiebestand $ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination'); $ settings ['total_rows'] = $ this-> Users-> get_total (); $ instellingen ['base_url'] = base_url (). 'Paging / config'; if ($ total_records> 0) // ontvang huidige pagina records $ params ["results"] = $ this-> Users-> get_current_page_records ($ settings ['per_page'], $ start_index); // gebruik de instellingen om de bibliotheek $ this-> pagination-> initialize ($ settings) te initialiseren; // build paging links $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Natuurlijk, de TOTAL_ROWS en base_url variabelen veranderen van actie naar actie, dus u moet ze expliciet in elke actie instellen.

Om dit te bereiken, moet u de pagineringconfiguratie in de eerste plaats laden.

$ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('pagination');

Vervolgens kunt u de actiespecifieke instellingen overschrijven.

$ settings ['total_rows'] = $ this-> Users-> get_total (); $ instellingen ['base_url'] = base_url (). 'Paging / config';

En daarmee ben je klaar!

Dus dat was het verhaal van de configuratie van paginering, en daarmee is ook dit artikel afgelopen!

Conclusie

Vandaag hebben we de database voor paginering doorgenomen in CodeIgniter.

In het eerste deel van dit artikel heb ik laten zien hoe u de pagineringbibliotheek kunt gebruiken door een zeer eenvoudig maar bruikbaar voorbeeld te geven.

Hierna hebben we de aanpassingsopties besproken die beschikbaar zijn tijdens het instellen van de paginering.

Ten slotte hebben we de pagineringconfiguratie in de laatste sectie besproken.

CodeIgniter is een krachtig PHP-platform. Of je nu net begint of begint met de volgende versie, vergeet niet om te controleren wat we voor jou beschikbaar hebben, en.

Ik zou graag uw feedback willen weten in de vorm van vragen en opmerkingen met behulp van de onderstaande feed!