2014-10-31 8 views

답변

0

이 코드는 테스트되었으며 작동합니다. 솔루션을 찾을 수 있도록 도와 주신 @aledustet :)

/app/helpers/spree/base_helper_decorator.rb을 만들고 거기에 다음 코드를 입력하십시오. /app/helpers/spree/base_helper.rb을 사용하지 마십시오. 제대로 작동하려면 base_helper.rb의 모든 메소드를 복사/붙여 넣기해야합니다.

module Spree 
    module BaseHelper 

    def meta_data 
     meta = ({ 
     keywords: "test keyword", 
     description: "test description", 
     }) 
    end 

    end 
end 

는 또한 다른 사람이 첫째하지 않았다 때 작업이 두 번째 솔루션을보고 어디

Spree::BaseHelper.module_eval do 
    .... 
end 

은 내가 읽은 할 수있는, 그래서 모두 게시하도록하겠습니다. 둘 모두 나를 위해 잘 작동합니다.

Per Ryan Bigg : class_eval과 module_eval을 사용할 특별한 이유가 없습니다. Spree 프로젝트에서 오랫동안 습관이었습니다. https://stackoverflow.com/a/12075315/2229277

이 시점에서 메타 데이터를 제어 할 수 있지만 컨트롤러 별 설정은 어떻게해야합니까? 개인용 메소드를 작성하고 컨트롤러에서 helper_method 함수를 호출하여이를 수행 할 수 있습니다. 다음은 작업 및 테스트있어 전체 예는 다음과 같습니다가 my_meta_data 방법이 정의되어 있지 않은 경우에는 몇 가지 기본 메타 데이터를 가질 수 있도록

class BrandsController < Spree::StoreController 

    helper_method :my_meta_data 

    #controller actions here. 

    private 
    def my_meta_data 
    meta = ({ 
     keywords: "keywords here", 
     description: "description here", 
    }) 
    end 

end 

내 기본 도우미는 다음과 같습니다.

module Spree 
    module BaseHelper 

    def meta_data 
     if (defined? my_meta_data) 
     meta = my_meta_data 
     else 
     meta = ({ 
      keywords: "default keywords here", 
      description: "default description here", 
     }) 
     end 
    end 

    end 
end 
2

당신은 두 번째 줄에 사용할 필요가 :

module Spree 
    module BaseHelper.class_eval 
    ... 
    end 
end 

이 작동합니다.

관련 문제