Alterar propriedades de um arquivo .css através de informações fornecidas em um formulário

7 respostas
F

Gostaria de algumas dicas ou sugestões de qual maneira eu posso proceder para realizar o meu problema… pois estou meio sem rumo…

Eu gostaria de, em um formulário, fazer algumas perguntas para o cliente… perguntas do tipo:
Qual a cor fundo da sua página?
Qual a cor da fonte desejada?
Qual o tamanho da fonte?
Qual a cor da borda do menu?

E então eu forneço algumas opções para ele escolher…

Ao submeter o formulário, eu gostaria que o arquivo .css disponível no servidor fosse atualizado para aquelas opções que o cliente selecionou…

Mas estou sem direção…
O arquivo .css já irá existir, então acho que devo submeter o formulário para um servlet que acessa as propriedades deste .css e grava as novas informações no mesmo…

Abrir e acessar o arquivo não seria o problema, eu acho, mas e como alterar os valores das propriedades???

Alguém um dia já fez algo parecido, ou sabe de algo que pode me ajudar???

Agradeço a todos!!

7 Respostas

peron

bom, você pode fazer de várias formas…

uma seria você criar um .css só com essas opções, e os outros css herdarem desse, assim vc reescreve o arquivo todo sem problemas.

agora se vc realmente quer modificar o arquivo, você terá que criar um parser para ler o conteudo do atual e escrever novamente, já modificado, ou no arquivo original, criar chaves para um replace futuro.

algo como

.fundo {
  background-color: $$fundo$$;
}

aí é um simples string replace.

Espero ter ajudado…

sds

F

Ajudou sim…

Mas gostaria de algumas dicas de código… tipo:

O usuário passou cor de fundo azul e cor da fonte branca e tamanho 12…

Como vou escrever isso dentro do css através de programação???

Digamos que o arquivo seja estiloCliente.css… como abrirei o arquivo e substituirei o valor da propriedade background-color por exemplo que no modelo era branco, pela seleçcão do cliente que foi azul???

Esta questão de herança de css me parece bem interessante… não tinha pensado nisso, mas não me surgem idéias de como proceder para realizar isso…

T

Não sei se isso funciona direito (problemas de caching etc.) , mas que tal fazer com que o .css seja gerado por um servlet ou JSP?
Assim você poderia fazer todas as customizações possíveis, para cada usuário, sem ter de reinventar a roda.
Em vez de você usar algo como

<style type="text/css">@import url( /templates/default/styles/style.css?1191991622780 );</style>

você pode usar algo como

<style type="text/css">@import url( /templates/default/styles/style.jsp?bla=ble&bli=blo );</style>
peron

thingol:
Não sei se isso funciona direito (problemas de caching etc.) , mas que tal fazer com que o .css seja gerado por um servlet ou JSP?
Assim você poderia fazer todas as customizações possíveis, para cada usuário, sem ter de reinventar a roda.

Eu fui na prerrogativa (bonita essa palavra) de que ele iria gravar o arquivo e seria uma customização geral, para todos os usuários. Caso seja por usuário e dinâmico, concordo plenamente com sua abordagem.

Uso muito aqui isso que você citou, com PHP e Smarty, onde posso facilmente misturar arquivo fixo com css dinâmico e o mesmo possui template caching então não sobrecarrega o server (tanto assim).

Em java com certeza, dá pra otimizar bem mais.

Saudações

F

Parece perfeito!

Mas e será que funciona? Não sei se meus conhecimentos são suficientes para realizar tal tarefa…

Mas irei atrás…

Se houver algum material que pode ajudar…

F

Há disponível algum exemplo prático para algo parecido com isso, onde possa formular a resolução do meu problema?

C

thingol:
Não sei se isso funciona direito (problemas de caching etc.) , mas que tal fazer com que o .css seja gerado por um servlet ou JSP?
Assim você poderia fazer todas as customizações possíveis, para cada usuário, sem ter de reinventar a roda.
Em vez de você usar algo como

<style type="text/css">@import url( /templates/default/styles/style.css?1191991622780 );</style>

você pode usar algo como

<style type="text/css">@import url( /templates/default/styles/style.jsp?bla=ble&bli=blo );</style>

Thingol, acho que funciona sim, pois eu já fiz isso com arquivo .js, mas como você disse, tem que renomear para .jsp.
Agora, eu gostaria de saber se existe algum modo de dizer para o Servlet Container interpretar como um jsp arquivos cuja extensão seja diferente de jsp. Acho que só criando um Servlet e redirecionando para o .jsp (no browser o acesso ficaria com a “extensão” do Servlet.)

E complementando: para evitar o cache utilizar algo como:

<%
	// Set to expire far in the past.
	response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
	// Set standard HTTP/1.1 no-cache headers.
	response.setHeader("Cache-Control","no-store, no-cache, must-revalidate");
	// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
	response.addHeader("Cache-Control", "post-check=0, pre-check=0");
	// Set standard HTTP/1.0 no-cache header.
	response.setHeader("Pragma", "no-cache");
%>

Isso funciona no caso do .js.

Criado 19 de outubro de 2007
Ultima resposta 19 de out. de 2007
Respostas 7
Participantes 4