3. - Alterar, estender e incrementar o Drupal
- Plugins, Serviços, Eventos e Hooks
- Exemplos de cada um deles
- Como escolher a ferramenta certa
O que veremos?
8. Plugins
- Prove uma funcionalidade configurável, de maneira que permita, ao
sistema ou ao usuário final, escolher um item ou mais de uma lista.
- Auxilia no aprendizado do desenvolvedor
- Todo código em um só lugar
9. Exemplos de Plugins
- Blocks
- Field types
- Field formatters
- Views styles
- Actions
10. Receita de Plugin
1 - Determine o tipo de plugin
- Onde a meta-data e o código vão?
2 - Existe uma classe base para estender?
3 - Implemente uma interface e coloque a meta-data,
para que o plugin manager possa achar a sua instância
11.
12. Receita de Tipos de Plugin
- Plugins que que tem funcionalidades similares
são do mesmo plugin type
- Você pode implementar seu próprio tipo de plugin,
veja DefaultPluginManager
13. Alguns links sobre Plugins
https://www.drupal.org/developing/api/8/plugins
https://drupalize.me/blog/201407/drupal-8-plugins-explained
https://drupalize.me/blog/201409/unravelling-drupal-8-plugin-system
18. Receita de Serviço
1. Escolha um nome único. Dica: Use o nome do módulo como prefixo,
‘mymodule.service_name’
1. Defina uma interface, e a implemente
1. Registre o serviço no arquivo mymodule.services.yml
1. Acesse o serviço via container usando o nome único
Drupal::service('mymodule.service_name')
21. Eventos
- Reagir a uma ação/condição da aplicação,
sem modificá-la
- Eventos são práticas comuns em OOP,
já as hooks são mais Drupalistas
22. Receita de Eventos - Assinatura
1. Determine o nome do evento
https://api.drupal.org/api/drupal/core%21core.api.php/group/events/8.2.x
1. Define um apelido para o serviço
23. Receita de Eventos - Assinatura
3. Implemente SymfonyComponentEventDispatcher
EventSubscriberInterface em Drupal
mymoduleEventSubscriber namespace
24. Receita de Eventos - Disparo
1. Adicione uma classe em Drupal/my_module/Events namespace.
1. A classe deve extender
SymfonyComponentEventDispatcherEvent, que irá prover
informações adicionais ao evento
1. Use DrupalComponentEventDispatcher
ContainerAwareEventDispatcher::dispatch();
e passe o nome do evento e o objeto da classe criada.
27. Hooks
- Nas versões anteriores do Drupal, muitas coisas eram feiras com
hook
- É bom para alterar dados existentes
- Rápido!
- Quando o Drupal começou a utilizar hooks (2001), era a melhor
solução da época
28. Exemplos de Hooks
- Alterar formulário, hook_form_alter().
- Modificar meta-data de um campo/entidade, hook_field_info()
- Drupal 7
29. Receita de Hook
1. Determine o nome da hook que vai implementar
Ex: hook_form_alter()
1. Adicione uma função no seu arquivo .module com o nome da hook,
substitua “hook” pelo nome do seu módulo
Ex: example_form_alter()
1. Implemente de acordo com a documentação
1. Limpe o cache (nem sempre necessário)
30. Receita de Hooks - Chamar
1. Pegue o nome único da sua hook
1. Use DrupalCoreExtensionModuleHandlerInterface métodos
33. Vídeo upload module
Usando plugin para você poder escolher onde o vídeo vai ser hospedado.
Usando serviço para enviar o vídeo
Usando serviço para interagir com cada api (youtube, brightcove, etc)
Disparando eventos para que outros módulos possam interagir
Ex: Dispara um evento quando o vídeo termina de carregar
Chama uma hook alter para permitir que outros módulos possam alterar as
configurações dos vídeos.
Ex: Mudar a qualidade do vídeo