我有几个相同Rails应用的实例,我想在每个应用上都允许一些自定义主题选项。例如,不同的标题颜色或列宽。允许在多个Rails应用上定制主题
我仍然希望保持相同的代码基础,所以我不能只为每个代码更改CSS,而且似乎并不像使用环境变量那样是个好主意。我也想保持资产管道的优化效益。
我可以使用什么,将允许在应用程序的每个实例中轻松定制主题?
我有几个相同Rails应用的实例,我想在每个应用上都允许一些自定义主题选项。例如,不同的标题颜色或列宽。允许在多个Rails应用上定制主题
我仍然希望保持相同的代码基础,所以我不能只为每个代码更改CSS,而且似乎并不像使用环境变量那样是个好主意。我也想保持资产管道的优化效益。
我可以使用什么,将允许在应用程序的每个实例中轻松定制主题?
您可以创建多个清单文件,在其中包含您想要的任何部分文件。例如,您可以使用常用样式创建一个core.css
文件,然后您可以选择包含blue.css
,green.css
等文件。这受到this answer的启发,查看更多信息。
如果您定义的自定义主题是由用户自定义的,那么您可以简单地使用cookies来存储应该包含在应用程序中的清单文件的名称。但是,如果你这样做,不要忘记,用户可以更改cookie,所以要注意注射。
您可以为每个主题创建单独的布局。
在app/views/layouts/theme_one_base.html.haml
<html>
<head>
<%= stylesheet_link_tag "application" %>
</head>
<body id='theme_one'>
<%= yield %>
</body>
</html>
您可以指定你的应用程序控制器使用的布局,这可能是一个环境变量。
class ApplicationController < ActionController::Base
layout 'theme_one'
end
如果这是不够的,每个主题需要一组自己的样式,你可以像这样分割起来。
在app/assets/stylesheets/
,该目录将看起来像
theme_one.css.scss
theme_one/
而且清单文件theme_one.css.scss
包含
/**
*= require_self
*= require_tree ./theme_one
*/
而且你会更新base_layout.html.haml
<html>
<head>
<%= stylesheet_link_tag "theme_one" %>
</head>
<body>
<%= yield %>
</body>
</html>
基本上每个基地布局包括它是自己的一套依赖于样式表。
更新1 - 增加覆盖布局信息