样式表的条件加载

7

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

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

当公司x的用户登录时,我如何仅加载主题x而不加载主题y和主题z?或者有更好的方法吗?谢谢!
2个回答

8
如果主题文件很大,您可能想将它们与application.css分开,并在布局中有条件地加载它们。例如,如果您在application_helper中有一个helper theme_stylesheet,它返回客户端正在使用的主题名称:
# application.html.erb
<%= stylesheet_link_tag 'application', theme_stylesheet %>

如果它们很小,我喜欢使用命名空间。保持你的application.css不变,但修改主题,使用body的顶级规则。在body上放置一个标签来选择主题。这样做的美妙之处在于你可以动态地改变主题。
<body class="theme-<%= theme_stylesheet %>">
  ...
</body>

_theme_x.css.scss

body.theme-x {
  ...
}

4

您可以通过以下方式完成此操作,例如,您可以首先检查哪个客户端已登录,并为其应用一些布局,以及为不同的布局包含不同的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

end

hope you could get the idea.....


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接