Grocery Crud PHP - powiązane i zależne pudełko / zestaw rozwijany

Spisie treści

W innym samouczku wspomnieliśmy o tym, jak rozpocząć programowanie Artykuły spożywcze do Kodeigner PHP, potem zobaczymy jak zrobić kilka pole kombi lub menu rozwijane są ze sobą powiązane i zależą od siebie.

Zobaczmy kompletny przykład z Bazą Danych o nazwie Nieruchomości, struktura będzie następująca:

Struktura stołu dla stołu „nieruchomości”

 UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE `nieruchomości` (` propertyid` int (11) NIE NULL, `userid` int (11) DEFAULT NULL,` highdate` date DEFAULT '0000-00-00', `identyfikator właściwości` int (6 ) DEFAULT '0', `cena` dziesiętna (10,2) DEFAULT '0.00',` opis` tekst, `idprovincia` int (10) DEFAULT NULL,` idlocality` int (10) DEFAULT NULL, `address` varchar ( 150) DEFAULT NULL, `photo` varchar (255) DEFAULT NULL, ` available` enum ('Tak', 'No') DEFAULT NULL) SILNIK = MyISAM AUTO_INCREMENT = 1 DOMYŚLNY CHARSET = latin1; UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE `lokalizacje` (` ID miasta` int (11) NOT NULL, `locality` varchar (200) DEFAULT NULL,` identyfikator prowincji` int (11) DEFAULT '0') ENGINE = MyISAM AUTO_INCREMENT = 3604 DEFAULT ZESTAW ZNAKÓW = utf8; CREATE TABLE JEŚLI NIE ISTNIEJE `userid` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE `propertytype` (`propertytypeid` int (6) NIE NULL, `propertytype` varchar (150) NIE NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 15 DOMYŚLNY CHARSET = latin1; UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE `prowincje` (`idprovince` int (11) NOT NULL, `prowincja` varchar (255) UKŁADANIE latin1_spanish_ci DOMYŚLNIE NULL) SILNIK = MyISAM AUTO_INCREMENT = 32 DOMYŚLNY ZESTAW ZNAKÓW = latin1 UKŁADANIE = latin1_spanish_ci; 
Możemy wykonać przez phpmyadmin diagram relacji, który będzie wyglądał następująco:

W poprzednim samouczku widzieliśmy jak zainstalować i skonfigurować Grocerycrud, tutaj stworzymy aplikację, stworzymy kontroler Inmo.php

 wczytaj-> baza danych (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } indeks funkcji publicznej () {$ crud = nowy sklep spożywczy_CRUD (); $ crud-> set_theme ('flexgrid'); $ crud-> set_table ('nieruchomości'); $ wyjście = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> zm13 -> 
Następnie tworzymy widok, który nazwiemy Listainmo.php, pliki CSS i JQuery wezmą je z konfiguracji Surowiec spożywczy dlatego wymieniamy je tylko tutaj:
 
Wynik podczas uruchamiania sieci w przeglądarce http://localhost/pro…os/inmobi/Inmo/

Widzimy, że id pokazuje liczby zamiast danych, ponieważ tabele nie są powiązane z nimi, zrobimy co następuje, w kontrolerze poniżej set_table wskażemy.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Jako przykład chcę pokazać nazwę użytkownika tabeli użytkowników, z Identyfikator użytkownika z tabeli nieruchomości będę musiał napisać następujący kod:
 $ crud-> set_relation ('userid', 'users', 'name');
W wyniku wykonania zobaczymy, że zamiast tego liczba w identyfikator użytkownika pokazuje nam nazwę.

Następnie wymienimy pola, województwo i miejscowości.

 $ crud-> set_relation ('propertytype id', 'propertytype', 'propertytype'); $ crud-> set_relation ('identyfikator prowincji', 'prowincje', 'prowincja'); $ crud-> set_relation ('identyfikator miejscowości', 'miejscowości', 'miejscowość'); 
Po wykonaniu zobaczymy iść z ich odpowiednim stosunkiem:

W przypadku obrazów musimy użyć

 $ crud-> set_field_upload (pole, 'ścieżka obrazu');
Więc użyjemy tego samego katalogu Grocery Crud do zapisywania obrazów
 $ crud-> set_field_upload ('zdjęcie', 'zasoby/przesyłane/pliki');
Chociaż możemy wyświetlić powiązane pola i kombinacje na liście, nie są one zależne, chcemy, aby podczas wybierania prowincji w kombi prowincji, kombi miejscowości aktywowało się automatycznie i było wypełnione miejscowościami tego województwa, również chcemy ta relacja jest utrzymywana, gdy dodajemy właściwość lub gdy ją edytujemy.

Aby kombinacje były zależne, użyjemy funkcji zwrotnej. A oddzwonić o callback jest alternatywą dla polimorfizmu, był to temat, który omówiliśmy w innym samouczku, aby dowiedzieć się, jak zaimplementować klasy:

Klasy i polimorfizm z PHP

Gdy funkcja jest przypisana jako parametr, inna funkcja, funkcja niższego poziomu. A oddzwonić może działać, gdy rekord zostanie dodany lub zmodyfikowany. Ta metoda pozwala na doskonałe ponowne wykorzystanie kodu.

W kontrolerze może być następująca instrukcja wywołania zwrotnego.

 $ crud-> callback_add_field ('callbackname', Array (parametry));
W tym przypadku wywołaniem zwrotnym będzie idlocalidad, a funkcją cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', tablica ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', tablica ($ this, 'cbklocalities')); 
Następnie tworzymy funkcję cbklokalizacje który będzie naszym wywołaniem zwrotnym, gdy dodamy lub edytujemy rekord.
 // Callback generujący combo idlocalidades function cbklocalidades () {// tworzymy kombinację $ combo = ''; $ fincombo = ''; // Bierzemy identyfikator właściwości, jeśli został wysłany jako parametr przez url $ idinmuebleurl = $ this-> uri-> segment (4); // Weryfikujemy operację, którą wykonujemy, jeśli dodamy lub edytujemy $ crud = new spożywczy_CRUD (); $ stan = $ crud-> getState (); // Jeśli edytujemy i identyfikator właściwości nie jest pusty if (isset ($ idinmuebleurl) && $ state == "edit") {// sprawdzamy prowincję i bieżącą lokalizację właściwości $ this-> db-> wybierz ('idprovincia, idlocalidad') -> z ('właściwości') -> gdzie ('idinmueble', $ idinmuebleurl); $db = $ this-> db-> get (); $ wiersz = $ db-> wiersz (0); $ identyfikator prowincji = $ wiersz-> identyfikator prowincji; $ idlocality = $ row-> idlocality; // Wczytujemy kombi ze wszystkimi miejscowościami prowincji $ this-> db-> select ('*') -> from ('localities') -> gdzie ('identyfikator prowincji', $ identyfikator prowincji); $db = $ this-> db-> get (); // Jeśli znajdziemy identyfikator bieżącej lokalizacji, umieszczamy go jako wybrany // w przeciwnym razie kontynuujemy ładowanie innych lokalizacji foreach ($ db-> wynik () jako $ row): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo . = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Zwracamy załadowaną kombinację return $ kombi $ Fincombo; } else {return $ combo. $ fincombo; }} 
Następnie musimy utworzyć funkcję wyszukiwania lokalizacji, którą wskazujemy jako funkcję zapytania w ramach Callback:
 // Zapytanie o lokalizacje function searchlocalities () {// Biorę id prowincji, który został przesłany przez url jako parametr // przy wyborze prowincji z kombinacji id prowincji $ id prowincji = $ this-> uri-> segment (3); // Sprawdzam lokalizacje zgodnie z wybraną prowincją $ this-> db-> select ("*") -> from ('localities') -> where ('prowincja id', $ id prowincji); $db = $ this-> db-> get (); // przypisuję odpowiedź sql do tablicy $ array = array (); foreach ($db-> wynik () jako $ wiersz): $ array [] = array ("wartość" => $ wiersz-> idlocality, "właściwość" => $ wiersz-> lokalizacja); na każdym kroku; echo json_encode (tablica $); Wyjście; } 
Następnie będziemy musieli stworzyć widok przetwarzający kombinacje i dynamicznie dodać instrukcje jquery.W tym celu stworzymy w folderze widoku plik o nazwie dependant_combos.php.
 
Na koniec przechodzimy do widoku i dodajemy następujący kod, który wiąże widok z plikiem dependant_combos.php
 load-> view ('dependent_combos', $ combo_setup); }?> zm13 -> 

Następnie, jeśli wykonamy, możemy zobaczyć zarówno, kiedy dodamy nową właściwość, jak i kiedy edytujemy, jak kombinacje prowincji i miejscowości zostały powiązane z miejscowościami, zależy to od prowincji.

Jeśli chcemy wykonać kilka zależnych kombinacji, będziemy musieli wykonać a oddzwonić dla każdej pary kombinacji.

Załóżmy, że mamy kraje, prowincje i miejscowości i chcemy tworzyć kraje zależne z prowincją i prowincje z miastami, to musimy utworzyć callback dla każdej zależności na przykład:

 $ crud-> callback_add_field (identyfikator prowincji, tablica ($ this, 'prowincja cbk')); $ crud-> callback_edit_field ('identyfikator prowincji', tablica ($to, 'prowincja cbk')); $ crud-> callback_add_field ('idlocalidad', tablica ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', tablica ($ this, 'cbklocalities')); 
W przypadku kombinacji krajów a oddzwonić ponieważ jest pierwszym w hierarchii, nie zależy od innego combo.

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave