2014-04-07 30 views
1

我有几个相同Rails应用的实例,我想在每个应用上都允许一些自定义主题选项。例如,不同的标题颜色或列宽。允许在多个Rails应用上定制主题

我仍然希望保持相同的代码基础,所以我不能只为每个代码更改CSS,而且似乎并不像使用环境变量那样是个好主意。我也想保持资产管道的优化效益。

我可以使用什么,将允许在应用程序的每个实例中轻松定制主题?

回答

1

您可以创建多个清单文件,在其中包含您想要的任何部分文件。例如,您可以使用常用样式创建一个core.css文件,然后您可以选择包含blue.css,green.css等文件。这受到this answer的启发,查看更多信息。

如果您定义的自定义主题是由用户自定义的,那么您可以简单地使用cookies来存储应该包含在应用程序中的清单文件的名称。但是,如果你这样做,不要忘记,用户可以更改cookie,所以要注意注射。

1

您可以为每个主题创建单独的布局。

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 - 增加覆盖布局信息

相关问题