SlideShare uma empresa Scribd logo
1 de 34
Hooks, plugins, eventos e serviços,
como usar tudo isso no Drupal 8?
Felipe Ribeiro
Desenvolvedor Sr.
CI&T
Felipe Ribeiro (felribeiro)
Desenvolvo com drupal há 5 anos
Trabalho na CI&T como desenvolvedor drupal sênior.
- 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?
Não hackeie
o core e módulos.
Não hackeie,
use uma hook, escreva um plugin,
crie um serviço ou responda a um
evento.
Permita que outras pessoas
consigam alterar seu módulo sem
precisar hackeá-lo.
Plugins
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
Exemplos de Plugins
- Blocks
- Field types
- Field formatters
- Views styles
- Actions
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
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
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
Serviços
Serviços são muito interessantes
- Eles são dissociados do Drupal
- Serviços podem ser trocados
- Fácil de testar
- Ótima reusabilidade
Exemplos de Serviços
- Acesso ao Cache e Banco de Dados
- Plugin Manager, disparo de Eventos
- Integrações com API
- Manipulador de validações
https://api.drupal.org/api/drupal/services/8.2.x
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')
Links sobre Serviços
https://www.drupal.org/node/2133171
https://api.drupal.org/api/drupal/core%21core.api.php/
group/container/8.2.x
https://drupalize.me/series/module-development-essentials
Eventos
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
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
Receita de Eventos - Assinatura
3. Implemente SymfonyComponentEventDispatcher
EventSubscriberInterface em Drupal
mymoduleEventSubscriber namespace
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.
Links sobre Eventos
https://drupalize.me/blog/201502/responding-events-drupal-8
http://symfony.com/doc/current/components/event_dispatcher
/introduction.html
https://drupalize.me/series/module-development-essentials
https://api.drupal.org/api/drupal/core%21core.api.php/group
/events/8
Hooks
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
Exemplos de Hooks
- Alterar formulário, hook_form_alter().
- Modificar meta-data de um campo/entidade, hook_field_info()
- Drupal 7
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)
Receita de Hooks - Chamar
1. Pegue o nome único da sua hook
1. Use DrupalCoreExtensionModuleHandlerInterface métodos
Links sobre Hooks
{MODULE_NAME}.api.php
https://api.drupal.org/api/drupal/core%21core.api.php
/group/hooks/8.2.x
Hooks ou Eventos?
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
Obrigado
Felipe Ribeiro
Email: fribeiro@ciandt.com

Mais conteúdo relacionado

Destaque

The State of Drupal 8
The State of Drupal 8The State of Drupal 8
The State of Drupal 8nyccamp
 
RESTful in Drupal 8 and Services module - New`n`Tasty!
RESTful in Drupal 8 and Services module - New`n`Tasty!RESTful in Drupal 8 and Services module - New`n`Tasty!
RESTful in Drupal 8 and Services module - New`n`Tasty!Dmytro Olaresko
 
Drupal 8, Where Did the Code Go? From Info Hook to Plugin
Drupal 8, Where Did the Code Go? From Info Hook to PluginDrupal 8, Where Did the Code Go? From Info Hook to Plugin
Drupal 8, Where Did the Code Go? From Info Hook to PluginAcquia
 
Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)Acquia
 
Hooks and Events in Drupal 8
Hooks and Events in Drupal 8Hooks and Events in Drupal 8
Hooks and Events in Drupal 8Nida Ismail Shah
 
Drupal 8: The Foundation for Digital Experience and Digital Business
Drupal 8: The Foundation for Digital Experience and Digital BusinessDrupal 8: The Foundation for Digital Experience and Digital Business
Drupal 8: The Foundation for Digital Experience and Digital BusinessAcquia
 
How Wilson Sporting Goods Is Changing the Game with Experiential Commerce
 How Wilson Sporting Goods Is Changing the Game with Experiential Commerce How Wilson Sporting Goods Is Changing the Game with Experiential Commerce
How Wilson Sporting Goods Is Changing the Game with Experiential CommerceAcquia
 

Destaque (8)

The State of Drupal 8
The State of Drupal 8The State of Drupal 8
The State of Drupal 8
 
Drupal 8
Drupal 8Drupal 8
Drupal 8
 
RESTful in Drupal 8 and Services module - New`n`Tasty!
RESTful in Drupal 8 and Services module - New`n`Tasty!RESTful in Drupal 8 and Services module - New`n`Tasty!
RESTful in Drupal 8 and Services module - New`n`Tasty!
 
Drupal 8, Where Did the Code Go? From Info Hook to Plugin
Drupal 8, Where Did the Code Go? From Info Hook to PluginDrupal 8, Where Did the Code Go? From Info Hook to Plugin
Drupal 8, Where Did the Code Go? From Info Hook to Plugin
 
Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)
 
Hooks and Events in Drupal 8
Hooks and Events in Drupal 8Hooks and Events in Drupal 8
Hooks and Events in Drupal 8
 
Drupal 8: The Foundation for Digital Experience and Digital Business
Drupal 8: The Foundation for Digital Experience and Digital BusinessDrupal 8: The Foundation for Digital Experience and Digital Business
Drupal 8: The Foundation for Digital Experience and Digital Business
 
How Wilson Sporting Goods Is Changing the Game with Experiential Commerce
 How Wilson Sporting Goods Is Changing the Game with Experiential Commerce How Wilson Sporting Goods Is Changing the Game with Experiential Commerce
How Wilson Sporting Goods Is Changing the Game with Experiential Commerce
 

Semelhante a Ferramentas do Drupal 8 para extender e personalizar

Drupal workshop ist 2014
Drupal workshop ist 2014Drupal workshop ist 2014
Drupal workshop ist 2014Ricardo Amaro
 
Colóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do MinhoColóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do Minhointrofini
 
Drupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal Portugal
 
Drupal workshop fcul_2014
Drupal workshop fcul_2014Drupal workshop fcul_2014
Drupal workshop fcul_2014Ricardo Amaro
 
Overview sobre o CMS Drupal
Overview sobre o CMS DrupalOverview sobre o CMS Drupal
Overview sobre o CMS DrupalRafael Cichini
 
Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalJust Digital
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JSRodrigo Urubatan
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Acquia
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresPedro Rocha
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDaniel Carvalhinho
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 

Semelhante a Ferramentas do Drupal 8 para extender e personalizar (20)

Drupal workshop ist 2014
Drupal workshop ist 2014Drupal workshop ist 2014
Drupal workshop ist 2014
 
Colóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do MinhoColóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do Minho
 
Drupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal e o seu ecossistema
Drupal e o seu ecossistema
 
Drupal workshop fcul_2014
Drupal workshop fcul_2014Drupal workshop fcul_2014
Drupal workshop fcul_2014
 
Overview sobre o CMS Drupal
Overview sobre o CMS DrupalOverview sobre o CMS Drupal
Overview sobre o CMS Drupal
 
Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just Digital
 
Drupal Services
Drupal ServicesDrupal Services
Drupal Services
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Modelagem Ágil
Modelagem ÁgilModelagem Ágil
Modelagem Ágil
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de Software
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 

Ferramentas do Drupal 8 para extender e personalizar