我想制作一个Rails应用程序,让用户输入数据,然后允许他们更改页面的主题.这样,他们的数据可能根据他们选择的主题而不同.我该怎么做呢?
>更改样式表?
>具有不同类/元素的两个独立视图
>动态地改变类/ ids /选择器?
>?
谢谢
解决方法
主题网站的最简单的方法是简单地链接到不同的样式表.您可以使用以下操作动态地执行此操作:
# 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
然后你可以有几个主题的表现.例如,您的资产目录可以如下所示:
> app / assets / stylesheets
> application.css
> buttons.css
> theme1 /
> index.css
> buttons.css
> theme2 /
> index.css
> buttons.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
>类似于上述方法,但当主题变得非常大时,您应该考虑将它们放入自己的宝石作为轨道引擎
注意:这是静态主题.对于动态主题(例如管理员可以登录和编辑样式表或HTML),您必须将数据库中的信息存储在数据库中.根据您的体系结构,您可能可以提供一组静态主题,然后另一个动态抓取数据库样式数据的主题.在这一点上,你正在开发一个CMS,所以它超出了这个答案的范围:)