Dagligvarer Crud PHP - Relateret og afhængig boks / dropdown -kombination

Indholdsfortegnelse

Vi havde nævnt i en anden tutorial hvordan man starter udviklingen med Grocerycrud til Codeigniter PHP, næste vil vi se, hvordan man laver flere kombinationsboks eller dropdown de er i familie med hinanden og afhænger af hinanden.

Lad os se et komplet eksempel med en database kaldet fast ejendom, strukturen vil være som følger:

Bordstruktur til bordet `fast ejendom`

 Opret tabel, hvis den ikke findes 'fast ejendom' ('propertyid' int (11) IKKE 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' tekst, 'idprovincia' int (10) DEFAULT NULL, 'idlocality' int (10) DEFAULT NULL, 'address' varchar ( 150) DEFAULT NULL, `foto` varchar (255) DEFAULT NULL,` tilgængelig` enum ('Ja', 'Nej') DEFAULT NULL) MOTOR = MyISAM AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1; Opret tabel, hvis den ikke findes '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; Opret tabel, hvis den ikke findes 'brugere' ('userid' int (11) IKKE NULL, 'navn' varchar (150) IKKE NULL DEFAULT ') MOTOR = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; Opret tabel, hvis den ikke findes 'egenskabstype' ('egenskabstype' int (6) IKKE NULL, 'egenskabstype' varchar (150) IKKE NULL STANDARD ')) MOTOR = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; Opret tabel, hvis den ikke findes '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 præstere igennem phpmyadmin et relationsdiagram, der vil være følgende:

I den forrige tutorial så vi hvordan man installerer og konfigurerer Grocerycrud, her opretter vi applikationen, vi opretter controlleren Inmo.php

 load-> database (); $ this-> load-> hjælper ('url'); $ this-> load-> model ('dagligvare_crud_model'); $ this-> load-> bibliotek ('Grocery_CRUD'); } offentligt funktionsindeks () {$ crud = ny købmand_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('fast ejendom'); $ output = $ crud-> render (); $ this-> load-> view ('immolistisk', $ output); }}?> var13 -> 
Dernæst opretter vi den visning, som vi vil kalde Listainmo.php, vil CSS- og JQuery -filerne tage dem fra konfigurationen af Dagligvarer Crud derfor lister vi dem kun her:
 
Resultatet ved udførelse af internettet i en browser http: // localhost / pro … os / inmobi / Inmo /

Vi kan se, at id viser numre i stedet for data, dette er fordi tabellerne ikke er relateret til at relatere dem, vi vil gøre følgende, i controlleren under set_table vil vi angive.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Som et eksempel vil jeg vise brugernavnet på brugerbordet med bruger ID fra tabellen med fast ejendom, så bliver jeg nødt til at skrive følgende kode:
 $ crud-> set_relation ('userid', 'users', 'name');
Som et resultat af eksekvering vil vi se, at i stedet et tal i bruger ID viser os navnet.

Dernæst skal vi liste felterne, provinsen og lokaliteterne op.

 $ crud-> set_relation ('egenskabstype id', 'egenskabstype', 'egenskabstype'); $ crud-> set_relation ('provins-id', 'provinser', 'provins'); $ crud-> set_relation ('lokalitets-id', 'lokaliteter', 'lokalitet'); 
Efter udførelsen ser vi med deres respektive forhold:

I tilfælde af billeder skal vi bruge

 $ crud-> set_field_upload (felt, 'imagepath');
Så vi vil bruge det samme Grocery crud -bibliotek til at gemme billeder
 $ crud-> set_field_upload ('foto', 'aktiver / uploads / filer');
Selvom vi kan vise de relaterede felter og kombinationer på listen, er de ikke afhængige, vi vil have, at når vi vælger en provins i provinskombinationen, aktiveres lokalitetskombinationen automatisk, og den udfyldes med lokaliteterne i denne provins, vi ønsker også at forholdet opretholdes, når vi tilføjer en ejendom, eller når vi redigerer den.

For at gøre kombinationerne afhængige bruger vi en tilbagekaldsfunktion. EN ring tilbage o tilbagekaldelse er et alternativ til polymorfisme, dette var et emne, som vi dækkede i en anden vejledning for at vide, hvordan man implementerer klasserne:

Klasser og polymorfisme med PHP

