Intégrer Apotomo avec des pages de raffinerycms
-
15-11-2019 - |
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é?
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?