2010-03-06 62 views
6

我想让我的用户能够从5种不同的布局中选择他们的公共页面的显示方式。我假设我需要5个不同的css文件根据布局,然后需要将其传递到stylesheet_link_tag允许用户在Rails中选择自定义主题

我只知道如何使用if then语句做到这一点。我不认为这是最好的方法。任何帮助......也可以这样做吗?

感谢

回答

11

,可以储存用户在会话变量选择了布局(最简单的,但失去了当用户清除cookies,或使用不同的计算机),或在你的数据库。

可以说样式表有五个名字,每个对应一个颜色:

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

将这些文件public/stylesheets.

Store的用户选择样式表的内部划分,像这样的session[:style]变量:

session[:style] = 'green' 

只要用户没有清除他们的cookie,该值就会一直存在。

在布局中创建application.erb文件(如果尚不存在)。该文件中的代码将针对您网站上的每个模板进行渲染。它应该包含一条线,如<%= yield %>。在这个文件中放置以下:

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

这就是它!

祝你好运!

+0

对不起,我没有正确说明问题。我的意思是让用户选择一个主题,不管是谁访问了他们的页面,而是他们的页面,而不仅仅是他们的页面。 但是,<%= stylesheet_link_tag session [:style] +'_ stylesheet'%>是我一直在寻找的东西。我想我应该允许用户在配置文件中设置首选项,然后用@ user.theme替换[:style]? 这会工作吗? 谢谢 – 2010-03-06 12:08:20

4

首先,尝试添加'主题'字段到用户的模型(使用迁移)。

然后加在一个视图中的某些环节(用户的设置):

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

控制器:

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

公开信息的控制器:

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

布局:

<%=stylesheet_link_tag @theme %> 
相关问题