Magento2 ativa módulo personalizado que estendeu o módulo principal
-
29-09-2020 - |
Pergunta
digamos que criei um módulo personalizado que estenderá algumas funcionalidades como plug-ins do módulo principal Magento_Catalog e vamos chamá-lo de MyModule.MyModule já foi registrado e ativado.
Eu defini meu módulo e a sequência para magento_catalog no module.xml, criei os plugins e os declarei em etc/adminHtml/di.xml arquivo
1) O plug-in que estende a classe principal do módulo Magento deve estar na mesma estrutura de diretórios do pai que ele estende?Por exemplo, plugin para MyVendor\MyModule\Block\Adminhtml\Product\Edit.php estar em
namespace MyVendor\MyModule\Block\Adminhtml\Product\MyEdit.php
2) Não tenho certeza do que exatamente devo fazer para que MyModule seja invocado quando for para a página?
http://mydomain/admin/catalog/product/edit/id/8
Obrigado.
Solução
1) O plug-in que estende a classe principal do módulo Magento deve estar na mesma estrutura de diretórios do pai que ele estende?Por exemplo:
Não, os plug-ins são classes independentes.
2) Não tenho certeza do que exatamente devo fazer para que MyModule seja invocado quando for para a página?
Esta pergunta não faz muito sentido.Um plugin é basicamente um “ouvinte” para chamadas em outros métodos de classe pública no Magento.Se você tiver um plugin para class A
, você pode configurar ouvintes antes, depois e "ao redor" para métodos específicos na classe A.O ouvinte before permitirá que você altere os parâmetros da chamada do método.o ouvinte after permitirá que você altere o valor dos resultados, e o ouvinte around permitirá que você faça coisas extras antes que o método seja chamado ou cancele totalmente a chamada do método.Você pode querer revisar minha série de gerenciadores de objetos para todos os recursos do sistema de objetos do Magento 2.Isso deve ajudá-lo a decidir como deseja personalizar o comportamento do sistema Magento com seu plugin.
Outras dicas
você precisa adicionar no di.xml
arquivo do seu módulo este
<preference for="Magento\Catalog\Block\Adminhtml\Product\Edit" type="MyVendor\MyModule\Block\Adminhtml\Product\MyEdit" />
Isso dirá ao Magento para usar sua classe em vez da classe principal.