Comment créer un module personnalisé dans Magento 2

Publié: 2018-03-19

Qu'est-ce qu'un module Magento ?

Comme vous le savez, le module est un répertoire qui contient des blocs , des contrôleurs , des modèles , des aides , etc. - qui sont liés à une fonctionnalité métier spécifique.

Conformément à l'engagement de Magento envers une modularité optimale, un module encapsule une fonctionnalité et a des dépendances minimales sur les autres modules.

Les modules fournissent des fonctionnalités commerciales, avec une logique de support, tandis que les thèmes influencent fortement l'expérience utilisateur et l'apparence de la vitrine.

Objectif du module

Le but de chaque module est de fournir des fonctionnalités spécifiques au produit en implémentant de nouvelles fonctionnalités ou en étendant les fonctionnalités d'autres modules. Chaque module est conçu pour fonctionner indépendamment, de sorte que l'inclusion ou l'exclusion d'un module particulier n'affecte généralement pas la fonctionnalité des autres modules.

Dans Magento 2, les modules seront live dans le répertoire app/code d'une installation Magento, avec ce format : app/code/<Vendor>/<ModuleName>. Nous allons maintenant suivre ces étapes pour créer un module simple qui fonctionne sur Magento 2.

Créer un module Magento 2

  1. Créez le dossier du module.
  2. Créez le fichier etc/module.xml.
  3. Créez le fichier registration.php.
  4. Exécutez le script bin/magento setup:upgrade pour installer le nouveau module.
  5. Vérifiez que le module fonctionne.

Passons en revue chacune de ces étapes en détail.

Étape 1 : Créer le dossier du module

  • Il existe deux emplacements possibles pour les modules dans Magento 2 : le dossier app/code et le dossier vendor

Selon la façon dont Magento 2 a été installé, les modules principaux peuvent être situés soit dans les dossiers vendor/magento/magento-* (pour l'installation du composeur) soit dans le dossier app/code/Magento/ (pour le clonage de github).

  • Lequel de ces emplacements devriez-vous choisir pour votre nouveau module ?

Si vous créez un module pour un projet spécifique, il est préférable de choisir le dossier app/code et de valider le référentiel du projet.

Si vous construisez une extension à réutiliser, il est préférable d'utiliser composer pour la créer, et placez votre module dans le dossier vendor/<YOUR_VENDOR>/module-something.

Chaque nom de module dans Magento 2 se compose de deux parties - le fournisseur et le module lui-même, vous devez donc définir les noms du fournisseur et du module. Pour cet exemple, nommons le fournisseur « Learning » et le module « FirstUnit ».

Créons le dossier app/code/Learning et à l'intérieur de ce dossier placez un autre dossier : FirstUnit. Si vous utilisez la ligne de commande, le code serait :

  1. cd dans le dossier racine
  2. mkdir application/code/Apprentissage
  3. mkdirapp/code/Apprentissage/FirstUnit

Assurez-vous que vous êtes autorisé à créer des fichiers et des dossiers dans votre installation.

Étape 2 : Créer le fichier etc/module.xml

Ce fichier est nécessaire pour que le module existe et il contient les informations suivantes :

  • Nom du module
  • Version du module
  • Dépendances

Le nom du module est défini par les dossiers que nous venons de créer, car dans Magento 2, les noms de classe doivent suivre la structure des dossiers. Parce que nous avons créé les dossiers Learning/FirstUnit, le nom de notre module sera Learning_FirstUnit et toutes les classes qui appartiennent à ce module commenceront par Learning\FirstUnit – par exemple : Learning\FirstUnit\Observer\Test.

La version du module indique la version actuelle du schéma et des données de la base de données et est utilisée lors de la mise à niveau. Par exemple, supposons que vous décidiez de modifier le schéma d'une table dans votre module. Comment être sûr que ce changement se produira sur toutes les instances où le code est déployé ? La modification de la base de données par des requêtes SQL directes ne fonctionnera pas. Au lieu de cela, Magento 2 a des scripts d'installation et de mise à niveau dans chaque module (en option). Ces scripts contiennent des commandes pour modifier le schéma ou les données de la base de données. Pour suivre l'exécution ou non d'un script, Magento 2 utilise des versions de module. Chaque fois que vous implémentez une nouvelle modification de base de données, vous implémentez une nouvelle version d'un module et modifiez le module.xml correspondant. Magento enregistre la version actuelle du module dans une base de données, et si la valeur de la base de données et celle du module.xml ne correspondent pas, il exécutera le code de mise à jour.

Dépendances. Si un module dépend d'un autre, le fichier module.xml aura une déclaration spéciale qui définit une liste de modules dont dépend le module actuel. Pour cet exemple, nous rendrons notre module dépendant de Magento_Catalog.

À l'aide du code de ligne de commande suivant, créez le dossier app/code/Learning/FirstUnit/etc :

 mkdir app/code/Learning/FirstUnit/etc

Créez ensuite un fichier XML avec le contenu suivant :

 <?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <nom du module="Learning_FirstUnit" setup_version="0.0.1">
        <séquence>
            <nom du module="Magento_Catalog" />
        </séquence>
    </module>
</config>

Notez que dans le fichier XML, nous avons spécifié :

  • Nom du module : Learning_FirstUnit (basé sur les dossiers que nous avons créés)
  • Version : 0.0.1 (version initiale de notre module)
  • Dépendance : Magento_Catalog. Nous pourrions avoir plusieurs dépendances. Dans ce cas, nous placerions les nœuds <module name="".." /> sous le nœud de séquence.

Étape 3 : Créer le fichier registration.php

Chaque module doit avoir ce fichier, qui indique à Magento comment localiser le module. En continuant notre exemple, créez le fichier app/code/Learning/FirstUnit/registration.php . Ensuite, mettez-y le contenu suivant :

 <?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);

Le registration.php est un fichier standardisé qui suit le même schéma pour tous les modules.

La seule chose qui varie est le nom du module, qui dans notre cas est Learning_FirstUnit .

Étape 4 : Exécutez la commande "setup:upgrade"

L'exécution de cette commande rend votre nouveau module actif, notifiant Magento de sa présence.

 configuration de php bin/magento : mise à niveau

Il doit faire écho à une grande quantité de sortie, dont une ligne doit être Learning_FirstUnit . Vérifiez que cette ligne de code est là.

Étape 5 : Vérifier que le nouveau module est actif

Jusqu'à présent, nous n'avons ajouté aucun code utile à notre module – il est toujours vide (et donc invisible). Afin de vérifier qu'il a été reconnu, vérifiez le fichier app/etc/config.php . Il contient une liste de modules générés automatiquement qui sont actifs.

Ne modifiez jamais cette liste manuellement !

 chat app/etc/env.php | grep Learning_FirstUnit

En suivant ces étapes, vous pouvez créer avec succès un nouveau module dans Magento 2.


Lire la suite:
Comment déployer du contenu statique dans Magento 2