2017-09-15 6 views
0

j'ai un magasin de frénésie utilisant spree-multi-domain et le readme a des instructions sur la façon de changer le fichier de mise en pageModification des modèles partiels à l'aide de frénésie multi-domaine

ces dispositions devraient être situés dans l'extension du thème de votre site dans l'application/views/spree/layouts/store # code/répertoire. Donc, si vous avez un magasin avec un code de « alpha », vous devez sauvegarder sa mise en page par défaut dans l'application/vues/spree/layouts/alpha/spree_application.html.erb

Cela fonctionne bien, mais maintenant je ne suis pas sûr comment je peux changer les autres modèles comme home/index.html.erb. Si je comprends bien, ces fichiers sont rendus dans la partie yield du modèle de mise en page, mais je ne sais pas comment je peux définir différents modèles pour les différents domaines en utilisant cela.

Répondre

0

J'ai modifié la réponse de gonzalo moreno caballero il fonctionne sur des rails 5.1

magasin juste vos vues comme

app/views/fête/first_store/home/index.html.erb

app/views/fête/second_store/home/index.html.erb

Et ajouter à config/initializers/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 encore besoin d'aller dans views/spree/layouts/<store_code>/

1

Il suffit de créer un multi_domain.rb initialiseur avec cela et ayant deux ou plusieurs magasins avec des codes uniques

store1 = Spree :: Store.find_by (code: "first_store")

magasin2 = Spree :: Store.find_by (code: "second_store")

Et vos vues séparées comme ceci:

app/views/fête/first_store/home/index.html.erb

app/views/fête/second_store/home/index.html.erb

L'initialisateur:

# 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 

Cette implémentation fonctionne dans un magasin réel avec 10 domaines.

+0

Ce genre de travaux, mais 'alias_method_chain' est maintenant dépréciée dans des rails 5.1. – Qwertie