Estou preso em substituir os principais modelos de blocos e controladores no Magento2. Alguém pode ajudar nisso?
Vamos usar a barra de ferramentas da lista como exemplo, onde eu preciso adicionar uma nova opção de classificação chamada classificar pelos mais populares . Como adiciono? Acho que para isso precisamos adicionar opção no nível do bloco e condição no List.php
nível da coleção.
Respostas:
Magento2 deu muito bom conceito chamado Plugin
podemos fazer o que sempre antes e antes da função principal e também temos mais uma chamada em torno da qual faremos antes e depois abaixo é um código que cobrirá todas as informações
Crie um arquivo di.xml no Mymodule / etc / di.xml
neste exemplo de exemplo de produto e bloco de visualização de produto
Eu usei em torno do bloco Product View que é qualquer função, use o prefixo ao redor e, em seguida, verifique se 2 parâmetro deve estar lá, o primeiro é qual objeto você está usando o segundo fechamento que retém as informações de retorno antigas
No modelo i Usado antes e depois disso é
dessa maneira, podemos manter o código antigo; se, amanhã, o código principal do Magento for atualizado, teremos o novo código atualizado e a nossa lógica personalizada, se substituirmos diretamente, perderemos o novo código atualizado dessa função ou arquivo :-)
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
fonte
Finalmente eu entendi !!!!
Sigo as etapas abaixo para substituir o bloco, o controlador e o modelo. Tomei exemplo do modelo do produto e da visualização do produto o bloco e a visualização do controlador / ação
Crie um arquivo chamado di.xml no seu /etc/di.xml
Então eu criei o Model File em /Model/Product.php
Então eu criei o arquivo Block em /Block/Product/View.php
Agora crie o controlador de exibição do produto /Controller/Product/View.php
Está funcionando bem para mim :-)
fonte
Há duas etapas para substituir o arquivo Block, Model And Controller
1) Adicione preferência em di.xml
2) Crie um arquivo de bloco, modelo e controlador em seu módulo
1) Crie um arquivo di.xml na pasta
Prince/Helloworld/etc
2) Crie ListProduct.php na pasta
Prince/Helloworld/Block/Rewrite/Product
1) Adicione preferência em di.xml em
Prince/Helloworld/etc
2) Crie o arquivo do modelo Product.php na pasta
Prince/Helloworld/Model/Rewrite/Catalog
1) Adicione preferência em di.xml em
Prince/Helloworld/etc
2) Crie o View.php na pasta
Prince/Helloworld/Controller/Rewrite/Product
Você pode substituir outro bloco, modelo e controladores usando a mesma abordagem.
fonte
Correção pequena, mas muito útil, não precisamos criar n número de arquivo para cada função no conceito de plug-in. Para um módulo, um arquivo de plug-in é suficiente, pois você pode estender todo o módulo, todo modelo e blocos e controlador do Magento completo, auto-verificação abaixo do código
e no arquivo php plugin
Magento2 Rocks
fonte
Uncaught Error: Call to undefined method Magento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor::getEntityId()
Aqui\Clousure $proceed
ficando obejct deMagento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor
Você pode estender diretamente a classe de bloco ou controlador do magento em seu bloco ou controlador personalizado. Por exemplo, ao estender o modelo de fatura PDF no meu módulo personalizado para alterar o logotipo da geração de PDF da fatura da mesma maneira que você pode substituir o bloco ou o controlador. para criar o arquivo di.xml e não precisa definir preferências.
}
fonte
di.xml
. EstouDesenvolvedor / Helloworld / registration.php
Desenvolvedor / Helloworld / etc / module.xml
Desenvolvedor / Helloworld / etc / di.xml
fonte
Uma classe de ação pode ser reescrita da mesma maneira que no Magento 1. No Magento 1, tínhamos
before
atributos em torno de tags<routers>..<args><modules><... before="Mage_Catalog">Namespace_MyModule ..
Em
[module path]/etc/[nothing|adminhtml|frontend]/routes.xml
:E a classe de ação
\Namespace\MyModule\Controller\[same path of action as in core module]\SameActionName.php
ondeclass SameActionName.php extends \Magento\Catalog\...\SameActionName
Este é o módulo Magento_Catalog, arquivo que
Magento\Catalog\etc\adminhtml\routes.xml
registra uma nova rota no admin:http://devdocs.magento.com/guides/v2.1/extension-dev-guide/routing.html
Não acredito que preferências ou plugins nas classes Action sejam uma boa ideia das práticas recomendadas do Magento. E pode haver mais do que isso.
fonte
Para substituir diretamente uma classe, você precisa usar as preferências. Veja mais sobre documentos de desenvolvimento: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html#abstraction-implementation-mappings
Na maioria das vezes, usamos interceptores (plug-ins), pois essa é a melhor prática para reescrever ou adicionar parte de suas modificações. Consulte docs de desenvolvimento: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
Mantendo seu exemplo de classificação de itens da lista, adicionando nova ordem de classificação 'Mais Popular', estou fornecendo a você a melhor maneira de modificar o resultado.
Crie um módulo personalizado e crie uma configuração
app/code/Arsal/SortOption/etc/module.xml
:Agora registre seu módulo
app/code/Arsal/SortOption/registration.php
:Agora crie di.xml
app/code/Arsal/SortOption/etc/di.xml
:Agora crie uma classe de bloco
Arsal\SortOption\Block\Product\ProductListToolbar.php
:Isso adicionará a opção de ordem de classificação personalizada à lista de ordens de classificação. }
fonte