我想讓我的用戶能夠從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