overwriting code in drupal
play

Overwriting code in Drupal Vasile CHINDRIS vasi1186 d.o Why to - PowerPoint PPT Presentation

Overwriting code in Drupal Vasile CHINDRIS vasi1186 d.o 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. ...


  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 lib\Drupal\utils\Controller\CustomNodeController.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 ● Views full pager plugin. ● It is a PHP class: views_plugin_pager_full ● Extend the class: class A extends B

  15. How is the B class instantiated in the current implementation? ● hook_views_plugins() ● hook_views_plugins_alter()

  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. ● The handler class name is stored in the cache_views_info table. ● One alternate solution: hook_views_data_alter().

  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?

Recommend


More recommend