2010-03-06 6 views
6

Je souhaite donner à mes utilisateurs la possibilité de choisir l'affichage de leur page publique à partir de 5 mises en page différentes. Je suppose que je vais avoir besoin de 5 fichiers CSS différents selon la disposition et ensuite besoin de passer dans stylesheet_link_tagAutoriser les utilisateurs à choisir un thème personnalisé dans Rails

Je sais seulement comment le faire en utilisant les instructions alors. Je ne pense pas que ce soit le meilleur moyen. Toute aide ... pourrait-elle aussi être faite?

Merci

Répondre

11

Vous devez stocker la mise en page que l'utilisateur a choisi dans la variable de session (plus facile, mais il a perdu lorsque l'utilisateur efface les cookies ou utilise un autre ordinateur), ou dans votre base de données.

Disons que les feuilles de style ont cinq noms, chacun correspondant à une couleur:

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

Placez ces fichiers à l'intérieur de public/stylesheets.

Magasin choix de stylesheet dans la variable session[:style] de l'utilisateur comme ceci:

session[:style] = 'green' 

Cette valeur persistera tant que l'utilisateur n'effacera pas ses cookies.

Créez un fichier application.erb dans vos mises en page s'il n'en existe pas déjà un. Le code dans ce fichier sera rendu pour chaque modèle sur votre site. Il devrait contenir une ligne comme <%= yield %>. Dans ce lieu de fichier les éléments suivants:

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

Ca y est!

Bonne chance!

+0

Je suis désolé de ne pas avoir correctement répondu à la question. Je voulais dire laisser l'utilisateur choisir un thème qui persistera pour leur page, peu importe qui a visité leur page, pas seulement pour eux. Mais, <% = stylesheet_link_tag session [: style] + '_ stylesheet'%> est ce que je cherchais. Je suppose que je devrais permettre à l'utilisateur de définir des préférences dans le profil, puis remplacer simplement [: style] par @ user.theme? Cela fonctionnera-t-il? Merci –

4

D'abord, essayez d'ajouter le champ 'thème' au modèle de l'utilisateur (en utilisant les migrations).

Puis ajouter des liens dans une vue (les paramètres de l'utilisateur):

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 

contrôleur de profil public:

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

mise en page:

<%=stylesheet_link_tag @theme %> 
Questions connexes