Qual è il modo migliore per creare menu dinamici basati su database in CakePHP?

StackOverflow https://stackoverflow.com/questions/613996

  •  03-07-2019
  •  | 
  •  

Domanda

Voglio visualizzare un menu su ogni pagina che viene eseguita da un database. Usare php appena down e sporco è facile ma voglio integrarlo con cakephp usando il loro sistema MVC. Ora la mia domanda è: qual è il modo migliore per farlo?

I miei pensieri sono di creare un elemento con il layout e quindi un componente o controller per tutta la logica. Qualche suggerimento su questo? O è un aiutante quello che voglio usare?

Devo anche ottenere tutti i dati da più tabelle nel database. È meglio eseguire tutta la mia logica di raccolta dei dati attraverso un modello? Oppure fai la maggior parte nel controller di menu (o componente) e usa i modelli per ogni tabella?

Grazie

Walter

È stato utile?

Soluzione

I modelli dovrebbero recuperare ed elaborare i dati dalla tabella che stanno modellando, quindi recuperare i dati del menu per ciascun modello in quel modello.

I componenti hanno lo scopo di ospitare la logica condivisa da più controller, quindi un componente di menu che viene utilizzato da tutti i controller suona come un buon posto per mettere il codice per recuperare i dati di menu dai modelli e metterli insieme.

Un menu è in genere un elenco nidificato, se questo è il caso anche del tuo menu, il modo più semplice per generare il markup è una funzione ricorsiva (una funzione che si chiama da sola) che emette un livello alla volta, quindi piuttosto che un elemento, creerei semplicemente un helper con un metodo menu () e lo chiamerei direttamente dal layout.

Altri suggerimenti

Sono d'accordo con la risposta di Neilcrooks, ma vorrei aggiungere alcune cose per chiarezza.

Gli helper e gli elementi sono piuttosto semplici, tranne per il fatto che gli helper possono essere un po 'più robusti (almeno, è così che penso a loro;)). Pertanto, se si utilizza un helper, è possibile associare e separare le associazioni dei modelli al volo, il che consentirà di acquisire dati dai modelli (temporaneamente) associati.

Personalmente, mi piacciono i modelli grassi e i controller skinny, quindi penso che se fossi in questa situazione, userei un aiutante e legherei temporaneamente i modelli ad esso. Tutti i dati che devo recuperare dai modelli esistenti sarebbero accessibili tramite le chiamate di tipo Model1- > fetchMenuPart (...).

Quindi puoi chiamare il tuo aiutante dai tuoi file di layout.

Non so perché questo non sia documentato da nessuna parte, ma l'ho appena trovato ieri sera. Le variabili per il layout o gli elementi devono essere definite con la fine _for_layout. Ad esempio: $ this- > set ('category_for_layout', $ this- > Category- > find ('all'));

Ho usato il metodo beforeFilter nella classe AppController, perché avevo bisogno di quel menu in ogni pagina.

Ecco un'ottima soluzione che ho scoperto durante la ricerca di questa cosa su Internet.

http://articles.classoutfit.com/cakephp-dynamic-navigation- bar /

Penso che useresti creare un elemento che conterrebbe l'html per il menu e quindi renderizzerebbe il menu nel tuo layout.

echo $this->element('your menu');

Per renderlo dinamico è necessario impostare i collegamenti di menu, magari come un array nel controller.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top