La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 8 ]

rdp

Topic: Menu dinamico

Ciao ragazzi,

ho iniziato ad interessarmi a Cakephp da pochissimo, e, provando a sviluppare una mia applicazione ho incontrato subito la prima difficoltà; anzi, più che difficoltà è un dubbio e mi chiedevo se qualcuno di voi potesse consigliarmi.

Vi espongo il problema: ho un menu da creare in base a dei records memorizzati su una tabella in un db. Fin qui nulla di strano. Creo la tabella e creo il modello. Poi mi blocco. Il dubbio è... Qual'è la strada migliore per fare in modo che il menu venga visualizzato su ogni pagina (leggi ogni action e ogni controller che creerò), senza creare un ulteriore controller? In pratica vorrei creare 'automaticamente' il menu sul layout, in base a quello che leggo dal db e alla pagina in cui mi trovo (leggi controller).

ringrazio chiunque cercherà di decifrare quello che ho scritto big_smile e di aiutarmi...

ToX

Re: Menu dinamico

non sono sicuro di aver capito, comunque io mi creerei una funzione nel controller (per recuperare i dati dal db) e la richiamerei da un element (che si occupa di impaginarli)... a questo punto fai il renderElement direttamente dal layout e sei a posto...

rdp

Re: Menu dinamico

Grazie ToX, avevo pensato ad una cosa del genere, ma poi il controller non diventa disponibile anche come URL? Dovrei quindi renderlo indisponibile (ho letto un tutorial sull'argomento)... non c'è un altro metodo?

Cerco di spiegarmi meglio...

Ho un sito che ha una barra di navigazione; ogni voce di menu mi porta ad un controller. Ovviamente questa barra di menu deve essere presente su tutte le pagine del sito. Detto questo, avendo una tabella su DB e un relativo model, come posso fare in modo che ogni controller riesca a leggere il menu e immagazzinarlo in un array in modo che dal layout possa fare una semplice funzione che mi crea il menu dato l'array? Devo necessariamente creare un controller per il menu? E se lo creo, come faccio a renderlo disponibile su ogni altro controller?

In sostanza, come fate voi a creare menu dinamici il cui controller non ha bisogno di essere raggiungibile da URL? smile

Forse mi sono spiegato meglio... mmm... chissà... big_smile

ToX

Re: Menu dinamico

se non sbaglio (ne ho implementato uno tempo fa ma non ricordo come) per rendere una funzione di un controller non disponibile dall'esterno devi darle un nome tipo __nomefunzione

però potrei sbagliarmi

Saiborg

Re: Menu dinamico

rdp wrote:

In sostanza, come fate voi a creare menu dinamici il cui controller non ha bisogno di essere raggiungibile da URL? smile

Forse mi sono spiegato meglio... mmm... chissà... big_smile

Mmm penso ci siamo fatti quasi tutti prima o poi questa domanda.
A quanto ho capito il metodo più utilizzato è:
- in un controller (già esistente o nuovo a seconda della situzione) ti crei la action che recupera i dati che ti servono per il menu dal modello e li ritorna (mettiamo che hai un controller 'MenusController' con una action chiamata 'mainmenu').
- crei un Element in views/elements che recupera i dati con $this->requestAction('menus/mainmenu') e li formatta come preferisci.
- nel layout fai un renderElement dove vuoi che compaia il menu.

In questo modo non ti serve nemmeno creare una vista per l'action 'mainmenu' e quindi se tenti di accedervi direttamente da browser dovrebbe tornarti un errore 404 (questo quando sei in produzione, se sei ancora in debug ti dirà l'errore tipo "Missing view")

Last edited by Saiborg (16-07-2008 10:16:40)

rdp

Re: Menu dinamico

Capito...

Farò un pò di prove e vi farò sapere! wink

Grazie smile

rdp

Re: Menu dinamico

Grazie ai vostri suggerimenti, ho trovato questo articolo che potrebbe essere utile anche agli altri utenti... smile

Saiborg

Re: Menu dinamico

Mmmm... in effetti ho il manuale vecchio stampato su carta che è un po' fuorviante sull'argomento.
Ho controllato e la nuova documentazione spiega precisamente come fare quello che chiedi te, ed è proprio quel che è scritto nel tutorial da te linkato, quindi segui quello alla lettera.

In particolare quel che è da notare è che il metodo requestAction non è specifico della classe Controller (però si ostinano a metterlo nel capitolo sui Controller tongue) ma di Object, quindi lo si può chiamare ovunque, e in effetti è più comodo e pulito chiamarlo da dentro l'element....correggo il mio post.

Posts [ 8 ]

Guest posting is disabled. You must login or register to post a reply.

Pages: 1

Topic info

0 guests and 0 users are reading this topic now


Forum quick jump menu

Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB

[ Generated in 0.033 seconds, 12 queries executed ]