Grocery Crud PHP - Свързана и зависима кутия / падащо меню

Съдържание

Бяхме споменали в друг урок как да започнем разработката Grocerycrud да се Codeigniter PHP, по -нататък ще видим как да направим няколко комбинирано поле или падащо меню те са свързани помежду си и зависят един от друг.

Нека видим пълен пример с база данни, наречена недвижими имоти, структурата ще бъде следната:

Структура на таблицата за масата `недвижими имоти`

 СЪЗДАЙТЕ ТАБЛИЦА, АКО НЯМА „недвижими имоти“ („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 КАРТЕТА ПО УМОЛЧАНЕ = latin1; СЪЗДАЙТЕ ТАБЛИЦА, АКО НЯМА „местности“ („идентификатор на град“ int (11) NOT NULL, „locality“ varchar (200) DEFAULT NULL, „province id“ int (11) DEFAULT „0“) ENGINE = MyISAM AUTO_INCREMENT = 3604 ПО подразбиране ШАРСЕТ = utf8; СЪЗДАЙТЕ ТАБЛИЦА, АКО НЕ СЪЩЕСТВА `потребители` (` userid` int (11) NOT NULL, `name` varchar (150) NOT NULL DEFAULT '') ДВИГАТЕЛ = MyISAM AUTO_INCREMENT = 161 КАРТИЦА ПО УМОЛЧЕНИЕ = latin1; CREATE TABLE IF NOT EXISTS `propertytype` (` propertytypeid` int (6) NOT NULL, `propertytype` varchar (150) NOT NULL DEFAULT '') ДВИГАТЕЛ = MyISAM AUTO_INCREMENT = 15 КОРОЛКА ПО УМОЛЧЕНИЕ = latin1; СЪЗДАЙТЕ ТАБЛИЦА, АКО НЕ СЪЩЕСТВА "провинции" (`idprovince` int (11) NOT NULL,` province` varchar (255) COLLATE latin1_spanish_ci DEFAULT NULL) ENGINE = MyISAM AUTO_INCREMENT = 32 DEFAULT CHARSET = latin1 COLLATE = latin1_ 
Можем да изпълним докрай phpmyadmin диаграма на отношенията, която ще бъде следната:

В предишния урок видяхме как да инсталирате и конфигурирате Grocerycrud, тук ще създадем приложението, създаваме контролера Inmo.php

 зареждане-> база данни (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } индекс на публична функция () {$ crud = new grocery_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('недвижими имоти'); $ output = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 -> 
След това създаваме изгледа, който ще извикаме Listainmo.php, CSS и JQuery файловете ще ги вземат от конфигурацията на Суровина за хранителни стоки затова ги изброяваме само тук:
 
Резултатът при изпълнение на мрежата в браузър http: // localhost / pro… os / inmobi / Inmo /

Можем да видим, че id показва номера вместо данни, това е така, защото таблиците не са свързани, за да ги свържат, ще направим следното, в контролера по -долу set_table ще посочим.

 $ crud-> set_relation ('gorelating', 'tablerelating', 'showfield');
Като пример искам да покажа потребителското име на потребителската таблица с Потребителски идентификатор от таблицата с недвижими имоти ще трябва да напиша следния код:
 $ crud-> set_relation ('userid', 'users', 'name');
В резултат на изпълнението ще видим, че вместо това има число в потребителски идентификатор ни показва името.

След това ще изброим полетата, провинцията и местностите.

 $ crud-> set_relation ('propertytype id', 'propertytype', 'propertytype'); $ crud-> set_relation ('провинция id', 'провинции', 'провинция'); $ crud-> set_relation ('идентификатор на местността', 'местности', 'местност'); 
След изпълнението ще видим отивам със съответните им отношения:

В случай на изображения, които трябва да използваме

 $ crud-> set_field_upload (поле, 'imagepath');
Така че ще използваме една и съща директория за хранителни стоки, за да запазваме изображения
 $ crud-> set_field_upload ('снимка', 'активи / качвания / файлове');
Въпреки че можем да покажем свързаните полета и комбинации в списъка, те не са зависими, ние искаме при избора на провинция в провинциалната комбинация комбото за местности да се активира автоматично и да се запълни с местоположенията на тази провинция, ние също искаме тази връзка се поддържа, когато добавяме свойство или когато го редактираме.

За да направим комбинациите зависими, ще използваме функция за обратно повикване. А обратно повикване o Обратното обаждане е алтернатива на полиморфизма, това беше тема, която разгледахме в друг урок, за да знаем как да приложим класовете:

Класове и полиморфизъм с PHP

Когато функция е зададена като параметър друга функция, функция от по-ниско ниво. А обратно повикване може да действа, когато се добави запис или когато се промени. Този метод позволява чудесно повторно използване на код.

Изявлението за обратно повикване може да бъде следното в контролера.

 $ crud-> callback_add_field ('име за обратно повикване', масив (параметри));
В този случай обратното повикване ще бъде idlocalidad и функцията ще бъде cbklocalidades
 $ crud-> callback_add_field ('idlocalidad', масив ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', масив ($ this, 'cbklocalities')); 
След това създаваме функцията cbклокации което ще бъде извикването ни при добавяне или редактиране на запис.
 // Обратно извикване, което генерира комбинираната функция idlocalidades cbklocalidades () {// създаваме комбинацията $ combo = ''; $ fincombo = ''; // Взимаме идентификатора на свойството, ако е изпратен като параметър от url $ idinmuebleurl = $ this-> uri-> segment (4); // Проверяваме операцията, която правим, ако добавим или редактираме $ crud = new grocery_CRUD (); $ state = $ crud-> getState (); // Ако редактираме и идентификационният номер на свойството не е празен if (isset ($ idinmuebleurl) && $ state == "edit") {// консултираме се с провинцията и текущото местоположение на свойството $ this-> db-> изберете ('idprovincia, idlocalidad') -> от ('свойства') -> къде ('idinmueble', $ idinmuebleurl); $ db = $ this-> db-> get (); $ ред = $ db-> ред (0); $ провинция id = $ ред-> провинция идентификатор; $ idlocality = $ row-> idlocality; // Зареждаме комбото с всички местоположения на провинцията $ this-> db-> select ('*') -> from ('localities') -> where ('id на провинция', $ province id); $ db = $ this-> db-> get (); // Ако намерим идентификатора на текущото местоположение, го поставяме като избрано // в противен случай продължаваме да зареждаме другите местоположения за всеки ($ db-> result () като $ ред): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo. = 'idlocality.' "selected =" selected "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Връщаме заредената комбинация return $ combo. $ Fincombo; } else {return $ combo. $ fincombo; }} 
След това трябва да създадем функцията за търсене на местоположения, която ние посочваме като функция за заявка в Callback:
 // Заявка на местоположения функция searchlocalities () {// Взимам идентификатора на провинцията, който е изпратен като параметър от url при избор // провинция от комбинираната провинция id $ province id = $ this-> uri-> segment (3); // Консултирам населените места според избраната провинция $ this-> db-> select ("*") -> from ('localities') -> where ('id на провинция', $ province id); $ db = $ this-> db-> get (); // Присвоявам sql отговора на масив $ array = array (); foreach ($ db-> резултат () като $ ред): $ array [] = array ("value" => $ row-> idlocality, "property" => $ row-> localality); endforeach; ехо json_encode ($ масив); изход; } 
След това ще трябва да създадем изглед, който обработва комбинациите и да добавя динамично изразите jquery.За това ще създадем в папката на изглед файл, наречен depend_combos.php.
 
За да завършим, отиваме към изгледа и добавяме следния код, който свързва изгледа с файла depend_combos.php
 load-> view ('depend_combos', $ combo_setup); }?> var13 -> 

Тогава, ако изпълним, можем да видим както когато добавяме ново свойство, така и когато редактираме как комбинациите от провинция и местности са свързани и местности, това зависи от провинцията.

Ако искаме да направим няколко зависими комбинации, ще трябва да направим a обратно повикване за всяка двойка комбинации.

Да предположим, че имаме държави, провинции и населени места и искаме да направим зависими държави с провинция и провинции с градове, тогава трябва да създадем обратно повикване за всяка зависимост например:

 $ crud-> callback_add_field (идентификатор на провинция, масив ($ this, 'cbk province')); $ crud-> callback_edit_field ('провинция id', масив ($ this, 'cbk провинция')); $ crud-> callback_add_field ('idlocalidad', масив ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', масив ($ this, 'cbklocalities')); 
За комбинираните държави а обратно повикване тъй като е първият в йерархията, той не зависи от друга комбинация.

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave