2010-03-06 14 views
6

Desidero dare ai miei utenti la possibilità di scegliere come visualizzare la loro pagina pubblica da 5 layout diversi. Presumo che avrò bisogno di 5 diversi file CSS in base al layout e quindi devo passarlo in stylesheet_link_tagPermettere agli utenti di scegliere un tema personalizzato in Rails

So solo come farlo usando se poi affermazioni. Non credo che sia il modo migliore. Qualsiasi aiuto ... potrebbe anche essere fatto?

Grazie

risposta

11

è necessario memorizzare il layout che l'utente ha scelto nella variabile di sessione (più facile, ma ha perso quando l'utente cancella i cookie o utilizza un computer diverso), o nel database.

Diciamo che i fogli di stile hanno cinque nomi, ciascuno corrispondente ad un colore:

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

Posizionare questi file all'interno di public/stylesheets.

Conservare scelta dell'utente del foglio di stile nella variabile session[:style] in questo modo:

session[:style] = 'green' 

Questo valore persisterà per tutto il tempo in cui l'utente non cancella i propri cookie.

Creare un file application.erb nei propri layout se uno non esiste già. Il codice in questo file verrà reso per ogni modello sul tuo sito. Dovrebbe contenere una riga come <%= yield %>. In questo luogo il file seguente:

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

Questo è tutto!

Buona fortuna!

+0

Mi dispiace non aver indicato correttamente la domanda. Intendevo lasciare che l'utente scelga un tema che persisterà per la sua pagina, indipendentemente da chi ha visitato la sua pagina, non solo per loro. Ma, <% = stylesheet_link_tag session [: style] + '_ stylesheet'%> è quello che stavo cercando. Suppongo che dovrei consentire all'utente di impostare le preferenze nel profilo e quindi sostituire semplicemente [: style] con @ user.theme? Funzionerà? Grazie –

4

Innanzitutto, provare ad aggiungere il campo "tema" al modello dell'utente (utilizzando le migrazioni).

Quindi aggiungere alcuni collegamenti in vista (impostazioni degli utenti):

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

Controller:

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

Profilo pubblico:

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

disposizione:

<%=stylesheet_link_tag @theme %> 
Problemi correlati