Your SlideShare is downloading. ×

Overwriting code in Drupal

2,911

Published on

This session is supposed to present various ways to overwrite the default behaviour of the drupal core and some of the well-known contributed modules (like views or panels). The focus will be on …

This session is supposed to present various ways to overwrite the default behaviour of the drupal core and some of the well-known contributed modules (like views or panels). The focus will be on Drupal 7, but each case will also have the Drupal 8 correspondent. This will go beyond the things that can be overwrite with alter hooks, and will try to present cases when some specific behavior of a class or small pieces of code have to be overwritten. The attendees should be familiar with Drupal and should have developed at least a few modules before.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,911
On Slideshare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Overwriting code in Drupal Vasile CHINDRIS vasi1186 d.o
  • 2. Why to overwrite? ● There is no “magic” solution that solves all our problems. ● We are not happy with the existing implementation. ● Wrap the current implementation. ● ... plenty other reasons. ● Good frameworks should (easily) allow overwriting the code. without touching the core!
  • 3. What to overwrite? ● Classes. ● Functions (possible in a few cases in Drupal). ● Every piece of the framework (ideal case). and again, without touching the core!
  • 4. Overwriting menu items: D7 hook_menu_alter(&$items)
  • 5. Overwriting menu items: D8 ● There is no hook_menu_alter() in D8. ● We have to alter the routes defined in the routing.yml file. ● We use an EventSubscriber.
  • 6. The event subscriber is declared in the utils.services.yml file
  • 7. In libDrupalutilsControllerCustomNodeController.php:
  • 8. Overwriting menu items: real use case We have a hook_menu():
  • 9. When using a file that is uploaded with ajax. Why?
  • 10. Overwrite existing hooks: D7 hook_module_implements_alter(&$implementations, $hook)
  • 11. Use case: remove the hook_user_view() from the user module.
  • 12. A real use case You have a module called “action” on your site.
  • 13. Overwriting existing hooks: D8 ● Good news: the same as in D7! ● hook_module_implements_alter() exists also in D8
  • 14. Overwrite views plugins: D7 ● It is a PHP class: views_plugin_pager_full ● Extend the class: class A extends B ● Views full pager plugin.
  • 15. ● hook_views_plugins() ● hook_views_plugins_alter() How is the B class instantiated in the current implementation?
  • 16. Overwrite views handlers: D7 ● How are they created? ● The same as plugins are, in _views_create_handler()
  • 17. ● hook_views_handlers_alter() ● Ooops: there is no hook_views_handlers_alter() ● Make it the hard way: alter the file registry. ● hook_registry_files_alter()
  • 18. Add to the custom.info file: Copy the entire code from the original file to the new file. Big issue: we are not extending, but cloning core!
  • 19. Put the original class into a new file and change only the name of the class Add the file to the files array in the .info file: Extend the “new” original class:
  • 20. ● What happens when the module updates? ● Manually update the class. ● Goal 99% achieved: did not change any implementation, only the class name. ● Can be used with any classes in D7.
  • 21. Overwrite views plugins: D8 ● How are they constructed? ● A bit different than D7. ● But, we have the hook_views_plugins_pager_alter() ● There is an alter hook for every plugin: hook_views_plugin_pluginname_alter()
  • 22. Overwrite views handlers: D8 ● Same issue as in D7, no alter hook. ● Still to find a way to overwrite them, cannot apply the same solution as in D7. ● One alternate solution: hook_views_data_alter(). ● The handler class name is stored in the cache_views_info table.
  • 23. Conclusions ● Evaluate first the code you want to overwrite. ● Many things in Drupal can be overwritten with alter hooks. ● When extending classes, if possible do not do it the “hard way”.
  • 24. Overwriting code in Drupal Thank you! Questions?

×