Temas por cliente em uma app grails
06/07/2012 18:11
0
Olá,

Como permitir o usuário selecionar um tema e trocar na aplicação a pasta de views de acordo com o tema selecionado.

Cada tema tem suas views, css e js, como fazer isso?
Tags: theme, tema, skin, views


0
Você pode ter na sua classe de usuário um atributo que defina o tema do usuário.

class Usuario {
...
def nome
def tema
...
}

Colocar cada tema em sua respectiva diretório, quando você for renderizar a página procura o tema que o usuário escolheu:

<link rel="stylesheet" href="${resource(dir:'css/' + usuarioInstance.tema,file:'default.css')}" >
06/07/2012 18:43


0
E as views?
06/07/2012 19:35


0
Se colocar o css no layout/main.gsp, não precisa se preocupar com as outras views.
06/07/2012 22:37


-2
Putz, você não entendeu.

Cada TEMA TERÁ SUAS VIEWS PRÓPRIAS!!!

Você já usou algum sistema na vida que use templates? temas?

Cada template/tema/skin/theme do site, terá uma pasta de views, outra de CSS, outra de SCRIPT e outra de IMAGENS.

Eu quero saber como fazer isso, quero ter 4 pastas diferentes por tema!!!

Abraços.
07/07/2012 00:06


0
Primeiro não precisa usar caixa alta na frase inteira pra me responder, havia entendido que vc iria elaborar os temas por css(1 css por tema) e as views seriam únicas.
Pra chamar views individuais por tema vc terá que fazer o seguinte.

1 - Estrutura dos diretórios, ex. cadastro de produto.:

grails-app/views/produto/tema1/*
grails-app/views/produto/tema3/*
grails-app/views/produto/tema2/*

2 - Na ação do controlador que ira chamar a edição de um produto e vc queria chamar
o edit.gsp:

def edit {

// Seu código
...

render(view: "${usuarioInstance.tema}/edit", model: [veiculoInstance: veiculoInstance])

/* Acessando da maneira acima o grails busca dentro de grails-app/views/produto/tema1/edit.gsp,
caso do tema do usuário seja o tema1, for tema2 em grails-app/views/produto/tema1/edit.gsp
e etc*/
}


3 - o Javascript vai ser semelhante ao css:

<g:javascript src="${usuarioInstance.tema}/meuscript.js" />
// Nesse caso ele pega o arquivo: web-app/js/tema1/meuscript.js



Espero ter esclarecido a sua dúvida.
07/07/2012 01:12


-1
Desculpe pela caixa alta então.

Saquei.

Mas esta é a forma mais prática? Não tem como fazer de uma forma mais automática?

Fazer o grails pegar todas as views de:

/views/theme1/produto/index.gsp

A sua solução é bem legal, porém fazer isso para cada action vai ser um trabalho braçal muito grande. Deve haver alguma configuração, ou alteração do caminho das views interna do grails, não?

Segundo o framework php que uso, o esquema seria assim:

Existe (views/tema1/product/index.gsp)?
-- sim: então carrega
-- não: Existe (views/product/index.gsp)?
---------- sim: então carrega
---------- não: erro, view não encontrada

Queria implementar esta lógica.

07/07/2012 03:56


1
Paulo, como regra básica do Grails Brasil é a gentileza ok?

O Mussatto não é obrigado a ser agredido só por ter tentado lhe ajudar.


1
Cara a forma 'mais' simples de fazer isso que vc quer é criando um Controlador e estende-lo nos outros controladores:

import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException

class ThemeController {

def renderTheme(def map) {
/*
* Faz antes uma forma de obter o usuarioInstance.
*/
def oldTemplate = map.template
map.template = "/$usuarioInstance.tema/$map.template"
try {
return render(map)
} catch(ControllerExecutionException e) {
map.template = oldTemplate
return render(map)
}
}

}


Agora invés de usar o render, use o renderTheme nos seus controladores, lembrando que sempre tem que dar um extends no ThemeController.
Vai ter que reescrever uma parte do seu código sim, caso encontre uma maneira melhor poste para o grupo.
É uma boa vc ler sobre templates do grails:
http://grails.org/doc/latest/ref/Command%20Line/install-templates.html
Vai facilitar o seu trabalho tbm.
09/07/2012 14:07




Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto