Grocery Crud PHP - Související a závislé pole / rozevírací kombinace

Obsah

V jiném tutoriálu jsme zmínili, jak začít s vývojem Grocerycrud na Codeigniter PHP, dále uvidíme, jak vytvořit několik rozbalovací seznam nebo rozevírací seznam navzájem spolu souvisí a jsou na sobě závislí.

Podívejme se na úplný příklad s databází s názvem Real Estate, struktura bude následující:

Struktura stolu pro stůl "nemovitost"

 VYTVOŘIT TABULKU, KDYŽ NEEXISTUJE `nemovitost` (` 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; VYTVOŘIT TABULKU, KDYŽ NEEXISTUJE `localities` (` 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; VYTVOŘIT TABULKU, KDYŽ NEEXISTUJE `users` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT ')) MOTOR = MyISAM AUTO_INCREMENT = 161 DEFAULT CHARSET = latin1; VYTVOŘIT TABULKU, KDYŽ NEEXISTUJE `propertytype` (` propertytypeid` int (6) NOT NULL, `propertytype` varchar (150) NOT NULL DEFAULT '') ENGINE = MyISAM AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1; VYTVOŘIT TABULKU, KDYŽ NEEXISTUJE `provincie` (` idprovince` int (11) NOT NULL, `provincie` varchar (255) COLLATE latin1_spanish_ci DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 32 DEFAULT CHARSET = latin1 COLLATE = latin1_spanish_ 
Můžeme provést prostřednictvím phpmyadmin diagram vztahů, který bude následující:

V předchozím tutoriálu jsme viděli jak nainstalovat a konfigurovat Grocerycrud, zde vytvoříme aplikaci, vytvoříme ovladač Inmo.php

 načíst-> databáze (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } index veřejné funkce () {$ crud = new grocery_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('nemovitost'); $ output = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 -> 
Dále vytvoříme pohled, který zavoláme Listainmo.php, soubory CSS a JQuery je převezmou z konfigurace Crudery s potravinami proto je uvádíme pouze zde:
 
Výsledek při spouštění webu v prohlížeči http: // localhost / pro… os / inmobi / Inmo /

Vidíme, že id místo čísel zobrazuje čísla, protože tabulky nesouvisejí s jejich vztahem, provedeme následující, v ovladači pod set_table uvedeme.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Jako příklad chci ukázat uživatelské jméno uživatelské tabulky pomocí uživatelské ID z realitní tabulky pak budu muset napsat následující kód:
 $ crud-> set_relation ('userid', 'users', 'name');
V důsledku spuštění uvidíme, že místo toho číslo v uživatelské ID ukazuje nám jméno.

Dále jdeme na seznam polí, provincií a lokalit.

 $ crud-> set_relation ('propertytype id', 'propertytype', 'propertytype'); $ crud-> set_relation ('provincie id', 'provincie', 'provincie'); $ crud-> set_relation ('locality id', 'localities', 'locality'); 
Po spuštění uvidíme jít s jejich příslušným vztahem:

V případě obrázků musíme použít

 $ crud-> set_field_upload (pole, 'imagepath');
K ukládání obrázků tedy použijeme stejný adresář Grocery crud
 $ crud-> set_field_upload ('fotografie', 'aktiva / nahrání / soubory');
Ačkoli můžeme v seznamu zobrazit související pole a komba, nejsou na sobě závislá, chceme, aby se při výběru provincie v kombinaci provincie automaticky aktivovalo komboloty lokalit a aby se vyplnily lokality dané provincie, chceme také tento vztah je zachován, když přidáme vlastnost nebo ji upravíme.

Aby byla komba závislá, použijeme funkci zpětného volání. A zpětné volání o zpětné volání je alternativou k polymorfismu, toto bylo téma, kterému jsme se věnovali v jiném tutoriálu, abychom věděli, jak třídy implementovat:

Třídy a polymorfismus s PHP

Pokud je funkce přiřazena jako parametr jiná funkce, funkce nižší úrovně. A zpětné volání může působit při přidání záznamu nebo při jeho úpravě. Tato metoda umožňuje skvělé opětovné použití kódu.

Prohlášení o zpětném volání může být v řadiči následující.

 $ crud-> callback_add_field ('callbackname', Array (parametry));
V tomto případě bude zpětné volání idlocalidad a funkce bude cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', pole ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Dále vytvoříme funkci cbklocation což bude naše zpětné volání vyvolané při přidání nebo úpravě záznamu.
 // Zpětné volání, které generuje funkci combo idlocalidades cbklocalidades () {// vytvoříme combo $ combo = ''; $ fincombo = ''; // Vezmeme ID vlastnosti, pokud bylo odesláno jako parametr adresou URL $ idinmuebleurl = $ this-> uri-> segment (4); // Operaci, kterou provádíme, ověříme, pokud přidáme nebo upravíme $ crud = new grocery_CRUD (); $ state = $ crud-> getState (); // Pokud provádíme úpravy a ID vlastnosti není prázdné, pokud (isset ($ idinmuebleurl) && $ state == "edit") {// konzultujeme provincii a aktuální umístění vlastnosti $ this-> db-> vyberte ('idprovincia, idlocalidad') -> z ('properties') -> where ('idinmueble', $ idinmuebleurl); $ db = $ this-> db-> get (); $ řádek = $ db-> řádek (0); $ province id = $ row-> id provincie; $ idlocality = $ row-> idlocality; // Načteme kombo se všemi lokalitami provincie $ this-> db-> select ('*') -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get (); // Pokud najdeme ID aktuálního umístění, vložíme jej jako vybrané // jinak pokračujeme v načítání ostatních umístění foreach ($ db-> result () jako $ row): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Vrátíme načtené combo return $ combo. $ Fincombo; } else {vrátit $ combo. $ fincombo; }} 
Dále musíme vytvořit funkci hledání míst, což je to, co označujeme jako funkci dotazu v rámci zpětného volání:
 // Lokality dotazů funkce searchlocalities () {// ID provincie, které bylo odesláno jako parametr podle adresy URL, beru při výběru // provincie z kombinovaného ID provincie $ ID provincie = $ this-> uri-> segment (3); // Konzultuji lokality podle vybrané provincie $ this-> db-> select ("*") -> from ('localities') -> where ('province id', $ province id); $ db = $ this-> db-> get (); // Odpověď sql přiřadím poli $ array = array (); foreach ($ db-> result () as $ row): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> locality); endforeach; echo json_encode ($ pole); výstup; } 
Dále budeme muset vytvořit pohled, který zpracovává komba, a dynamicky přidávat příkazy jquery. Za tímto účelem vytvoříme ve složce zobrazení soubor s názvem dependent_combos.php.
 
Na závěr přejdeme k zobrazení a přidáme následující kód, který souvisí se zobrazením se souborem dependent_combos.php
 load-> view ('dependent_combos', $ combo_setup); }?> var13 -> 

Pokud tedy spustíme, můžeme vidět jak při přidávání nové vlastnosti, nebo při úpravách toho, jak spolu souvisela provincie a lokality a lokality, to závisí na provincii.

Pokud chceme vytvořit několik závislých komb, budeme muset udělat a zpětné volání pro každý pár komb.

Předpokládejme, že máme země, provincie a lokality a chceme vytvořit závislé země s provincií a provincie s městy, pak musíme pro každé závislosti vytvořit zpětné volání, například:

 $ crud-> callback_add_field (ID provincie, pole ($ this, 'cbk provincie')); $ crud-> callback_edit_field ('provincie id', pole ($ this, 'cbk provincie')); $ crud-> callback_add_field ('idlocalidad', pole ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities')); 
Pro země combo, a zpětné volání protože jako první v hierarchii nezávisí na jiném kombu.

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave