Question

J'aimerais étendre les pages de référence de RefineryCMS pour utiliser des widgets Apotomo dans notre projet.

Je pourrais potentiellement faire un "remplacement" de la pageController, qui la copie dans mon projet, mais j'utilise un autre moteur qui étend les pagesController (modifier les méthodes de spectacle et à la maison à l'aide d'une approche de module / de correction de singe) I 'd plutôt éviter cela.

Mon approche initiale était quelque chose comme ceci:

dans config / application.rb:

config.before_initialize do
  require 'pages_controller_extensions'
end

config.to_prepare do
  PagesController.send :include, Refspike::Extensions
end

dans Pages_Controller_extensions:

module Refspike
  module Extensions
    class << PagesController
      include Apotomo::Rails::ControllerMethods
      has_widgets do |root|
        root << widget(:map)
      end
    end
  end
end

Malheureusement, cela souffle sur la ligne "Helper ActionviewMethods" dans Apotomo's Controller_Methods.Ajouter inclure Apotomo :: rails :: actionviewmethods n'a pas aidé.

Je présume que je reçois juste un détail de base sur la gestion de la dépendance des rails ou peut-être des classes d'ouverture de rubis.Existe-t-il une approche alternative, ou quelque chose de simple, je suis négligé?

Était-ce utile?

La solution 2

Here's the solution. Remove the before_initialize stuff; there's simply no need for this to be in a module. In application.rb, do:

config.to_prepare do
  ::PagesController.send :include, Apotomo::Rails::ControllerMethods
  ::PagesController.has_widgets do |root|
    root << widget(:map)
  end
end

Then, override refinery's shared/_content_page.html.erb to include:

<%=render_widget :map %>

Done and done.

What was wrong before? Well, calling ::PagesController.send :include, Refspike::Extensions means that I'm actually "almost" in the scope of the class I'm trying to modify, but not quite. So, reopening the class is unnecessary, for one thing. But an ActiveSupport method, class_inheritable_array being called by apotomo, apparently isn't discoverable in my module scope, either, so I can't get away with doing something like:

#doesn't work
module Refspike
  module Extensions
    include Apotomo::Rails::ControllerMethods
    has_widgets do |root|
      root << widget(:map)
    end
  end
end

Fortunately, the 4 lines of code in the application.rb are a simpler solution, and that does the trick for me.

Autres conseils

Is PagesController a derived ActionController?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top