更改使用大礼包,多域
我使用spree-multi-domain有一个大礼包存储和自述对如何切换布局文件更改使用大礼包,多域
这些布局应设在你的网站的主题扩展的应用的说明部分模板/ views/spree/layouts/store#code/directory。所以,如果你有一个代码为“alpha”的商店,你应该将它的默认布局存储在app/views/spree/layouts/alpha/spree_application.html.erb
这工作正常,但现在我不是确定我可以如何更改其他模板,如home/index.html.erb
。据我了解,这些文件呈现在布局模板的yield
部分,但我不确定如何使用此模板为不同的域设置不同的模板。
我修改从伊莫雷诺卡瓦列罗答案因此它可以在轨道上5.1
只储存你的观点一样
应用程序/视图/大礼包/ first_store /家庭/ index.html.erb
应用程序/视图/大礼包/ second_store /家庭/ index.html.erb
并添加此到config /初始化/ multi_domain.rb
module PartialRendererMultiStore
def find_template(path, locals)
prefixes = path.include?(?/) ? [] : @lookup_context.prefixes
store_prefixes = prefixes
store_path = path
if @view.respond_to?(:current_store) && @view.current_store && [email protected]_a?(Spree::Admin::BaseController)
store_prefixes = (store_prefixes.map { |i| i.gsub('spree/', "spree/#{@view.current_store.code}/") } + store_prefixes).uniq unless store_prefixes.nil?
store_path = store_path.gsub('spree/', "spree/#{@view.current_store.code}/") unless store_path.nil?
end
begin
@lookup_context.find_template(store_path, store_prefixes, true, locals, @details)
rescue ::ActionView::MissingTemplate
@lookup_context.find_template(path, prefixes, true, locals, @details)
end
end
end
class ActionView::PartialRenderer
prepend PartialRendererMultiStore
end
module TemplateRendererMultiStore
def find_template(name, prefixes = [], partial = false, keys = [], options = {})
if prefixes.nil?
store_prefixes = nil
elsif @view.respond_to?(:current_store) && @view.current_store && [email protected]_a?(Spree::Admin::BaseController)
spree = /^spree\//
store_prefixes = []
prefixes.each do |i|
store_prefixes << i.gsub(spree, "spree/#{@view.current_store.code}/") if i.match(spree)
end
store_prefixes = (store_prefixes + prefixes).uniq
else
store_prefixes = prefixes
end
begin
@lookup_context.find_template(name, store_prefixes, partial, keys, options)
rescue ::ActionView::MissingTemplate
@lookup_context.find_template(name, prefixes, partial, keys, options)
end
end
end
class ActionView::TemplateRenderer
prepend TemplateRendererMultiStore
end
spree_application
仍需views/spree/layouts/<store_code>/
只是唯一代码创建一个初始化multi_domain.rb与此和具有两个或多个商店
商店1 =施普雷:: Store.find_by(代码: “first_store”)
商店2 =施普雷:: Store.find_by(代码: “second_store”)
和你分开的观点是这样的:
应用程序/视图/大礼包/ first_store /家庭/ index.html.erb
应用程序/视图/大礼包/ second_store /家庭/ index.html.erb
的初始化:
# config/multi_domain.rb
ActionView::PartialRenderer.class_eval do
def find_template_with_multi_store(path, locals)
prefixes = path.include?(?/) ? [] : @lookup_context.prefixes
store_prefixes = prefixes
store_path = path
if @view.respond_to?(:current_store) && @view.current_store && [email protected]_a?(Spree::Admin::BaseController)
store_prefixes = (store_prefixes.map { |i| i.gsub('spree/', "spree/#{@view.current_store.code}/") } + store_prefixes).uniq unless store_prefixes.nil?
store_path = store_path.gsub('spree/', "spree/#{@view.current_store.code}/") unless store_path.nil?
end
begin
@lookup_context.find_template(store_path, store_prefixes, true, locals, @details)
rescue ::ActionView::MissingTemplate
@lookup_context.find_template(path, prefixes, true, locals, @details)
end
end
alias_method_chain :find_template, :multi_store
end
ActionView::TemplateRenderer.class_eval do
def find_template_with_multi_store(name, prefixes = [], partial = false, keys = [], options = {})
if prefixes.nil?
store_prefixes = nil
elsif @view.respond_to?(:current_store) && @view.current_store && [email protected]_a?(Spree::Admin::BaseController)
spree = /^spree\//
store_prefixes = []
prefixes.each do |i|
store_prefixes << i.gsub(spree, "spree/#{@view.current_store.code}/") if i.match(spree)
end
store_prefixes = (store_prefixes + prefixes).uniq
else
store_prefixes = prefixes
end
begin
@lookup_context.find_template(name, store_prefixes, partial, keys, options)
rescue ::ActionView::MissingTemplate
@lookup_context.find_template(name, prefixes, partial, keys, options)
end
end
alias_method_chain :find_template, :multi_store
end
此实现在包含10个域的真实商店中运行。
去这类作品,但'alias_method_chain'在轨5.1现在已经过时。 – Qwertie