我想让我的用户能够从5种不同的布局中选择他们的公共页面的显示方式。我假设我需要5个不同的css文件根据布局,然后需要将其传递到stylesheet_link_tag允许用户在Rails中选择自定义主题
我只知道如何使用if then语句做到这一点。我不认为这是最好的方法。任何帮助......也可以这样做吗?
感谢
我想让我的用户能够从5种不同的布局中选择他们的公共页面的显示方式。我假设我需要5个不同的css文件根据布局,然后需要将其传递到stylesheet_link_tag允许用户在Rails中选择自定义主题
我只知道如何使用if then语句做到这一点。我不认为这是最好的方法。任何帮助......也可以这样做吗?
感谢
,可以储存用户在会话变量选择了布局(最简单的,但失去了当用户清除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'%>
这就是它!
祝你好运!
首先,尝试添加'主题'字段到用户的模型(使用迁移)。
然后加在一个视图中的某些环节(用户的设置):
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 %>
对不起,我没有正确说明问题。我的意思是让用户选择一个主题,不管是谁访问了他们的页面,而是他们的页面,而不仅仅是他们的页面。 但是,<%= stylesheet_link_tag session [:style] +'_ stylesheet'%>是我一直在寻找的东西。我想我应该允许用户在配置文件中设置首选项,然后用@ user.theme替换[:style]? 这会工作吗? 谢谢 – 2010-03-06 12:08:20