Grocery Crud PHP - Povezana i ovisna kutija / padajuća kombinacija

Sadržaj

U drugom smo vodiču spomenuli kako započeti razvoj Trgovina mješovitom robom do Codeigniter PHP, dalje ćemo vidjeti kako napraviti nekoliko kombinirani okvir ili padajući izbornik međusobno su povezani i međusobno ovise.

Pogledajmo potpuni primjer s bazom podataka pod nazivom Nekretnine, struktura će biti sljedeća:

Struktura stola za stol `nekretnine`

 IZRADI TABLICU AKO NE POSTOJI `nekretnina` (` propertyid` int (11) NOT NULL, `userid` int (11) DEFAULT NULL,` highdate` date DEFAULT '0000-00-00', `property id` int (6 ) DEFAULT '0', `price` decimal (10,2) DEFAULT '0.00',` description` text, `idprovincia` int (10) DEFAULT NULL,` idlocality` int (10) DEFAULT NULL, `address` varchar ( 150) DEFAULT NULL, `photo` varchar (255) DEFAULT NULL,` available` enum ('Yes', 'No') DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 1 ZADNJA KARTA = latin1; IZRADI TABLICU AKO NE POSTOJI `lokaliteti` (` id grada` int (11) NOT NULL, `locality` varchar (200) DEFAULT NULL,` province id` int (11) DEFAULT '0') MOTOR = MyISAM AUTO_INCREMENT = 3604 ZADANO CHARSET = utf8; IZRADI TABLICU AKO NE POSTOJI `users` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') MOTOR = MyISAM AUTO_INCREMENT = 161 ZADNJA KARTA = latin1; IZRADI TABLICU AKO NE POSTOJI `propertytype` (` propertytypeid` int (6) NOT NULL, `propertytype` varchar (150) NOT NULL DEFAULT '') MOTOR = MyISAM AUTO_INCREMENT = 15 ZADNJA KARTA = latin1; IZRADI TABLICU AKO NE POSTOJI `provincije` (` idprovince` int (11) NOT NULL, `province` varchar (255) COLLATE latin1_spanish_ci ZADNJA NULL) MOTOR = MyISAM AUTO_INCREMENT = 32 ZADOVOLJNI KARATICA = latin1 COLLATE = latin1_ 
Možemo nastupiti kroz phpmyadmin dijagram odnosa koji će biti sljedeći:

U prethodnom vodiču smo vidjeli kako instalirati i konfigurirati Grocerycrud, ovdje ćemo stvoriti aplikaciju, stvaramo kontroler Inmo.php

 učitaj-> baza podataka (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } indeks javne funkcije () {$ crud = new grocery_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('nekretnine'); $ output = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 -> 
Zatim stvaramo prikaz koji ćemo nazvati Listainmo.php, CSS i JQuery datoteke će ih preuzeti iz konfiguracije Grocery Crud stoga ih ovdje samo navodimo:
 
Rezultat pri pokretanju weba u pregledniku http: // localhost / pro… os / inmobi / Inmo /

Možemo vidjeti da id prikazuje brojeve umjesto podataka. To je zato što tablice nisu povezane da ih povežu, učinit ćemo sljedeće, u kontroleru ispod set_table naznačit ćemo.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Kao primjer želim prikazati korisničko ime korisničke tablice, sa Korisnički ID iz tablice nekretnina tada ću morati napisati sljedeću šifru:
 $ crud-> set_relation ('userid', 'users', 'name');
Kao rezultat izvršavanja vidjet ćemo da je umjesto toga broj u korisnički ID pokazuje nam ime.

Zatim ćemo navesti polja, pokrajine i lokalitete.

 $ crud-> set_relation ('propertytype ID', 'propertytype', 'propertytype'); $ crud-> set_relation ('provincijski ID', 'provincije', 'pokrajina'); $ crud-> set_relation ('ID lokaliteta', 'lokaliteti', 'lokalitet'); 
Nakon izvršavanja vidjet ćemo ići sa svojim odnosima:

U slučaju slika koje moramo koristiti

 $ crud-> set_field_upload (polje, 'put slike');
Stoga ćemo za spremanje slika koristiti isti direktorij sirovih namirnica
 $ crud-> set_field_upload ('fotografija', 'sredstva / učitavanja / datoteke');
Iako na popisu možemo prikazati povezana polja i kombinacije, one nisu ovisne, ali želimo da se pri odabiru pokrajine u pokrajinskoj kombinaciji kombinacija lokaliteta automatski aktivira i ispuni mjestima te pokrajine, također želimo taj se odnos održava kada dodamo svojstvo ili kada ga uređujemo.

Kako bismo kombinacije učinili ovisnima, upotrijebit ćemo funkciju povratnog poziva. A uzvratiti poziv o Povratni poziv je alternativa polimorfizmu, ovo je tema koju smo obradili u drugom vodiču kako bismo znali implementirati klase:

Klase i polimorfizam s PHP -om

Tamo gdje je funkciji kao parametru dodijeljena druga funkcija, funkcija niže razine. A uzvratiti poziv može djelovati kada se zapis doda ili kada se izmijeni. Ova metoda omogućuje izvrsnu ponovnu uporabu koda.

Izjava povratnog poziva može biti sljedeća u kontroleru.

 $ crud-> callback_add_field ('naziv povratnog poziva', niz (parametri));
U ovom slučaju povratni poziv bit će idlocalidad, a funkcija će biti cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', niz ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', niz ($ this, 'cbklocalities')); 
Zatim stvaramo funkciju cbklokacije koji će biti naš povratni poziv aktiviran kada dodamo ili uredimo zapis.
 // Povratni poziv koji generira kombiniranu funkciju idlocalidades cbklocalidades () {// kreiramo kombinaciju $ combo = ''; $ fincombo = ''; // Uzimamo ID svojstva ako ga je kao parametar poslao url $ idinmuebleurl = $ this-> uri-> segment (4); // Ovjeravamo operaciju koju radimo dodamo li ili uređujemo $ crud = new grocery_CRUD (); $ stanje = $ crud-> getState (); // Ako uređujemo, a ID svojstva nije prazan if (isset ($ idinmuebleurl) && $ state == "edit") {// konzultiramo pokrajinu i trenutnu lokaciju svojstva $ this-> db-> select ('idprovincia, idlocalidad') -> from ('properties') -> where ('idinmueble', $ idinmuebleurl); $ db = $ this-> db-> get (); $ row = $ db-> row (0); $ province id = $ row-> pokrajinski id; $ idlocality = $ row-> idlocality; // Kombinu učitavamo sa svim lokalitetima pokrajine $ this-> db-> select ('*') -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get (); // Ako pronađemo id trenutačne lokacije, stavit ćemo ga kao odabranog // u protivnom nastavljamo učitavati ostale lokacije za svaki ($ db-> result () kao $ row): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Vraćamo učitanu kombinaciju return $ combo. $ Fincombo; } else {return $ combo. $ fincombo; }} 
Zatim moramo stvoriti funkciju pretraživanja lokacija, što označavamo kao funkciju upita u okviru Povratnog poziva:
 // Upit lokaliteta funkcija searchlocalities () {// Uzimam ID pokrajine koji je poslan kao parametar url-om pri odabiru // pokrajine iz kombinirane pokrajine id $ province id = $ this-> uri-> segment (3); // Konzultiram lokalitete prema odabranoj pokrajini $ this-> db-> select ("*") -> from ('localities') -> where ('id pokrajine', $ provincija id); $ db = $ this-> db-> get (); // Dodjeljujem sql odgovor nizu $ array = array (); foreach ($ db-> result () kao $ row): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> lokalitet); endforeach; echo json_encode ($ niz); Izlaz; } 
Zatim ćemo morati stvoriti prikaz koji obrađuje kombinacije i dinamički dodavati izraze jquery.Za to ćemo u mapi pogleda stvoriti datoteku pod nazivom zavisni_kombos.php.
 
Za kraj idemo na prikaz i dodajemo sljedeći kôd koji povezuje pogled s datotekom zavisni_kombos.php
 učitavanje-> prikaz ('ovisni_kombos', $ combo_setup); }?> var13 -> 

Zatim, ako izvršimo, možemo vidjeti i kada dodamo novo svojstvo ili kada uređujemo kako su kombinacije pokrajina i lokaliteti povezane i lokaliteti, to ovisi o pokrajini.

Ako želimo napraviti nekoliko ovisnih kombinacija, morat ćemo napraviti a uzvratiti poziv za svaki par kombinacija.

Pretpostavimo da imamo zemlje, pokrajine i lokalitete i želimo učiniti ovisne zemlje s pokrajinom i pokrajine s gradovima, tada moramo stvoriti povratni poziv za svaku ovisnost, na primjer:

 $ crud-> callback_add_field (id pokrajine, niz ($ this, 'cbk provincija')); $ crud-> callback_edit_field ('provincijski id', niz ($ this, 'cbk provincija')); $ crud-> callback_add_field ('idlocalidad', niz ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', niz ($ this, 'cbklocalities')); 
Za kombinirane zemlje, a uzvratiti poziv budući da je prvi u hijerarhiji, ne ovisi o drugoj kombinaciji.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave