Grocery Crud PHP - Verwandte und abhängige Box / Dropdown-Kombination

Inhaltsverzeichnis

Wir hatten in einem anderen Tutorial erwähnt, wie man mit der Entwicklung beginnt Lebensmittelgeschäft zu Mitzünder PHP, als nächstes werden wir sehen, wie man mehrere macht Kombinationsfeld oder Dropdown-Menü sie sind miteinander verwandt und voneinander abhängig.

Sehen wir uns ein vollständiges Beispiel mit einer Datenbank namens Real Estate an, die Struktur sieht wie folgt aus:

Tabellenstruktur für die Tabelle `Immobilien`

 CREATE TABLE IF NOT EXISTS `immobilien` (` propertyid` int (11) NOT NULL, `userid` int (11) DEFAULT NULL,` highdate` date DEFAULT '0000-00-00', `property id` int (6 ) DEFAULT '0', `price` dezimal (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` Aufzählung ('Yes', 'No') DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1; CREATE TABLE IF NOT EXISTS `localities` (` city id` int (11) NOT NULL, `locality` varchar (200) DEFAULT NULL,` provinz id` int (11) DEFAULT '0') ENGINE = MyISAM AUTO_INCREMENT = 3604 DEFAULT ZEICHENSATZ = utf8; CREATE TABLE IF NOT EXISTS `users` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; CREATE TABLE IF NOT EXISTS `propertytype` (` propertytypeid` int (6) NOT NULL, `propertytype` varchar (150) NOT NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; CREATE TABLE IF NOT EXISTS `provinces` (` idprovince` int (11) NOT NULL, `province` varchar (255) COLLATE latin1_spanish_ci DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 32 DEFAULT CHARSET = latin1 COLLATE = latin;1_spanish_ci 
Wir können durch phpmyadmin ein Beziehungsdiagramm, das wie folgt aussieht:

Im vorherigen Tutorial haben wir gesehen So installieren und konfigurieren Sie Grocerycrud, hier erstellen wir die Anwendung, wir erstellen den Controller Inmo.php

 laden-> Datenbank (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> Laden-> Bibliothek ('Grocery_CRUD'); } öffentlicher Funktionsindex () {$ crud = neues Lebensmittelgeschäft_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('Immobilien'); $ Ausgabe = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 -> 
Als nächstes erstellen wir die Ansicht, die wir aufrufen werden Listainmo.php, die CSS- und JQuery-Dateien übernehmen sie aus der Konfiguration von Lebensmittel Crud deshalb listen wir sie hier nur auf:
 
Das Ergebnis beim Ausführen des Webs in einem Browser http: // localhost / pro… os / inmobi / Inmo /

Wir können sehen, dass die ID Zahlen anstelle von Daten anzeigt. Dies liegt daran, dass die Tabellen nicht miteinander in Beziehung stehen. Wir werden Folgendes tun. Im Controller unter set_table werden wir angeben.

 $ crud-> set_relation ('gorelation', 'tablerelating', 'showfield');
Als Beispiel möchte ich den Benutzernamen der Benutzertabelle anzeigen, mit dem Benutzeridentifikation aus der Immobilientabelle muss ich folgenden Code schreiben:
 $ crud-> set_relation ('userid', 'users', 'name');
Als Ergebnis der Ausführung sehen wir, dass stattdessen eine Zahl in Benutzeridentifikation zeigt uns den Namen.

Als nächstes werden wir die Felder, Provinz und Ortschaften auflisten.

 $ crud-> set_relation ('Eigenschaftstyp-ID', 'Eigenschaftstyp', 'Eigenschaftstyp'); $ crud-> set_relation ('Provinz-ID', 'Provinzen', 'Provinz'); $ crud-> set_relation ('locality id', 'localities', 'locality'); 
Nach der Ausführung sehen wir die gehen mit ihrer jeweiligen Beziehung:

Bei Bildern müssen wir verwenden

 $ crud-> set_field_upload (Feld, 'Bildpfad');
Wir werden also dasselbe Grocery Crud-Verzeichnis verwenden, um Bilder zu speichern
 $ crud-> set_field_upload ('photo', 'assets/uploads/files');
Obwohl wir die zugehörigen Felder und Kombinationen in der Liste anzeigen können, sind sie nicht abhängig, wir möchten, dass bei der Auswahl einer Provinz in der Provinz-Kombination die Ortschaften-Kombination automatisch aktiviert und mit den Ortschaften dieser Provinz gefüllt wird diese Beziehung wird beibehalten, wenn wir eine Eigenschaft hinzufügen oder wenn wir sie bearbeiten.

Um die Combos abhängig zu machen, verwenden wir eine Callback-Funktion. EIN Ruf zurück o Callback ist eine Alternative zum Polymorphismus. Dies war ein Thema, das wir in einem anderen Tutorial behandelt haben, um zu erfahren, wie die Klassen implementiert werden:

Klassen und Polymorphismus mit PHP

Wo einer Funktion als Parameter eine andere Funktion zugewiesen wird, eine untergeordnete Funktion. EIN Ruf zurück es kann wirken, wenn ein Datensatz hinzugefügt oder geändert wird. Diese Methode ermöglicht eine großartige Wiederverwendung von Code.

Die Anweisung eines Rückrufs kann im Controller wie folgt lauten.

 $ crud-> callback_add_field ('callbackname', Array (Parameter));
In diesem Fall lautet der Callback idlocalidad und die Funktion cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Als nächstes erstellen wir die Funktion cbklocations Dies ist unser Rückruf, der aufgerufen wird, wenn wir einen Datensatz hinzufügen oder bearbeiten.
 // Callback, das die Combo-Idlocalidades-Funktion generiert cbklocalidades () {// wir erstellen die Combo $ Combo = ''; $fincombo = ''; // Wir nehmen die Property-ID, wenn sie als Parameter per URL gesendet wurde $ idinmuebleurl = $ this-> uri-> segment (4); // Wir überprüfen die Operation, die wir ausführen, wenn wir $ crud = new Lebensmittelgeschäft_CRUD (); $state = $crud-> getState(); // Wenn wir bearbeiten und die Property-ID nicht leer ist if (isset ($ idinmuebleurl) && $ state == "edit") {// konsultieren wir die Provinz und den aktuellen Standort der Property $ this-> db-> select ( 'idprovincia, idlocalidad') -> from ('properties') -> where ('idinmueble', $ idinmuebleurl); $ db = $ this-> db-> get(); $ Zeile = $ db-> Zeile (0); $ Provinz-ID = $ Zeile-> Provinz-ID; $ idlocality = $ row-> idlocality; // Wir laden die Combo mit allen Ortschaften der Provinz $ this-> db-> select ('*') -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get(); // Wenn wir die ID des aktuellen Standorts finden, setzen wir ihn als ausgewählt // ansonsten laden wir die anderen Standorte weiter foreach ($ db-> result () als $ Zeile): if ($ Zeile-> idlocalidad == $ idlocalidad ) {$ combo . = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Wir geben die geladene Combo zurück return $ Combo $ Fincombo; } else {return $ Combo. $ fincombo; }} 
Als nächstes müssen wir die Funktion zum Suchen nach Standorten erstellen, die wir als Abfragefunktion im Callback angeben:
 // Query localities function searchlocalities () {// Ich nehme die Provinz-ID, die als Parameter per URL gesendet wurde, wenn ich // eine Provinz aus der Combo-Provinz-ID auswähle $ provinz-id = $ this-> uri-> segment (3); // Ich konsultiere die Ortschaften entsprechend der ausgewählten Provinz $ this-> db-> select ("*") -> from ('localities') -> where ('province id', $ provinz id); $ db = $ this-> db-> get(); // Ich weise die SQL-Antwort einem Array zu $ ​​array = array (); foreach ($ db-> result() as $ row): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> locality); endforeach; echo json_encode ($-Array); Ausfahrt; } 
Als nächstes müssen wir die View erstellen, die die Combos verarbeitet und die jquery-Anweisungen dynamisch hinzufügen.Dazu erstellen wir im View-Ordner eine Datei namens abhängige_combos.php.
 
Zum Abschluss gehen wir zur Ansicht und fügen den folgenden Code hinzu, der die Ansicht mit der Datei verknüpft abhängige_combos.php
 load-> view ('dependent_combos', $combo_setup); }?> var13 -> 

Wenn wir dann ausführen, können wir sowohl sehen, wenn wir eine neue Eigenschaft hinzufügen, als auch wenn wir bearbeiten, wie die Kombinationen aus Provinz und Ortschaften und Ortschaften miteinander verbunden sind. Dies hängt von der Provinz ab.

Wenn wir mehrere abhängige Combos erstellen möchten, müssen wir a Ruf zurück für jedes Kombinationspaar.

Angenommen, wir haben Länder, Provinzen und Orte und möchten abhängige Länder mit Provinzen und Provinzen mit Städten machen, dann müssen wir zum Beispiel für jede Abhängigkeit einen Rückruf erstellen:

 $ crud-> callback_add_field (Provinz-ID, Array ($ this, 'cbk-Provinz')); $ crud-> callback_edit_field ('province id', array ($ this, 'cbk Province')); $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Für die Länderkombination a Ruf zurück da es der erste in der Hierarchie ist, hängt es nicht von einer anderen Combo ab.

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave