条件加载样式表

时间:2012-03-27 14:15:03

标签: ruby-on-rails ruby-on-rails-3

我有一个有客户的网站。每个客户端都可以拥有自己的主题,当某个客户端的用户登录时,必须加载公司主题。在application.css.scss中,每个公司都有这样的一行:

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

我如何只加载例如当公司x的用户登录并且没有加载theme_y和theme_z时,theme_x?或者有更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:8)

如果主题很大,您可能希望将它们与application.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 {
  ...
}

答案 1 :(得分: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

希望你能得到这个想法......