„Grocery Crud PHP“ - susijusi ir priklausoma dėžutė / išskleidžiamasis derinys

Turinys

Kitoje pamokoje minėjome, kaip pradėti kurti Grocerycrud į PHP kodas, toliau pamatysime, kaip padaryti keletą kombinuotas laukas arba išskleidžiamasis meniu jie yra susiję vienas su kitu ir priklauso vienas nuo kito.

Pažiūrėkime visą pavyzdį su duomenų baze, pavadinta Nekilnojamasis turtas, struktūra bus tokia:

Lentelės struktūra „nekilnojamasis turtas“

 KURTI LENTELĘ, JEI NĖRA „nekilnojamasis turtas“ („propertyid“ int (11) NOT NULL, „userid“ int (11) Numatytasis NULL, „highdate“ data DEFAULT '0000-00-00', `property id` int (6 ) Numatytasis „0“, „kaina“ dešimtainis (10,2) Numatytasis „0,00“, „aprašymo“ tekstas, „idprovincia“ int (10) Numatytasis NULL, „idlocality“ int (10) Numatytasis NULL, „adresas“ varchar ( 150) DEFAULT NULL, `photo` varchar (255) DEFAULT NULL,` available` enum ('Taip', 'Ne') Numatytasis NULL) VARIKLIS = MyISAM AUTO_INCREMENT = 1 Numatytoji CHARSET = latin1; KURTI LENTELĘ, Jei NĖRA „vietos“ („miesto ID“ int (11) NOT NULL, „locality“ varchar (200) DEFAULT NULL, „provincijos ID“ int (11) Numatytoji vertė „0“) VARIKLIS = MyISAM AUTO_INCREMENT = 3604 Numatytasis CHARSET = utf8; KURTI LENTELĘ, JEI NĖRA „vartotojų“ („userid“ int (11) NOT NULL, „name“ varchar (150) NOT NULL DEFAULT “) VARIKLIS = MyISAM AUTO_INCREMENT = 161 Numatytoji CHARSET = latin1; KURTI LENTELĘ, JEI NĖRA „propertyytype“ („propertyytypeid“ int (6) NOT NULL, „propertiesytype` varchar (150) NOT NULL DEFAULT“) VARIKLIS = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; KURTI LENTELĘ, Jei NĖRA „provincijos“ („idprovince“ int (11) NOT NULL, „province“ varchar (255) COLLATE latin1_spanish_ci DEFAULT NULL) VARIKLIS = MyISAM AUTO_INCREMENT = 32 Numatytasis CHARSET = latin1 COLLATE_ latci1 
Mes galime atlikti per phpmyadmin santykių schema, kuri bus tokia:

Ankstesnėje pamokoje matėme kaip įdiegti ir konfigūruoti „Grocerycrud“, čia mes sukursime programą, mes sukursime valdiklį Inmo.php

 apkrova-> duomenų bazė (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } viešųjų funkcijų indeksas () {$ crud = new bakcery_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('nekilnojamasis turtas'); $ output = $ crud-> render (); $ this-> load-> view ('imolistas', $ išvestis); }}?> var13 -> 
Toliau sukuriame vaizdą, kurį vadinsime Listainmo.php, CSS ir JQuery failai paims juos iš Bakalėjos Crud todėl mes juos išvardijame tik čia:
 
Rezultatas vykdant žiniatinklį naršyklėje http: // localhost / pro… os / inmobi / Inmo /

Matome, kad ID rodo numerius, o ne duomenis, nes lentelės nesusijusios su jomis, mes atliksime šiuos veiksmus, nurodysime žemiau esančiame valdiklyje set_table.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Kaip pavyzdį noriu parodyti vartotojo lentelės vartotojo vardą su Vartotojo ID iš nekilnojamojo turto lentelės, turėsiu parašyti šį kodą:
 $ crud-> set_relation ('vartotojo ID', 'vartotojai', 'vardas');
Vykdydami rezultatą pamatysime skaičių Vartotojo ID parodo mums vardą.

Toliau išvardinsime laukus, provinciją ir vietoves.

 $ crud-> set_relation ('nuosavybės tipo ID', 'nuosavybės tipas', 'nuosavybės tipas'); $ crud-> set_relation ('provincijos ID', 'provincijos', 'provincija'); $ crud-> set_relation ('vietovės ID', 'vietovės', 'vietovė'); 
Po įvykdymo pamatysime eiti su atitinkamais santykiais:

Vaizdų atveju turime naudoti

 $ crud-> set_field_upload (laukas, 'vaizdo kelias');
Taigi vaizdams išsaugoti naudosime tą patį „Grocery crud“ katalogą
 $ crud-> set_field_upload ('nuotrauka', 'ištekliai / įkėlimai / failai');
Nors sąraše galime rodyti susijusius laukus ir kombinacijas, jie nėra priklausomi, norime, kad pasirinkus provinciją provincijos derinyje, vietovių derinys būtų aktyvuotas automatiškai ir užpildytas tos provincijos vietovėmis, mes taip pat norime tas ryšys išlaikomas, kai pridedame nuosavybę arba kai ją redaguojame.

Norėdami, kad kombinacijos būtų priklausomos, naudosime atgalinio ryšio funkciją. A perskambink o atgalinis skambutis yra alternatyva polimorfizmui, tai buvo tema, kurią aptarėme kitoje pamokoje, kad žinotume, kaip įgyvendinti klases:

Klasės ir polimorfizmas su PHP

Kai funkcija kaip parametras priskiriama kitai funkcijai, žemesnio lygio funkcija. A perskambink jis gali veikti, kai įrašas pridedamas arba kai jis modifikuojamas. Šis metodas leidžia puikiai pakartotinai naudoti kodą.

Atšaukimo pareiškimas valdiklyje gali būti toks.

 $ crud-> callback_add_field ('atšaukimo pavadinimas', masyvas (parametrai));
Tokiu atveju atgalinis skambutis bus idlocalidad, o funkcija - cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Toliau sukuriame funkciją cbklocations tai bus mūsų atgalinis skambutis, kai pridedame arba redaguojame įrašą.
 // Atšaukimas, generuojantis kombinuotą idlocalidades funkciją cbklocalidades () {// sukuriame kombinaciją $ combo = ''; $ fincombo = ""; // Imame nuosavybės ID, jei jį kaip parametrą atsiuntė url $ idinmuebleurl = $ this-> uri-> segment (4); // Mes patvirtiname atliekamą operaciją, jei pridėsime arba redaguosime $ crud = new grocery_CRUD (); $ state = $ crud-> getState (); // Jei redaguojame ir nuosavybės ID nėra tuščias, jei (isset ($ idinmuebleurl) && $ state == "edit") {// konsultuojamės su provincija ir dabartine nuosavybės $ this-> db-> pasirinkite ('idprovincia, idlocalidad') -> iš ('properties') -> kur ('idinmueble', $ idinmuebleurl); $ db = $ tai-> db-> get (); $ eilutė = $ db-> eilutė (0); $ provincijos id = $ eilutė-> provincijos ID; $ idlocality = $ row-> idlocality; // Įkeliame kombinaciją su visomis provincijos vietovėmis $ this-> db-> select ('*') -> from ('localities') -> where ('provincijos id', $ provincijos id); $ db = $ tai-> db-> get (); // Jei randame dabartinės vietos ID, įdedame ją kaip pasirinktą // kitu atveju ir toliau įkeliame kitų vietų foreach ($ db-> result () kaip $ row): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' “; } endforeach; // Mes grąžiname įkeltą kombinuotą grąžą $ combo. $ Fincombo; } else {return $ combo. $ fincombo; }} 
Toliau turime sukurti vietovių paieškos funkciją, kurią nurodome kaip užklausos funkciją atgaliniame skambutyje:
 // Užklausa apie vietoves funkcija searchlocalities () {// Kaip provincijos ID, kurį atsiuntė URL, aš pasirenku provincijos ID, pasirinkdamas // provinciją iš sudėtinės provincijos id $ provincijos id = $ šio-> uri-> segmento (3); // Aš konsultuojuosi su vietovėmis pagal pasirinktą provinciją $ this-> db-> select ("*") -> from ('localities') -> where ('provincijos id', $ provincijos id); $ db = $ tai-> db-> get (); // Aš priskiriu sql atsakymą masyvui $ array = array (); foreach ($ db-> rezultatas () kaip $ eilutė): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> locality); endforeach; echo json_encode ($ masyvas); išėjimas; } 
Toliau turėsime sukurti vaizdą, apdorojantį kombinacijas, ir dinamiškai pridėti jquery teiginius. Tam peržiūros aplanke sukursime failą pavadinimu depend_combos.php.
 
Norėdami baigti, einame į rodinį ir pridedame šį kodą, kuris susieja vaizdą su failu depend_combos.php
 apkrova-> vaizdas ('priklausomas_kombo', $ combo_setup); }?> var13 -> 

Tada, jei vykdysime, matysime tiek pridėdami naują nuosavybę, tiek redaguodami provincijos ir vietovių derinius ir vietoves, tai priklauso nuo provincijos.

Jei norime sukurti kelis priklausomus derinius, turėsime sukurti perskambink kiekvienai kombinacijų porai.

Tarkime, kad turime šalių, provincijų ir vietovių ir norime padaryti priklausomas šalis su provincija ir provincijomis su miestais, tada kiekvienai priklausomybei turime sukurti atšaukimą, pavyzdžiui:

 $ crud-> callback_add_field (provincijos ID, masyvas ($ this, 'cbk provincija')); $ crud-> callback_edit_field ('provincijos ID', masyvas ($ this, 'cbk provincija')); $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Šalių deriniui: a perskambink kadangi yra pirmasis hierarchijoje, tai nepriklauso nuo kito derinio.

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave