2010-03-06 14 views
6

Quiero darles a mis usuarios la capacidad de elegir cómo se mostrará su página pública desde 5 diseños diferentes. Supongo que necesitaré 5 archivos css diferentes de acuerdo con el diseño y luego tendré que pasarlo a stylesheet_link_tagPermitir a los usuarios elegir un tema personalizado en Rails

Solo sé cómo hacerlo utilizando instrucciones if then. No creo que sea la mejor manera. Cualquier ayuda ... ¿también podría hacerse?

Gracias

Respuesta

11

debe almacenar el diseño que el usuario ha elegido en la variable de sesión (el más fácil, pero perdió cuando el usuario borra las cookies o utiliza un equipo diferente), o en su base de datos.

digamos que las hojas de estilo tienen cinco nombres, cada uno correspondiente a un color:

blue_stylesheet.css 
green_stylesheet.css 
red_stylesheet.css 
orange_stylesheet.css 
white_stylesheet.css 

Coloque estos archivos dentro de public/stylesheets.

tienda elección del usuario de la hoja de estilo en la variable session[:style] así:

session[:style] = 'green' 

Este valor persistirá mientras el usuario no borre sus cookies.

Cree un archivo application.erb en sus diseños si aún no existe uno. El código en este archivo se representará para cada plantilla en su sitio. Debe contener una línea como <%= yield %>. En este lugar el siguiente archivo:

<%=stylesheet_link_tag session[:style]+'_stylesheet'%>

eso es todo!

¡Buena suerte!

+0

Disculpa, no formulé la pregunta correctamente. Quise decir que el usuario eligió un tema que persistirá para su página sin importar quién visitó su página, no solo para ellos. Pero, <% = stylesheet_link_tag session [: style] + '_ stylesheet'%> es lo que estaba buscando. Supongo que debería permitir que el usuario establezca preferencias en el perfil y luego simplemente reemplace [: style] con @ user.theme? ¿Funcionará eso? Gracias –

4

Primero, intente agregar el campo 'tema' al modelo del usuario (usando migraciones).

A continuación, añadir algunos enlaces en una vista (ajustes de usuario):

link_to 'Change to green theme', :controller => "user", :action => "set_theme", :id => "green"

controlador:

def set_theme 
    # don't forget to check, is there a theme with such params 
    current_user.update_attributes :theme => params[:id] 
end 
controlador

de perfil público:

def public_profile 
    @theme = 'default' 
    user = User.find(params[:user_id]) # profile's owner 
    @theme ||= user.theme # overriding default theme to custom one 
end 

diseño:

<%=stylesheet_link_tag @theme %> 
Cuestiones relacionadas