Grocery Crud PHP - Relaterad och beroende box / dropdown -kombination

Innehållsförteckning

Vi hade nämnt i en annan handledning hur man startar utvecklingen med Grocerycrud till Codeigniter PHP, nästa ska vi se hur man gör flera kombinationsruta eller rullgardinsmeny de är släkt med varandra och är beroende av varandra.

Låt oss se ett komplett exempel med en databas som heter Real Estate, strukturen kommer att vara följande:

Tabellstruktur för bordet 'fastigheter'

 SKAPA TABELL OM DET INTE FINNS `fastighet` (` 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 DEFAULT CHARSET = latin1; SKAPA TABELL OM DET INTE FINNAS `lokaliteter` (` city id` int (11) NOT NULL, `locality` varchar (200) DEFAULT NULL,` province id` int (11) DEFAULT '0') ENGINE = MyISAM AUTO_INCREMENT = 3604 DEFAULT CHARSET = utf8; SKAPA TABELL OM DET INTE FINNS `användare` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') MOTOR = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; SKAPA TABELL OM DET INTE FINNAS `propertyytype` (` propertyytypeid` int (6) NOT NULL, `propertyytype` varchar (150) NOT NULL DEFAULT` `) ENGINE = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; SKAPA TABELL OM DET INTE FINNS `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 prestera genom phpmyadmin ett relationsdiagram som kommer att vara följande:

I föregående handledning såg vi hur man installerar och konfigurerar Grocerycrud, här skapar vi applikationen, vi skapar kontrollen Inmo.php

 load-> databas (); $ this-> load-> helper ('url'); $ this-> load-> model ('dagligvaru_crud_modell'); $ this-> load-> library ('Grocery_CRUD'); } index för allmänna funktioner () {$ crud = new dagligvaru_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('fastigheter'); $ output = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 -> 
Därefter skapar vi den vy som vi kommer att kalla Listainmo.php, tar CSS- och JQuery -filerna dem från konfigurationen av Livsmedel Crud därför listar vi dem bara här:
 
Resultatet när du kör webben i en webbläsare http: // localhost / pro … os / inmobi / Inmo /

Vi kan se att id -numren i stället för data beror på att tabellerna inte är relaterade till dem, vi kommer att göra följande, i kontrollen nedan set_table kommer vi att indikera.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Som ett exempel vill jag visa användarnamnets användarnamn med användar ID från fastighetsbordet måste jag skriva följande kod:
 $ crud-> set_relation ('userid', 'users', 'name');
Som ett resultat av körningen ser vi att istället ett tal i användar ID visar oss namnet.

Därefter kommer vi att lista fälten, provinsen och orterna.

 $ crud-> set_relation ('propertyytype id', 'propertyytype', 'propertyytype'); $ crud-> set_relation ('provins-id', 'provinser', 'provins'); $ crud-> set_relation ('lokalitets-id', 'lokaliteter', 'lokalitet'); 
Efter körningen ser vi med deras respektive relation:

När det gäller bilder måste vi använda

 $ crud-> set_field_upload (fält, 'imagepath');
Så vi kommer att använda samma Grocery crud -katalog för att spara bilder
 $ crud-> set_field_upload ('foto', 'tillgångar / uppladdningar / filer');
Även om vi kan visa de relaterade fälten och kombinationerna i listan, är de inte beroende, vi vill att när vi väljer en provins i provinskombinationen aktiveras lokalkombinationen automatiskt och den fylls med provinserna i provinsen, vi vill också att relationen upprätthålls när vi lägger till en egendom eller när vi redigerar den.

För att göra kombinationerna beroende kommer vi att använda en återuppringningsfunktion. A ring tillbaka o återuppringning är ett alternativ till polymorfism, detta var ett ämne som vi behandlade i en annan handledning för att veta hur man implementerar klasserna:

Klasser och polymorfism med PHP

När en funktion tilldelas som parameter en annan funktion, en lägre nivå. A ring tillbaka den kan verka när en post läggs till eller när den ändras. Denna metod möjliggör stor återanvändning av kod.

Uttalandet om ett återuppringning kan vara följande i regulatorn.

 $ crud-> callback_add_field ('callbackname', Array (parametrar));
I detta fall blir återuppringningen idlocalidad och funktionen kommer att vara cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Därefter skapar vi funktionen cbklocations som blir vår återuppringning när vi lägger till eller redigerar en post.
 // Återuppringning som genererar kombinationsidlocalidades -funktionen cbklocalidades () {// vi skapar kombinationen $ combo = ''; $ fincombo = ''; // Vi tar egendoms-id om det skickades som en parameter av url $ idinmuebleurl = $ this-> uri-> segment (4); // Vi verifierar operationen vi utför om vi lägger till eller redigerar $ crud = new dagligvaru_CRUD (); $ state = $ crud-> getState (); // Om vi ​​redigerar och fastighets-id: t inte är tomt om (isset ($ idinmuebleurl) && $ state == "edit") {// konsulterar vi provinsen och den aktuella platsen för fastigheten $ this-> db-> välj ('idprovincia, idlocalidad') -> från ('egenskaper') -> var ('idinmueble', $ idinmuebleurl); $ db = $ this-> db-> get (); $ rad = $ db-> rad (0); $ provins-id = $ rad-> provins-id; $ idlocality = $ row-> idlocality; // Vi laddar kombon med alla orter i provinsen $ this-> db-> select ('*') -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get (); // Om vi ​​hittar id för den aktuella platsen sätter vi det som valt // annars fortsätter vi att ladda de andra platserna för varje ($ db-> resultat () som $ rad): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} annars {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } avsluta; // Vi returnerar den laddade kombinationsrundan $ combo. $ Fincombo; } annat {return $ combo. $ fincombo; }} 
Därefter måste vi skapa sökningen efter platser -funktionen, vilket är vad vi anger som en sökfunktion inom återuppringningen:
 // Frågelokaliteter fungerar söklokaliteter () {// Jag tar provins-id som skickades som en parameter med url när jag väljer // en provins från kombinationsprovins-id $ provins-id = $ detta-> uri-> segment (3); // Jag konsulterar orterna enligt den valda provinsen $ this-> db-> select ("*") -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get (); // Jag tilldelar sql -svaret till en array $ array = array (); foreach ($ db-> resultat () som $ rad): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> locality); avsluta; echo json_encode ($ array); utgång; } 
Därefter måste vi skapa vyn som bearbetar kombinationerna och lägga till jquery -satserna dynamiskt. För detta skapar vi en fil som heter beroende_kombos.php.
 
För att avsluta går vi till vyn och lägger till följande kod som relaterar vyn med filen beroende_kombos.php
 load-> view ('depend_combos', $ combo_setup); }?> var13 -> 

Om vi ​​utför det kan vi se både när vi lägger till en ny egendom eller när vi redigerar hur provinsen och orternas kombinationer har varit relaterade och lokaliteter, det beror på provinsen.

Om vi ​​vill göra flera beroende kombinationer måste vi göra en ring tillbaka för varje kombination av kombinationer.

Antag att vi har länder, provinser och lokaliteter och vi vill göra beroende länder med provinser och provinser med städer, då måste vi skapa ett återuppringning för varje beroenden till exempel:

 $ crud-> callback_add_field (provins-id, array ($ detta, 'cbk-provins')); $ crud-> callback_edit_field ('provins-id', array ($ detta, 'cbk-provins')); $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
För länderkombinationen, a ring tillbaka eftersom den är den första i hierarkin beror den inte på en annan kombination.

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave