2010-03-06 6 views
6

Ich möchte meinen Benutzern die Möglichkeit geben, aus 5 verschiedenen Layouts auszuwählen, wie ihre öffentliche Seite angezeigt wird. Ich nehme an, ich brauche 5 verschiedene CSS-Dateien nach Layout und muss dann in stylesheet_link_tag übergebenBenutzern die Auswahl eines benutzerdefinierten Designs in Rails ermöglichen

Ich weiß nur, wie es mit if dann Anweisungen zu tun. Ich denke nicht, dass das der beste Weg ist. Jede Hilfe ... könnte es auch getan werden?

Dank

Antwort

11

Sie sollten das Layout speichern, die der Benutzer in den Session-Variablen ausgewählt hat (am einfachsten, aber verloren, wenn der Benutzer Cookies löscht oder verwendet einen anderen Computer), oder in Ihrer Datenbank.

Können sagen, die Stylesheets fünf Namen, die jeweils einer Farbe:

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

Platz diese Dateien innerhalb von public/stylesheets.

Shop die Auswahl des Benutzers von Sheet in die session[:style] Variable wie so:

session[:style] = 'green' 

Dieser Wert bleibt bestehen, solange der Benutzer seine Cookies nicht löscht.

Erstellen Sie in Ihren Layouts eine application.erb-Datei, falls noch keine vorhanden ist. Der Code in dieser Datei wird für jede Vorlage auf Ihrer Website gerendert. Es sollte eine Zeile wie <%= yield %> enthalten. In dieser Datei Ort der folgende:

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

Das ist es!

Viel Glück!

+0

Es tut mir leid, dass ich die Frage nicht richtig angegeben habe. Ich meine, lassen Sie den Benutzer wählen Sie ein Thema, das für ihre Seite persistent bleibt, egal wer ihre Seite besucht hat, nicht nur für sie. Aber, <% = stylesheet_link_tag session [: style] + '_ stylesheet'%> ist was ich gesucht habe. Ich denke, ich sollte dem Benutzer erlauben, Präferenzen im Profil zu setzen und dann einfach [: style] durch @ user.theme ersetzen? Wird das funktionieren? Danke –

4

Versuchen Sie zunächst, dem Benutzermodell (mithilfe von Migrationen) das Feld "Thema" hinzuzufügen.

Dann fügen Sie ein paar Links in einer Ansicht (Benutzereinstellungen):

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 

Öffentliches Profil des Controllers:

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

Layout:

<%=stylesheet_link_tag @theme %> 
Verwandte Themen