我想制作一个 Rails 应用程序,让用户输入数据,然后允许他们更改页面的主题。这样,他们的数据可以根据他们选择的主题进行不同的样式设置。我该怎么做呢?
- 更改样式表?
- 具有不同类/元素的两个独立 View ?
- 仅动态更改类/id/选择器?
- ?
谢谢
最佳答案
为网站设置主题的最简单方法是简单地链接到不同的样式表。您可以使用类似以下内容动态地执行此操作:
# in app/views/layouts/application.html.erb
<%= stylesheet_link_tag :application %>
<%= stylesheet_link_tag #{current_theme} %>
# in app/helpers/application_helper
def current_theme
# You'll have to implement the logic for a user choosing a theme
# and how to record that in the model.
# Also, come up with a better name for your default theme, like 'twentyeleven' ;)
current_user.theme || 'default'
end
然后您可以有几个主题 list 。例如,您的 Assets 目录可能如下所示:
- 应用程序/ Assets /样式表
- 应用程序.css
- 按钮.css
- 主题1/
- index.css
- 按钮.css
- 主题2/
- index.css
- 按钮.css
这将使您开始使用纯 CSS 主题。在某些时候,您可能还需要它们的 javascript 和 html 布局。当你开始发现需要在你的 html 中做这样的事情时:
<% if current_theme == 'theme1' %>
<li>...
<% elsif current_theme == 'theme2' %>
<b>...
<% end %>
那么是时候实现更强大的主题框架了:
- 按主题命名您的 html 模板(例如 app/views/themes/theme1/users/index.html.erb)并呈现主题版本而不是默认版本
- 仅按模板命名空间部分(例如 app/views/themes/theme1/users/_form.html.erb)并添加辅助方法,如
render_themed_partial
- 类似于上述方法,但是当主题变得非常大时,您应该考虑将它们作为 rails 引擎放入自己的 gem 中
注意:这都是针对静态主题的。对于动态主题(例如,管理员可以登录并编辑样式表或 html),您必须将主题信息存储在数据库中。根据您的体系结构,您可以提供一组静态主题,然后提供另一个从数据库中动态获取样式数据的主题。然而,此时您正在开发 CMS,因此它不在本答案的范围内 :)
关于css - Rails 应用程序中的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928476/