Dagligvarer Crud PHP - Relatert og avhengig boks / rullegardinmeny

Innholdsfortegnelse

Vi hadde nevnt i en annen opplæring hvordan du starter utviklingen med Grocerycrud til Codeigniter PHP, neste skal vi se hvordan vi lager flere kombinasjonsboks eller rullegardinmeny de er i slekt med hverandre og er avhengige av hverandre.

La oss se et komplett eksempel med en database som heter Real Estate, strukturen vil være som følger:

Bordstruktur for bordet `eiendom`

 OPPRETT TABELL HVIS IKKE FESTER `fast eiendom` (` propertyid` int (11) NOT NULL, `userid` int (11) DEFAULT NULL,` highdate` date DEFAULT '0000-00-00', `property id` int (6 ) DEFAULT '0', 'price' desimal (10,2) DEFAULT '0.00', 'description' tekst, 'idprovincia' int (10) DEFAULT NULL, 'idlocality' int (10) DEFAULT NULL, 'address' varchar ( 150) DEFAULT NULL, `photo` varchar (255) DEFAULT NULL,` tilgjengelig` enum ('Yes', 'No') DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1; OPPRETT TABELL HVIS IKKE FESTER `lokaliteter` (` by -id` int (11) IKKE NULL, `lokalitet` varchar (200) DEFAULT NULL,` provins -id` int (11) DEFAULT '0') MOTOR = MyISAM AUTO_INCREMENT = 3604 DEFAULT CHARSET = utf8; LAG TABELL HVIS IKKE FESTER `brukere` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') MOTOR = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; OPPRETT TABELL IF NOT EXISTS `propertyytype` (` propertyytypeid` int (6) NOT NULL, `propertyytype` varchar (150) NOT NULL DEFAULT` `) ENGINE = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; OPPRETT TABELL HVIS IKKE FESTER `provinser` (` idprovince` int (11) NOT NULL, `province` varchar (255) COLLATE latin1_spanish_ci DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 32 DEFAULT CHARSET = latin1 COLLATE = latin1_spanish_ci; 
Vi kan prestere gjennom phpmyadmin et forholdsdiagram som vil være følgende:

I forrige opplæring så vi hvordan installere og konfigurere Grocerycrud, her skal vi lage programmet, vi opprette kontrolleren Inmo.php

 load-> database (); $ this-> load-> hjelper ('url'); $ this-> load-> model ('dagligvare_crud_modell'); $ this-> load-> library ('Grocery_CRUD'); } offentlig funksjonsindeks () {$ crud = ny dagligvare_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('fast eiendom'); $ output = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 -> 
Deretter lager vi visningen som vi vil kalle Listainmo.php, vil CSS- og JQuery -filene ta dem fra konfigurasjonen av Dagligvarer Crud derfor viser vi dem bare her:
 
Resultatet når du kjører nettet i en nettleser http: // localhost / pro … os / inmobi / Inmo /

Vi kan se at id viser tall i stedet for data dette er fordi tabellene ikke er relatert til å relatere dem, vi vil gjøre følgende, i kontrolleren under set_table vil vi indikere.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Som et eksempel vil jeg vise brukernavnet til brukertabellen, med bruker-ID Fra eiendomstabellen må jeg skrive følgende kode:
 $ crud-> set_relation ('userid', 'users', 'name');
Som et resultat av utførelsen vil vi se at i stedet et tall i bruker-ID viser oss navnet.

Deretter skal vi liste opp feltene, provinsen og lokalitetene.

 $ crud-> set_relation ('property type ID', 'property type', 'property type'); $ crud-> set_relation ('provins-id', 'provinser', 'provins'); $ crud-> set_relation ('lokalitets-ID', 'lokaliteter', 'lokalitet'); 
Etter å ha utført vil vi se med deres respektive forhold:

Når det gjelder bilder må vi bruke

 $ crud-> set_field_upload (felt, 'imagepath');
Så vi vil bruke den samme Grocery crud -katalogen for å lagre bilder
 $ crud-> set_field_upload ('foto', 'eiendeler / opplastinger / filer');
Selv om vi kan vise de relaterte feltene og kombinasjonene i listen, er de ikke avhengige, vi vil at når vi velger en provins i provinskombinasjonen, blir lokalitetskombinasjonen aktivert automatisk og den fylles med lokaliteter i den provinsen, vi vil også ha at forholdet opprettholdes når vi legger til en eiendom eller når vi redigerer den.

For å gjøre kombinasjonene avhengige bruker vi en tilbakeringingsfunksjon. EN Ring tilbake o tilbakeringing er et alternativ til polymorfisme, dette var et emne som vi dekket i en annen opplæring for å vite hvordan du implementerer klassene:

Klasser og polymorfisme med PHP

Når en funksjon er tilordnet som parameter en annen funksjon, en funksjon på lavere nivå. EN Ring tilbake den kan virke når en post legges til eller når den endres. Denne metoden gir god gjenbruk av kode.

Uttalelsen om et tilbakeringing kan være følgende i kontrolleren.

 $ crud-> callback_add_field ('tilbakeringingsnavn', Array (parametere));
I dette tilfellet vil tilbakeringingen være idlocalidad og funksjonen vil være cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Deretter lager vi funksjonen cbklocations som vil bli ringt opp når vi legger til eller redigerer en post.
 // Tilbakeringing som genererer kombinasjonsidlocalidades -funksjonen cbklocalidades () {// vi lager kombinasjonen $ combo = ''; $ fincombo = ''; // Vi tar egenskapen id hvis den ble sendt som en parameter av url $ idinmuebleurl = $ this-> uri-> segment (4); // Vi bekrefter operasjonen vi utfører hvis vi legger til eller redigerer $ crud = new dagligvare_CRUD (); $ state = $ crud-> getState (); // Hvis vi redigerer og eiendoms-ID-en ikke er tom hvis (isset ($ idinmuebleurl) && $ state == "edit") {// konsulterer vi provinsen og gjeldende beliggenhet for eiendommen $ this-> db-> velg ('idprovincia, idlocalidad') -> fra ('eiendommer') -> hvor ('idinmueble', $ idinmuebleurl); $ db = $ this-> db-> get (); $ rad = $ db-> rad (0); $ provins-id = $ rad-> provins-id; $ idlocality = $ row-> idlocality; // Vi laster kombinasjonen med alle lokalitetene i provinsen $ this-> db-> select ('*') -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get (); // Hvis vi finner id-en til den nåværende plasseringen, setter vi den som valgt // ellers fortsetter vi å laste de andre stedene for hver ($ db-> resultat () som $ rad): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} annet {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Vi returnerer den lastede kombinasjonsreturen $ combo. $ Fincombo; } annet {return $ combo. $ fincombo; }} 
Deretter må vi opprette søke etter posisjonsfunksjonen, som er det vi angir som en søkefunksjon i tilbakeringingen:
 // Søkelokaliteter funksjon søkelokaliteter () {// Jeg tar provins-IDen som ble sendt som en parameter av url når jeg valgte // en provins fra kombinasjonsprovinsen id $ provins-id = $ dette-> uri-> segment (3); // Jeg konsulterer lokalitetene i henhold til den valgte provinsen $ this-> db-> select ("*") -> fra ('lokaliteter') -> hvor ('provins -id', $ provins -id); $ db = $ this-> db-> get (); // Jeg tildeler sql -responsen til en matrise $ array = array (); foreach ($ db-> resultat () som $ rad): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> lokalitet); endforeach; echo json_encode ($ array); exit; } 
Deretter må vi lage visningen som behandler kombinasjonene og legge til jquery -setningene dynamisk. For dette vil vi opprette en fil i visningsmappen depend_combos.php.
 
For å fullføre går vi til visningen og legger til følgende kode som relaterer visningen med filen depend_combos.php
 load-> view ('depend_combos', $ combo_setup); }?> var13 -> 

Så hvis vi utfører, kan vi se både når vi legger til en ny eiendom eller når vi redigerer hvordan provinsen og lokalitetskombinasjonene har vært relatert og lokaliteter, det avhenger av provinsen.

Hvis vi vil lage flere avhengige kombinasjoner, må vi lage en Ring tilbake for hvert kombinasjonspar.

Anta at vi har land, provinser og lokaliteter, og vi ønsker å lage avhengige land med provinser og provinser med byer, så må vi lage et tilbakeringing for hver avhengighet, for eksempel:

 $ crud-> callback_add_field (provins-ID, matrise ($ dette, 'cbk-provins')); $ crud-> callback_edit_field ('provins-id', matrise ($ dette, 'cbk-provinsen')); $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
For landets kombinasjon, a Ring tilbake siden den var den første i hierarkiet, er den ikke avhengig av en annen kombinasjon.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave