Avevamo menzionato in un altro tutorial come iniziare lo sviluppo con Grocerycrud a Codice accenditore PHP, poi vedremo come farne diversi casella combinata o menu a discesa sono collegati tra loro e dipendono l'uno dall'altro.
Vediamo un esempio completo con un Database chiamato Real Estate, la struttura sarà la seguente:
Struttura del tavolo per il tavolo `immobiliare`
CREATE TABLE IF NOT EXISTS `real estate` (` 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; CREATE TABLE IF NOT EXISTS `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; 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 = latin1_spanish_ci;Possiamo esibirci attraverso phpmyadmin un diagramma di relazione che sarà il seguente:
Nel tutorial precedente abbiamo visto come installare e configurare Grocerycrud, qui creeremo l'applicazione, creeremo il controller Inmo.php
carica-> database (); $ this-> load-> helper ('url'); $ this-> load-> model ('grocery_crud_model'); $ this-> load-> library ('Grocery_CRUD'); } indice di funzione pubblica () {$ crud = new drogheria_CRUD (); $ crud-> set_theme ('flexigrid'); $ crud-> set_table ('immobiliare'); $ output = $ crud-> render (); $ this-> load-> view ('immolist', $ output); }}?> var13 ->Quindi creiamo la vista che chiameremo Listainmo.php, i file CSS e JQuery li prenderanno dalla configurazione di Drogheria Crud quindi li elenchiamo solo qui:
Il risultato durante l'esecuzione del Web in un browser http: // localhost / pro… os / inmobi / Inmo /
Possiamo vedere che l'id mostra numeri invece di dati questo perché le tabelle non sono correlate per metterle in relazione faremo quanto segue, nel controller sotto set_table indicheremo.
$ crud-> set_relation ('gorelation', 'tablerelation', 'showfield');Ad esempio voglio mostrare il nome utente della tabella utente, con il ID utente dalla tabella immobiliare poi dovrò scrivere il seguente codice:
$ crud-> set_relation ('userid', 'users', 'name');Come risultato dell'esecuzione vedremo che invece un numero in ID utente ci mostra il nome.
Successivamente elencheremo i campi, la provincia e le località.
$ crud-> set_relation ('id tipoproprietà', 'tipoproprietà', 'tipoproprietà'); $ crud-> set_relation ('id provincia', 'province', 'provincia'); $ crud-> set_relation ('id località', 'località', 'località');Dopo l'esecuzione vedremo il andare con le rispettive relazioni:
Nel caso delle immagini dobbiamo usare
$ crud-> set_field_upload (campo, 'imagepath');Quindi useremo la stessa directory crud di Grocery per salvare le immagini
$ crud-> set_field_upload ('foto', 'risorse/caricamenti/file');Sebbene possiamo mostrare i campi e le combo correlati nell'elenco, non sono dipendenti, vogliamo che quando si seleziona una provincia nella combinazione di provincia, la combinazione di località si attivi automaticamente e sia riempita con le località di quella provincia, vogliamo anche tale relazione viene mantenuta quando aggiungiamo una proprietà o quando la modifichiamo.
Per rendere dipendenti le combo utilizzeremo una funzione di callback. UN richiama o il callback è un'alternativa al polimorfismo, questo era un argomento che abbiamo trattato in un altro tutorial per sapere come implementare le classi:
Classi e polimorfismo con PHP
Quando una funzione è assegnata come parametro un'altra funzione, una funzione di livello inferiore. UN richiama può agire quando viene aggiunto un record o quando viene modificato. Questo metodo consente un ottimo riutilizzo del codice.
L'istruzione di una richiamata può essere la seguente nel controller.
$ crud-> callback_add_field ('callbackname', Array (parametri));In questo caso il callback sarà idlocalidad e la funzione sarà cbklocalidades
$ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities'));Quindi creiamo la funzione cbklocations che sarà il nostro callback invocato quando aggiungiamo o modifichiamo un record.
// Callback che genera la funzione combo idlocalidades cbklocalidades() {// creiamo la combo $ combo = ''; $ fincombo = ''; // Prendiamo l'id della proprietà se è stato inviato come parametro da url $ idinmuebleurl = $ this-> uri-> segment (4); // Verifichiamo l'operazione che stiamo facendo se aggiungiamo o modifichiamo $ crud = new drogheria_CRUD (); $ stato = $ crud-> getState (); // Se stiamo modificando e l'id della proprietà non è vuoto if (isset ($ idinmuebleurl) && $ state == "edit") {// consultiamo la provincia e la posizione corrente della proprietà $ this-> db-> select ( 'idprovincia, idlocalidad') -> from ('proprietà') -> dove ('idinmueble', $ idinmuebleurl); $ db = $ questo-> db-> get (); $ riga = $ db-> riga (0); $ id provincia = $ riga-> id provincia; $ idlocality = $ riga-> idlocality; // Carichiamo la combo con tutte le località della provincia $ this-> db-> select ('*') -> from ('localities') -> where ('identificativo provincia', $ id provincia); $ db = $ questo-> db-> get (); // Se troviamo l'id della posizione corrente lo mettiamo come selezionato // altrimenti continuiamo a caricare le altre posizioni foreach ($ db-> result() come $ row): if ($ row-> idlocalidad == $ idlocalidad ) {$ combo . = 'idlocality.' "selected =" selezionato "> '. $ row-> locale.' ';} else {$ combo. =' idlocality. '">'. $ row-> locale. ' '; } endforeach; // Restituiamo la combo caricata return $ combo $ Fincombo; } else {return $ combo $ fincombo; }}Successivamente, dobbiamo creare la funzione di ricerca delle posizioni, che è ciò che indichiamo come funzione di query all'interno del Callback:
// Query localities function searchlocalities () {// Prendo l'id della provincia che è stato inviato come parametro dall'URL durante la selezione // una provincia dalla combo province id $ province id = $ this-> uri-> segment (3); // consulto le località in base alla provincia selezionata $ this-> db-> select ("*") -> from ('localities') -> where ('id provincia', $ id provincia); $ db = $ questo-> db-> get (); // assegno la risposta sql a un array $ array = array (); foreach ($ db-> risultato () come $ riga): $ array [] = array ("valore" => $ riga-> idlocality, "proprietà" => $ riga-> località); endforeach; echo json_encode ($ array); Uscita; }Successivamente dovremo creare la vista che elabora le combo e aggiungere dinamicamente le istruzioni jquery.Per questo creeremo nella cartella della vista un file chiamato combo_dipendenti.php.
Per finire andiamo alla vista e aggiungiamo il seguente codice che mette in relazione la vista con il file combo_dipendenti.php
carica-> vista ('combo_dipendenti', $ combo_setup); }?> var13 ->
Quindi, se eseguiamo, possiamo vedere sia quando aggiungiamo una nuova proprietà sia quando modifichiamo come sono state correlate le combinazioni di provincia e località e località, dipende dalla provincia.
Se vogliamo fare più combo dipendenti dovremo fare un richiama per ogni coppia di combo.
Supponiamo di avere paesi, province e località e di voler rendere dipendenti paesi con provincia e province con città, quindi dobbiamo creare un callback per ogni dipendenza ad esempio:
$ crud-> callback_add_field (ID provincia, array ($ this, 'cbk province')); $ crud-> callback_edit_field ('id provincia', array ($ this, 'cbk provincia')); $ crud-> callback_add_field ('idlocalidad', array ($ this, 'cbklocalidades')); $ crud-> callback_edit_field ('idlocality', array ($ this, 'cbklocalities'));Per la combinazione di paesi, a richiama poiché essendo il primo nella gerarchia non dipende da un'altra combo. Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo