Créer une méthode de livraison personnalisée sur Magento 2
SE FAIRE ACCOMPAGNER PAR DES EXPERTS CERTIFIÉS
Création de la structure du module
Créer une interface admin
Qui dit site e-commerce, dit livraison : ce dernier jalon de votre tunnel de vente n’est pas à laisser de côté ! Assurez-vous de proposer des méthodes de livraison qui conviennent à vos utilisateurs, puis découvrez tous nos
tutoriels .
Étape 1 : Création de la structure du module
A l’aide du tutoriel ?Créer un module Magento 2?, créez votre module Gone/ShippingMethod dans le répertoire app/code.
VOIR LE TUTO CRÉATION DE MODULE MAGENTO 2
Étape 2 : Créer votre classe
Dans votre module, créez un sous-dossier Model et Carrier et ajoutez un fichier GoneShippingMethod.php . Ce fichier contiendra la logique de votre méthode de livraison.
<?php /** * Copyright © All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Gone\MyModule\Model\Carrier; use Magento\Quote\Model\Quote\Address\RateRequest; use Magento\Shipping\Model\Rate\Result; class GoneShippingMethod extends \Magento\Shipping\Model\Carrier\AbstractCarrier implements \Magento\Shipping\Model\Carrier\CarrierInterface { protected $_code = 'goneshippingmethod'; protected $_isFixed = true; protected $_rateResultFactory; protected $_rateMethodFactory; /** * Constructor * * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory * @param \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory * @param array $data */ public function __construct( \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory, \Psr\Log\LoggerInterface $logger, \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory, \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $rateMethodFactory, array $data = [] ) { $this->_rateResultFactory = $rateResultFactory; $this->_rateMethodFactory = $rateMethodFactory; parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data); } /** * {@inheritdoc} */ public function collectRates(RateRequest $request) { if (!$this->getConfigFlag('active')) { return false; } $shippingPrice = $this->getConfigData('price'); $result = $this->_rateResultFactory->create(); if ($shippingPrice !== false) { $method = $this->_rateMethodFactory->create(); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData('title')); $method->setMethod($this->_code); $method->setMethodTitle($this->getConfigData('name')); if ($request->getFreeShipping() === true) { $shippingPrice = '0.00'; } $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); } return $result; } /** * getAllowedMethods * * @return array */ public function getAllowedMethods() { return [$this->_code => $this->getConfigData('name')]; } }
Étape 3 : Créer l’interface Admin
Dans le dossier etc, créer un répertoire adminhtml avec un fichier system.xml. Celui ci permettra d’afficher la configuration dans le back office Magento.
<?xml version="1.0" ?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <section id="carriers" sortOrder="1000" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <group id="goneshippingmethod" sortOrder="10" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>GoneShippingMethod</label> <field id="active" type="select" sortOrder="10" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Enabled</label> <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> </field> <field id="name" type="text" sortOrder="20" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Method Name</label> </field> <field id="price" type="text" sortOrder="30" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Price</label> <validate>validate-number validate-zero-or-greater</validate> </field> <field id="sort_order" type="text" sortOrder="40" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Sort Order</label> </field> <field id="title" type="text" sortOrder="50" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Title</label> </field> <field id="sallowspecific" type="select" sortOrder="60" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Ship to Applicable Countries</label> <frontend_class>shipping-applicable-country</frontend_class> <source_model>Magento\Shipping\Model\Config\Source\Allspecificcountries</source_model> </field> <field id="specificcountry" type="multiselect" sortOrder="70" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Ship to Specific Countries</label> <can_be_empty>1</can_be_empty> <source_model>Magento\Directory\Model\Config\Source\Country</source_model> </field> <field id="specificerrmsg" type="textarea" sortOrder="80" showInWebsite="1" showInStore="1" showInDefault="1" translate="label"> <label>Displayed Error Message</label> </field> </group> </section> </system> </config>
Étape 4 : Activer le module
Dans le terminal, naviguez jusqu’à la racine de Magento et exécutez les commandes suivantes :
php bin/magento setup:upgrade php bin/magento cache:flush
Après ces étapes, votre méthode de livraison personnalisée devrait être disponible dans Magento 2. Vous pouvez la configurer via le panneau d’administration de Magento sous Stores > Configuration > Sales > Delivery Methods.
Vous souhaitez découvrir toutes les possibilités que Magento propose aux e-commerçants ? Découvrez sans plus attendre nos
formations Magento , ou faites appel à notre agence e-commerce Magento !
Découvrez nos autres tutos Magento 2 :