Når en funktion er tildelt som parameter en anden funktion, en funktion på lavere niveau. EN ring tilbage den kan fungere, når en post tilføjes, eller når den ændres. Denne metode giver mulighed for stor genbrug af kode.

Angivelsen af ​​et tilbagekald kan være følgende i controlleren.

 $ crud-> callback_add_field ('callbackname', Array (parametre));
I dette tilfælde vil tilbagekaldelsen være idlocalidad, og funktionen vil være cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', array ($ dette, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Dernæst opretter vi funktionen cbklokationer som vil blive kaldt til vores tilbagekald, når vi tilføjer eller redigerer en post.
 // Tilbagekaldelse, der genererer kombinations -idlocalidades -funktionen cbklocalidades () {// vi opretter kombinationsboksen $ combo = ''; $ fincombo = ''; // Vi tager ejendoms-id'et, hvis det blev sendt som en parameter af url $ idinmuebleurl = $ this-> uri-> segment (4); // Vi verificerer den handling, vi udfører, hvis vi tilføjer eller redigerer $ crud = ny købmand_CRUD (); $ state = $ crud-> getState (); // Hvis vi redigerer, og ejendoms-id'et ikke er tomt, hvis (isset ($ idinmuebleurl) && $ state == "edit") {// konsulterer vi provinsen og den aktuelle placering af ejendommen $ this-> db-> vælg ('idprovincia, idlocalidad') -> fra ('egenskaber') -> hvor ('idinmueble', $ idinmuebleurl); $ db = $ dette-> db-> get (); $ række = $ db-> række (0); $ provins-id = $ række-> provins-id; $ idlocality = $ row-> idlocality; // Vi indlæser kombinationsboksen med alle lokaliteterne i provinsen $ this-> db-> select ('*') -> fra ('lokaliteter') -> hvor ('provins -id', $ provins -id); $ db = $ dette-> db-> get (); // Hvis vi finder id'et for den aktuelle placering, sætter vi det som valgt // ellers fortsætter vi med at indlæse de andre steder for hver ($ db-> resultat () som $ række): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} ellers {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Vi returnerer den indlæste kombinationsret $ combo. $ Fincombo; } andet {return $ combo. $ fincombo; }} 
Dernæst skal vi oprette funktionen Søg efter placeringer, hvilket er det, vi angiver som en forespørgselsfunktion inden for tilbagekald:
 // Forespørgselslokaliteter funktion søgelokaliteter () {// Jeg tager provins-id'et, der blev sendt som en parameter af url, når jeg vælger // en provins fra kombinationsprovins-id $ provins-id = $ dette-> uri-> segment (3); // Jeg konsulterer lokaliteterne i henhold til den valgte provins $ this-> db-> select ("*") -> fra ('lokaliteter') -> hvor ('provins -id', $ provins -id); $ db = $ dette-> db-> get (); // Jeg tildeler sql -svaret til en matrix $ array = array (); foreach ($ db-> resultat () som $ række): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> lokalitet); endforeach; ekko json_encode ($ array); Afslut; } 
Dernæst bliver vi nødt til at oprette den visning, der behandler kombinationerne og tilføje jquery -sætningerne dynamisk. Til dette vil vi oprette en fil i visningsmappen kaldet afhængig_kombo.php.
 
For at afslutte går vi til visningen og tilføjer følgende kode, der relaterer visningen til filen afhængig_kombo.php
 load-> view ('afhængig_komboer', $ combo_setup); }?> var13 -> 

Så hvis vi udfører, kan vi se både når vi tilføjer en ny ejendom eller når vi redigerer, hvordan provinsen og lokaliteterne har været relateret og lokaliteter, det afhænger af provinsen.

Hvis vi vil lave flere afhængige kombinationer, bliver vi nødt til at lave en ring tilbage for hvert par kombinationer.

Antag, at vi har lande, provinser og lokaliteter, og vi vil lave afhængige lande med provinser og provinser med byer, så skal vi oprette et tilbagekald til hver afhængighed, f.eks .:

 $ crud-> callback_add_field (provins-id, array ($ dette, 'cbk-provins')); $ crud-> callback_edit_field ('provins-id', array ($ dette, 'cbk-provins')); $ crud-> callback_add_field ('idlocalidad', array ($ dette, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
For landekombinationen, a ring tilbage siden den er den første i hierarkiet, afhænger den ikke af en anden kombination.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave