对于我的CM我希望能够轻松添加新主题,我的想法是简单地为新主题添加mime类型(因此application.theme1.erb可以工作)。
但99%的主题我不想改变观点,而不是全部。
如果主题视图不存在,有什么东西可以让rails回到html上?
答案 0 :(得分:0)
我对Rails很新,所以这可能不是一个完美的答案:
你可能想尝试使用querystring参数作为路由的一部分,如下所述: http://guides.rubyonrails.org/routing.html#querystring-parameters
所以最终这样的事情会起作用
map.connect ':theme/:controller/:action/:id'
据我所知,主题将在控制器中以params [:theme]的形式提供。如果没有指定主题,您可能需要添加另一个路径,如
map.connect '/:controller/:action/:id'
处理这种情况。
在i18n指南中,针对区域设置描述了类似的内容:http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-url-params
希望有所帮助。
答案 1 :(得分:0)
这取决于您希望使用主题更改多少布局。 如果你正确构建HTML,大多数事情都可以通过css完成。 (改变字体,颜色,东西出现的地方)
然后,只需添加一个主题参数来设置样式就很容易了。
如果您不想这样做,您可以随时为它创建一个单独的布局,并根据传入的参数进行分配(或者甚至将其设置为会话变量,这样您就不会在URL)。
基本上,对于默认主题,您坚持使用layouts/application.erb
,然后您说layouts/theme1.erb
,然后使用方法分配
class ApplicationController
layout :decide_layout
def decide_layout
@session[:layout] || 'application'
end
end
只需在您的操作中执行以下操作即可自定义视图:
def my_action
render "my_action_#{@session[:layout]}" if @session[:layout]
end
如果未设置@session[:layout]
,则会呈现默认值,否则会呈现您的主题视图。
当然,如果您根据用户输入设置布局,请务必先清理并检查布局参数。
答案 2 :(得分:0)
我在mobile_fu
遇到了同样的问题,它将格式设置为移动请求的:mobile
。
事实证明,如果:action.:format.erb
模板不可用,Rails将以任何格式替换:action.rhtml
。
我不能说这是否适用于布局,但它肯定适用于行动