2017-01-10 60 views
6

Chciałbym zastąpić metodę klejnotów (rozszerzenie Jekyll), która wygląda następująco:Jak załatać małpie rozszerzenie lub wtyczkę Jekyll?

Plik: lib/jekyll-amazon/amazon_tag.rb.

module Jekyll 
    module Amazon 
    class AmazonTag < Liquid::Tag 
     def detail(item) 
... 
     end 
    end 
    end 
end 
Liquid::Template.register_tag('amazon', Jekyll::Amazon::AmazonTag) 

umieściłem kod z tej samej struktury w moim projekcie w folderze config/initializers/presentation.rb _plugins/presentation.rb. Jeśli zmienię nazwę metody detail na nową nazwę, działa, ale nie mogę jej zastąpić nazwą detail. Co zrobiłem źle?

. (Uwaga: W wersji 0.2.2 klejnotu Jekyll-amazon, metoda detail jest prywatna; Zmieniłem to lokalnie tak, że metoda nie jest już prywatny)

+0

Wygląda na to, że mamy szczęście: jekyll-amazon obsługuje teraz [szablony niestandardowe] (https://github.com/tokzk/jekyll-amazon/issues/6). – approxiblue

+0

Tak, ale nadal chcę wiedzieć (dla mojej własnej wiedzy), jak przesłonić oryginalny klejnot. –

Odpowiedz

1

Można użyć alias_method

module Jekyll 
    module Amazon 
    class AmazonTag < Liquid::Tag 

     alias_method :old_detail, :detail 

     def detail(item) 
     # do your stuff here 
     # eventually pass your stuff to old method 
     old_detail(item) 
     end 

    end 
    end 
end 
Liquid::Template.register_tag('amazon', Jekyll::Amazon::AmazonTag) 
+0

umieść go w katalogu głównym twojej strony jekyllowej w folderze '_plugins' –

+0

Otrzymuję' jekyll 3.3.1 | Błąd: niezdefiniowana metoda "detail" dla klasy Jekyll :: Amazon :: AmazonTag' –

+0

Czy skonfigurowałeś to tak https://jekyllrb.com/docs/plugins/#installing-a-plugin? –