Je suis coincé dans les blocs et contrôleurs du modèle principal de Magento2. Quelqu'un peut-il aider à ce sujet?
Prenons comme exemple la barre d’outils de la liste où il me faut ajouter une nouvelle option de tri appelée tri par le plus populaire . Comment puis-je l'ajouter? Je suppose que pour cela, nous devons ajouter une option au niveau du bloc et une condition au List.php
niveau de la collection.
Réponses:
Magento2 a donné un très bon concept appelé Plugin
nous pouvons faire quoi que ce soit après et avant la fonction principale et nous avons également un autre appelant qui fera à la fois avant et après le code ci-dessous qui couvrira toutes les informations
Créez un fichier di.xml dans Mymodule / etc / di.xml
dans cet exemple, j'ai pris l'exemple du produit Modèle et bloc de vue produit
J'ai utilisé environ dans le bloc de la vue du produit qui contient n'importe quelle fonction, préfixe et ensuite, assurez-vous que le paramètre 2 doit être le premier, quel est l'objet de votre deuxième fermeture, qui conserve les anciennes informations de retour
Dans le modèle i Utilisé avant et après c'est
De cette manière, nous pouvons conserver l'ancien code. Ainsi, si demain le code de base de Magento est mis à jour, nous aurons à la fois le nouveau code mis à jour et notre logique personnalisée si nous remplaçons directement le code mis à jour de cette fonction ou de ce fichier :-)
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
la source
Je l'ai finalement eu !!!!
Je suis les étapes ci-dessous pour remplacer le bloc, le contrôleur et le modèle que j'ai extraits. Exemple de modèle de produit et de vue de produit Contrôleur de bloc et vue / Action
Créez un fichier appelé di.xml dans votre /etc/di.xml
Ensuite, j'ai créé le fichier de modèle dans /Model/Product.php
Puis j'ai créé le fichier Block dans /Block/Product/View.php
Maintenant, créez une vue de produit contrôleur / contrôleur / produit / vue.php
Cela fonctionne bien pour moi :-)
la source
Il y a deux étapes pour remplacer le fichier Block, Model And Controller
1) Ajouter une préférence dans di.xml
2) Créer un bloc, un modèle et un fichier de contrôleur dans votre module
1) Créer un fichier di.xml dans un dossier
Prince/Helloworld/etc
2) Créer un fichier ListProduct.php dans un dossier
Prince/Helloworld/Block/Rewrite/Product
1) Ajouter une préférence dans di.xml à
Prince/Helloworld/etc
2) Créer le fichier modèle Product.php dans un dossier
Prince/Helloworld/Model/Rewrite/Catalog
1) Ajouter une préférence dans di.xml à
Prince/Helloworld/etc
2) Créer View.php dans un dossier
Prince/Helloworld/Controller/Rewrite/Product
Vous pouvez remplacer d'autres blocs, modèles et contrôleurs en utilisant la même approche.
la source
Petite correction mais grosse utilité, nous n’avons pas besoin de créer un nombre n de fichier pour chaque fonction dans le concept de plugin. Pour un module, un seul fichier plug-in est suffisant pour pouvoir étendre tous les modules, tous les modèles, blocs et contrôleurs de Magento complet.
et dans le fichier php plugin
Magento2 Rocks
la source
Uncaught Error: Call to undefined method Magento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor::getEntityId()
ici -\Clousure $proceed
Obéjct deMagento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor
Vous pouvez directement étendre le bloc ou la classe de contrôleur de magento dans votre bloc ou votre contrôleur personnalisé.Par exemple, en étendant le modèle de facture PDF dans mon module personnalisé pour changer le logo de la facture générée PDF de la même manière, vous pouvez outrepasser le bloc ou le contrôleur. créer un fichier di.xml sans avoir à définir de préférences.
}
la source
di.xml
. Il me manque cette partie assez essentielle de votre réponse ...Développeur / Helloworld / registration.php
Développeur / Helloworld / etc / module.xml
Développeur / Helloworld / etc / di.xml
la source
Une classe d'actions peut être réécrite de la même manière que dans Magento 1. Dans Magento 1, nous avions un
before
attribut autour des balises.<routers>..<args><modules><... before="Mage_Catalog">Namespace_MyModule ..
Dans
[module path]/etc/[nothing|adminhtml|frontend]/routes.xml
:Et la classe d'action
\Namespace\MyModule\Controller\[same path of action as in core module]\SameActionName.php
oùclass SameActionName.php extends \Magento\Catalog\...\SameActionName
Ceci est le module Magento_Catalog, fichier
Magento\Catalog\etc\adminhtml\routes.xml
enregistrant une nouvelle route dans admin:http://devdocs.magento.com/guides/v2.1/extension-dev-guide/routing.html
Je ne crois pas que les préférences ou les plug-ins des classes d'action soient une bonne idée selon les meilleures pratiques de Magento. Et il y a peut-être plus que cela.
la source
Pour remplacer directement une classe, vous devez utiliser les préférences. En savoir plus sur les documents de développement: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html#abstraction-implementation-mappings
Nous utilisons généralement Interceptors (plugins) car c’est la meilleure pratique pour réécrire ou ajouter une partie de vos modifications. Voir dev docs: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
En conservant votre exemple de tri des éléments de la liste en ajoutant un nouvel ordre de tri "Les plus populaires" que je vous fournis la meilleure façon de modifier le résultat.
Créez un module personnalisé et créez une configuration
app/code/Arsal/SortOption/etc/module.xml
:Enregistrez maintenant votre module
app/code/Arsal/SortOption/registration.php
:Maintenant, créez di.xml
app/code/Arsal/SortOption/etc/di.xml
:Maintenant, créez une classe de bloc
Arsal\SortOption\Block\Product\ProductListToolbar.php
:Cela ajoutera une option d'ordre de tri personnalisé pour trier la liste des ordres. }
la source