2010-03-06 44 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 %> 
相關問題