2012-03-27 47 views
6

我有一個網站與客戶。每個客戶都可以擁有自己的主題,當某個客戶的用戶登錄時,必須加載公司主題。在application.css.scss中,我對每個公司都有這樣的一行:有條件加載樣式表

@import "_theme_x.css.scss"; 
@import "_theme_y.css.scss"; 
@import "_theme_z.css.scss"; 

如何只加載theme_x當公司x的用戶登錄並且不加載theme_y和theme_z?或者有更好的方法來做到這一點?謝謝!

回答

7

如果主題很大,您可能想要將它們與應用程序分開on.css並在您的佈局中有條件地加載它們。舉例來說,如果你有一個application_helper助手theme_stylesheet返回客戶端使用的主題名稱:

# application.html.erb 
<%= stylesheet_link_tag 'application', theme_stylesheet %> 

如果他們是小,我喜歡的命名空間。保留application.css,但修改主題以在主體上使用頂級規則。在主體上放置一個標籤以選擇主題。這個美妙之處在於你可以動態地改變主題。

<body class="theme-<%= theme_stylesheet %>"> 
    ... 
</body> 

_theme_x.css.scss

body.theme-x { 
    ... 
} 
3

你能做到這樣一樣可以第一,其客戶端登錄查看併爲他塗抹一些

佈局,幷包括不同勢佈局不同勢css文件。

像我這樣做

首先是讓法應用助手,但我可以根據用戶的角色,你

可以在根據客戶做實施佈局。

def choose_layout 
    if is_admin?(current_user) or is_super_admin?(current_user) 
     'admin' 
    else 
    'application' 
    end 

並在控制器將實現根據用戶過濾器比之前的佈局中調用它

角色

class AdministratorController < ApplicationController 

    include ApplicationHelper 
    layout :choose_layout 

def index 
    @user = User.new 
    @current_user = current_user 

end 

希望你能明白我的意思....