PHP Crud di generi alimentari - Casella correlata e dipendente / Combo a discesa

Sommario

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

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave