Grocery Crud PHP - saistīta un atkarīga kastīte / nolaižamā kombinācija

Satura rādītājs

Mēs bijām minējuši citā apmācībā, kā sākt attīstību Grocerycrud uz PHP kodu kodētājs, tālāk mēs redzēsim, kā izveidot vairākus kombinētais lodziņš vai nolaižamā izvēlne tie ir saistīti viens ar otru un ir atkarīgi viens no otra.

Apskatīsim pilnu piemēru ar datu bāzi ar nosaukumu Nekustamais īpašums, struktūra būs šāda:

Galda struktūra tabulai "nekustamais īpašums"

 IZVEIDOT TABULU, JA NEPASTĀV "nekustamais īpašums" ("propertyid" int (11) NOT NULL, "userid" int (11) DEFAULT NULL, "Highdate" datums 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 ('Jā', 'Nē') DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1; IZVEIDOT TABULU, JA NEPASTĀV "vietnes" ("pilsētas id" int (11) NOT NULL, "lokalitāte" varchar (200) DEFAULT NULL, "provinces id" int (11) DEFAULT '0 ") DZINĒJS = MyISAM AUTO_INCREMENT = 3604 DEFAULT CHARSET = utf8; IZVEIDOT TABULU, JA NEPASTĀV "lietotāji" ("userid" int (11) NOT NULL, "name" varchar (150) NOT NULL DEFAULT ") ENGINE = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; IZVEIDOT TABULU, JA NEPASTĀV "īpašību tips" ("propertyytypeid" int (6) NOT NULL, "propertiesytype" varchar (150) NOT NULL DEFAULT ") DZINĒJS = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; IZVEIDOT TABULU, JA NEPASTĀV "provinces" ("idprovince" int (11) NOT NULL, "province" varchar (255) COLLATE latin1_spanish_ci DEFAULT NULL) DZINĒJS = MyISAM AUTO_INCREMENT = 32 DEFAULT CHARSET = latin1 COLLATE_ latci1 
Mēs varam izpildīt phpmyadmin attiecību diagramma, kas būs šāda:

Iepriekšējā apmācībā mēs redzējām kā instalēt un konfigurēt Grocerycrud, šeit mēs izveidosim lietojumprogrammu, mēs izveidosim kontrolieri Inmo.php

 ielādēt-> datu bāze (); $ šis-> ielādēt-> palīgs ('url'); $ šis-> ielādēt-> modelis ('grocery_crud_model'); $ this-> ielādēt-> bibliotēka ('Grocery_CRUD'); } publisko funkciju indekss () {$ crud = new grocery_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('nekustamais īpašums'); $ output = $ crud-> render (); $ šis-> ielādēt-> skats ('imolists', $ izlaide); }}?> var13 -> 
Tālāk mēs izveidojam skatu, ko mēs sauksim Listainmo.php, CSS un JQuery faili ņems tos no konfigurācijas Pārtikas preces tāpēc mēs tos uzskaitām tikai šeit:
 
Rezultāts, izpildot tīmekli pārlūkprogrammā http: // localhost / pro… os / inmobi / Inmo /

Mēs redzam, ka ID rāda skaitļus, nevis datus, jo tabulas nav saistītas ar to saistīšanu, mēs rīkosimies šādi, tālāk norādītajā kontrolierī norādīsim set_table.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Kā piemēru es vēlos parādīt lietotāja tabulas lietotājvārdu ar Lietotāja ID no nekustamā īpašuma tabulas man būs jāraksta šāds kods:
 $ crud-> set_relation ('userid', 'users', 'name');
Izpildes rezultātā mēs redzēsim, ka tā vietā ir skaitlis Lietotāja ID parāda mums nosaukumu.

Tālāk mēs uzskaitīsim laukus, provinci un vietas.

 $ crud-> set_relation ('īpašumtiesību tips', 'īpašumu tips', 'īpašumu tips'); $ crud-> set_relation ('provinces id', 'provinces', 'province'); $ crud-> set_relation ('lokalitātes id', 'lokalitātes', 'lokalitāte'); 
Pēc izpildes mēs redzēsim iet ar attiecīgām attiecībām:

Attēlu gadījumā mums ir jāizmanto

 $ crud-> set_field_upload (lauks, 'attēla ceļš');
Tāpēc attēlu saglabāšanai mēs izmantosim to pašu Grocery crud direktoriju
 $ crud-> set_field_upload ('foto', 'aktīvi / augšupielādes / faili');
Lai gan mēs varam parādīt saistītos laukus un kombinācijas sarakstā, tie nav atkarīgi, mēs vēlamies, lai, izvēloties provinci provincē, vietņu kombinācija tiktu aktivizēta automātiski un tā tiktu aizpildīta ar šīs provinces atrašanās vietām. šīs attiecības tiek saglabātas, pievienojot īpašumu vai rediģējot to.

Lai padarītu kombinācijas atkarīgas, mēs izmantosim atzvanīšanas funkciju. A atzvani o atzvanīšana ir alternatīva polimorfismam, šī bija tēma, kuru mēs apskatījām citā apmācībā, lai uzzinātu, kā īstenot nodarbības:

Klases un polimorfisms ar PHP

Ja funkcija kā parametrs ir piešķirta cita funkcija, zemāka līmeņa funkcija. A atzvani tas var darboties, kad ieraksts tiek pievienots vai kad tas tiek mainīts. Šī metode nodrošina lielisku koda atkārtotu izmantošanu.

Atzvanīšanas paziņojums kontrolierī var būt šāds.

 $ crud-> callback_add_field ('atzvanīšanas nosaukums', masīvs (parametri));
Šajā gadījumā atzvanīšana būs idlocalidad, un funkcija būs cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', masīvs ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', masīvs ($ this, 'cbklocalities')); 
Tālāk mēs izveidojam funkciju cbklocations tiks izmantota mūsu atzvanīšana, kad pievienosim vai rediģēsim ierakstu.
 // Atzvanīšana, kas ģenerē kombinēto idlocalidades funkciju cbklocalidades () {// mēs izveidojam kombinēto $ combo = ''; $ fincombo = ""; // Mēs ņemam īpašuma ID, ja to kā parametru nosūtīja url $ idinmuebleurl = $ this-> uri-> segment (4); // Mēs pārbaudām mūsu veikto darbību, ja pievienojam vai rediģējam $ crud = new grocery_CRUD (); $ valsts = $ crud-> getState (); // Ja mēs rediģējam un rekvizīta ID nav tukšs, ja (isset ($ idinmuebleurl) && $ state == "edit") {// mēs konsultējamies ar provinci un īpašuma pašreizējo atrašanās vietu $ this-> db-> izvēlieties ('idprovincia, idlocalidad') -> no ('properties') -> kur ('idinmueble', $ idinmuebleurl); $ db = $ šis-> db-> get (); $ rinda = $ db-> rinda (0); $ provinces id = $ rinda-> provinces id; $ idlocality = $ rinda-> idlocality; // Mēs ielādējam kombināciju ar visām provinces vietnēm $ this-> db-> select ('*') -> from ('localities') -> where ('province id', $ province id); $ db = $ šis-> db-> get (); // Ja atrodam pašreizējās atrašanās vietas ID, mēs to ievietojam kā atlasītu // pretējā gadījumā mēs turpinām citu atrašanās vietu ielādi ($ db-> result () kā $ rinda): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Mēs atgriežam ielādēto kombinēto atgriešanos $ combo. $ Fincombo; } else {return $ combo. $ fincombo; }} 
Tālāk mums ir jāizveido atrašanās vietu meklēšanas funkcija, ko mēs atzvanīšanas laikā norādām kā vaicājuma funkciju:
 // Vaicājumu lokalizācijas funkcija searchlocalities () {// Es izmantoju provinces ID, ko kā parametru nosūtīja URL, atlasot // provinci no kombinētās provinces id $ province id = $ this-> uri-> segment (3); // Es konsultējos ar vietējām vietām atbilstoši izvēlētajai provincei $ this-> db-> select ("*") -> from ('localities') -> where ('province id', $ province id); $ db = $ šis-> db-> get (); // Es piešķiru SQL atbildi masīvam $ array = array (); foreach ($ db-> rezultāts () kā $ rinda): $ array [] = masīvs ("value" => $ row-> idlocality, "property" => $ row-> locality); endforeach; echo json_encode ($ masīvs); Izeja; } 
Tālāk mums būs jāizveido skats, kas apstrādā kombinācijas, un dinamiski jāpievieno jquery paziņojumi. Šim nolūkam mēs izveidosim skata mapē failu ar nosaukumu depend_combos.php.
 
Lai pabeigtu, mēs ejam uz skatu un pievienojam šādu kodu, kas skatu saista ar failu depend_combos.php
 ielādēt-> skats ('atkarīgās_kompozīcijas', $ combo_setup); }?> var13 -> 

Tad, ja mēs izpildām, mēs varam redzēt gan tad, kad pievienojam jaunu īpašumu, gan rediģējot provinces un apkaimes kombināciju saistību un atrašanās vietas, tas ir atkarīgs no provinces.

Ja mēs vēlamies izveidot vairākas atkarīgas kombinācijas, mums būs jāizveido a atzvani par katru kombināciju pāri.

Pieņemsim, ka mums ir valstis, provinces un apkaimes un mēs vēlamies padarīt atkarīgas valstis ar provinci un provincēm ar pilsētām, tad mums ir jāizveido atzvanīšana katrai atkarībai, piemēram:

 $ crud-> callback_add_field (provinces id, masīvs ($ this, 'cbk province')); $ crud-> callback_edit_field ('provinces id', masīvs ($ this, 'cbk province')); $ crud-> callback_add_field ('idlocalidad', masīvs ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', masīvs ($ this, 'cbklocalities')); 
Valstu kombinācijai: a atzvani tā kā tas ir pirmais hierarhijā, tas nav atkarīgs no cita kombinācijas.

Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave