In Kohana (framework PHP) il layout viene implementato tramite Template_Controller che contiene una variabile membro chiamata $ template, che funge da visualizzazione layout. Quindi nel metodo azione è possibile popolare il modello $ con ulteriori sottovoci, in genere la vista del contenuto. (http://forum.kohanaframework.org/discussion/3612/kohana-layout-system/p1)Modifica del modello di layout in runtime
Ciò mi consente di modificare il layout "tema" nel runtime. È utile per il sistema multi-tenant, in cui un inquilino può selezionare il proprio tema (due colonne, tre colonne ecc.)
Come posso ottenerlo in Playframework 2 Scala con il motore di template di Scala? In altre parole, mi piacerebbe avere più modelli di layout in cui un tenant può scegliere. Il controller quindi esegue il rendering del modello di layout e del modello di contenuto specifico dell'azione.
Qualcosa di simile (del controller azione pseudocodice):
- in base all'utente, recuperare il tema di layout (un nome memorizzato nella stringa in un database, e si è vista corrispondente file di mapping).
- Renderizza la visualizzazione del contenuto specifico dell'azione.
- Renderizza la vista layout ottenuta da (1) insieme a (2).
Nota: per ogni azione, il tema di layout può cambiare per utente ma la visualizzazione del contenuto rimane la stessa.
nella sua documentazione (http://www.playframework.com/documentation/2.1.1/ScalaTemplateUseCases)
il modello di contenuto, ad esempio, l'index.scala.html, include una chiamata alla principale che è definito nella main.scala.html, il modello di layout. In altre parole, è hard coded, quindi index.scala.html è strettamente associato a main.scala.html.
Ho pensato di chiamare il principale dal controller utilizzando la reflection e quindi passando il contenuto.
Un'alternativa sarebbe utilizzare un motore di modelli interpretato come Scalate.
Qualche suggerimento?