Kruidenier Crud PHP - Gerelateerde en afhankelijke box / dropdown-combinatie

Inhoudsopgave

We hadden in een andere tutorial vermeld hoe je de ontwikkeling kunt starten met Kruidenierswaren tot Codeigniter PHP, hierna zullen we zien hoe we er meerdere kunnen maken keuzelijst of vervolgkeuzelijst ze zijn aan elkaar verwant en van elkaar afhankelijk.

Laten we een compleet voorbeeld bekijken met een database met de naam Real Estate, de structuur zal als volgt zijn:

Tabelstructuur voor de tafel `onroerend goed`

 MAAK TABEL INDIEN NIET BESTAAT `real estate` (` propertyid` int (11) NOT NULL, `userid` int (11) DEFAULT NULL,` highdate` date DEFAULT ‘0000-00-00’, `property id` int (6 ) STANDAARD '0', 'prijs' decimaal (10,2) STANDAARD '0.00',' description' tekst, 'idprovincia' int (10) STANDAARD NULL,' idlocality' int (10) STANDAARD NULL, 'adres' varchar ( 150) DEFAULT NULL, `photo` varchar (255) DEFAULT NULL,` available` enum ('Ja', 'Nee') DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1; MAAK TABEL INDIEN NIET BESTAAT `localities` (` city id` int (11) NOT NULL, `locality` varchar (200) DEFAULT NULL,` provincie id` int (11) DEFAULT '0') ENGINE = MyISAM AUTO_INCREMENT = 3604 DEFAULT TEKENSET = utf8; MAAK TABEL INDIEN NIET BESTAAT `users` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 161 STANDAARD CHARSET = latin1; MAAK TABEL INDIEN NIET BESTAAT `propertytype` (` propertytypeid` int (6) NOT NULL, `propertytype` varchar (150) NOT NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 15 STANDAARD CHARSET = latin1; MAAK TABEL INDIEN NIET BESTAAT `provincies` (` idprovince` int (11) NOT NULL, `provincie` varchar (255) COLLATE latin1_spanish_ci STANDAARD NULL) ENGINE = MyISAM AUTO_INCREMENT = 32 STANDAARD CHARSET = latin1 COLLATE = latin1_spanish_ci; 
We kunnen optreden via phpmyadmin een relatiediagram dat er als volgt uitziet:

In de vorige tutorial zagen we hoe Grocerycrud te installeren en configureren, hier zullen we de applicatie maken, we maken de controller Inmo.php

 laden-> database (); $ dit-> laden-> helper ('url'); $ dit-> laden-> model ('grocery_crud_model'); $ dit-> laad-> bibliotheek ('Grocery_CRUD'); } openbare functie-index () {$ crud = nieuwe kruidenierswinkel_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('vastgoed'); $ output = $ crud-> render (); $ dit-> laden-> bekijken ('immolist', $ output); }}?> var13 -> 
Vervolgens maken we de weergave die we zullen noemen Listainmo.php, de CSS- en JQuery-bestanden halen ze uit de configuratie van Kruidenier Crud daarom vermelden we ze hier alleen:
 
Het resultaat bij het uitvoeren van het web in een browser http: // localhost / pro… os / inmobi / Inmo /

We kunnen zien dat de id nummers toont in plaats van gegevens. Dit komt omdat de tabellen niet gerelateerd zijn aan deze. We zullen het volgende doen, in de controller hieronder set_table zullen we aangeven.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Als voorbeeld wil ik de gebruikersnaam van de gebruikerstabel tonen, met de gebruikersnaam uit de onroerendgoedtabel, dan moet ik de volgende code schrijven:
 $ crud-> set_relation ('userid', 'users', 'name');
Als resultaat van het uitvoeren zullen we zien dat in plaats daarvan een getal in gebruikersnaam laat ons de naam zien.

Vervolgens gaan we de velden, provincie en plaatsen opsommen.

 $ crud-> set_relation ('propertytype id', 'propertytype', 'propertytype'); $ crud-> set_relation ('provincie-ID', 'provincies', 'provincie'); $ crud-> set_relation ('plaats-ID', 'plaats', 'plaats'); 
Na het uitvoeren zien we de Gaan met hun respectievelijke relatie:

In het geval van afbeeldingen die we moeten gebruiken

 $ crud-> set_field_upload (veld, 'imagepath');
Dus we zullen dezelfde Grocery crud-map gebruiken om afbeeldingen op te slaan
 $ crud-> set_field_upload ('foto', 'activa / uploads / bestanden');
Hoewel we de gerelateerde velden en combo's in de lijst kunnen tonen, zijn ze niet afhankelijk, we willen dat bij het selecteren van een provincie in de provinciecombo, de plaatsencombo automatisch wordt geactiveerd en deze wordt gevuld met de plaatsen van die provincie, we willen ook die relatie blijft behouden wanneer we een eigenschap toevoegen of bewerken.

