2017-09-15 83 views
0

我使用spree-multi-domain有一个大礼包存储和自述对如何切换布局文件更改使用大礼包,多域

这些布局应设在你的网站的主题扩展的应用的说明部分模板/ views/spree/layouts/store#code/directory。所以,如果你有一个代码为“alpha”的商店,你应该将它的默认布局存储在app/views/spree/layouts/alpha/spree_application.html.erb

这工作正常,但现在我不是确定我可以如何更改其他模板,如home/index.html.erb。据我了解,这些文件呈现在布局模板的yield部分,但我不确定如何使用此模板为不同的域设置不同的模板。

回答

0

我修改从伊莫雷诺卡瓦列罗答案因此它可以在轨道上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>/

1

只是唯一代码创建一个初始化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个域的真实商店中运行。

+0

去这类作品,但'alias_method_chain'在轨5.1现在已经过时。 – Qwertie