Om de combo's afhankelijk te maken, gebruiken we een callback-functie. EEN Bel terug o callback is een alternatief voor polymorfisme, dit was een onderwerp dat we in een andere tutorial behandelden om te weten hoe de klassen te implementeren:

Klassen en polymorfisme met PHP

Waar een functie als parameter is toegewezen, een andere functie, een functie op een lager niveau. EEN Bel terug het kan optreden wanneer een record wordt toegevoegd of wanneer het wordt gewijzigd. Deze methode zorgt voor geweldig hergebruik van code.

De verklaring van een callback kan de volgende zijn in de controller.

 $ crud-> callback_add_field ('callbackname', array (parameters));
In dit geval is de callback idlocalidad en de functie cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', array ($ dit, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ dit, 'cbklocalities')); 
Vervolgens maken we de functie cbklocaties wat onze callback zal zijn die wordt aangeroepen wanneer we een record toevoegen of bewerken.
 // Terugbellen die de combo idlocalidades-functie genereert cbklocalidades () {// we maken de combo $ combo = ''; $ fincombo = ''; // We nemen de eigenschap-id als deze als parameter is verzonden door url $ idinmuebleurl = $ this-> uri-> segment (4); // We verifiëren de bewerking die we uitvoeren als we $ crud = new kruidenier_CRUD (); $ staat = $ crud-> getState (); // Als we aan het bewerken zijn en de eigenschap-ID is niet leeg if (isset ($ idinmuebleurl) && $ state == "edit") {// we raadplegen de provincie en de huidige locatie van de eigenschap $ this-> db-> selecteer ( 'idprovincia, idlocalidad') -> from ('properties') -> waar ('idinmueble', $ idinmuebleurl); $ db = $ dit-> db-> get (); $ rij = $ db-> rij (0); $ provincie-ID = $ rij-> provincie-ID; $ idlocaliteit = $ rij-> idlocaliteit; // We laden de combo met alle plaatsen van de provincie $ this-> db-> select ('*') -> from ('localities') -> where ('provincie id', $ provincie id); $ db = $ dit-> db-> get (); // Als we de id van de huidige locatie vinden, plaatsen we deze als geselecteerd // anders gaan we verder met het laden van de andere locaties voor elk ($ db-> resultaat () als $ rij): if ($ rij-> idlocalidad == $ idlocalidad ) {$ combo . = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } eindvooruit; // We retourneren de geladen combo return $ combo $ Fincombo; } else {return $ combo. $ fincombo; }} 
Vervolgens moeten we de functie zoeken naar locaties maken, wat we aanduiden als een zoekfunctie binnen de Callback:
 // Query localities function searchlocalities () {// Ik neem de provincie-ID die als parameter door url is verzonden bij het selecteren van // een provincie uit de combo provincie-ID $ provincie-ID = $ dit-> uri-> segment (3); // Ik raadpleeg de plaatsen volgens de geselecteerde provincie $ this-> db-> select ("*") -> from ('localities') -> where ('provincie id', $ provincie id); $ db = $ dit-> db-> get (); // Ik wijs het sql-antwoord toe aan een array $ array = array (); foreach ($ db-> resultaat () als $ rij): $ array [] = array ("value" => $ rij-> idlocality, "property" => $ row-> locality); eindvooruit; echo json_encode ($ array); Uitgang; } 
Vervolgens moeten we de weergave maken die de combo's verwerkt en de jQuery-instructies dynamisch toevoegen.Hiervoor zullen we in de weergavemap een bestand maken met de naam afhankelijke_combo's.php.
 
Om te eindigen gaan we naar de weergave en voegen we de volgende code toe die de weergave met het bestand relateert: afhankelijke_combo's.php
 laden-> bekijken ('dependent_combos', $ combo_setup); }?> var13 -> 

Als we vervolgens uitvoeren, kunnen we beide zien wanneer we een nieuwe eigenschap toevoegen of wanneer we bewerken hoe de combinaties van provincie en plaatsen zijn gerelateerd en plaatsen, dit hangt af van de provincie.

Als we meerdere afhankelijke combo's willen maken, moeten we een maken Bel terug voor elk paar combo's.

Stel dat we landen, provincies en plaatsen hebben en we willen afhankelijke landen maken met provincies en provincies met steden, dan moeten we een callback maken voor elke afhankelijkheden, bijvoorbeeld:

 $ crud-> callback_add_field (provincie-ID, array ($ dit, 'cbk-provincie')); $ crud-> callback_edit_field ('provincie-id', array ($ dit, 'cbk-provincie')); $ crud-> callback_add_field ('idlocalidad', array ($ dit, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ dit, 'cbklocalities')); 
Voor de landencombinatie, a Bel terug aangezien het de eerste in de hiërarchie is, is het niet afhankelijk van een andere combo.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave