Учебное пособие по созданию методов доставки Magento 2 содержит множество шагов с фрагментами кода, позволяющими с легкостью установить дополнительные способы доставки в магазинах Magento 2. Почему команда Mageplaza предоставляет это руководство сегодня, когда есть некоторые способы доставки? Конечно, Magento 2 — это богатая платформа электронной коммерции, которая также поддерживает несколько способов доставки в процессе оформления заказа. Однако их недостаточно, чтобы вам было удобно. Для того, чтобы быть соразмерным с вашим развитием в будущем, настройка методов доставки очень важна. Поэтому Magento 2 Create Shipping Method создан для того, чтобы все было проще.
С простым объяснением, можно следовать шаг за шагом и завершить создание новых методов доставки. Все сгенерированные способы доставки хранятся в админ панели Magento. Перейдите в Магазины> Настройки> Конфигурация> Продажа> Способы доставки, чтобы найти и включить его в витрине магазина. Но подождите, откройте файл /Model/Carries/Generatedshippingmethod.php, в котором вы можете установить конкретную стоимость доставки для каждого метода доставки. А именно, чтобы создать способ доставки, пожалуйста, следите за следующими шагами.
Как создать простой способ доставки в Magento 2
Шаг 1: Объявить модуль доставки
Создайте вызов модуля: Simpleshipping, расположенный в app / code / Mageplaza / Simpleshipping
Файл: app/code/Mageplaza/Simpleshipping/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Mageplaza_Simpleshipping',
__DIR__
);
Файл: app/code/Mageplaza/Simpleshipping/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Mageplaza_Simpleshipping" setup_version="1.0.0" />
</config>
Создать файл config.xml
в app/code/Mageplaza/Simpleshipping/etc/config.xml
Файл: config.xml
<?xml version="1.0"?>
<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<carriers>
<simpleshipping>
<active>1</active>
<sallowspecific>0</sallowspecific>
<model>Mageplaza\Simpleshipping\Model\Carrier\Shipping</model>
<name>Mageplaza Sample Shipping Method</name>
<price>10.00</price>
<title>Mageplaza Sample Shipping Method</title>
<specificerrmsg>This shipping method is not available. To use this shipping method, please contact us.</specificerrmsg>
<handling_type>F</handling_type>
</simpleshipping>
</carriers>
</default>
</config>
Код метода доставки должен быть дочерним по умолчанию> перевозчиков. И этот код должен совпадать с кодом $ _code в приложении / code / Mageplaza / Simpleshipping / Model / Carrier / Shipping.php: 13
Шаг 2: Создать модель доставки
Далее нам нужно создать класс модели для этого метода доставки в Magento 2
Создайте файл Shipping.php в приложении / код / Mageplaza / Simpleshipping / Модель / Перевозчик / Shipping.php
<?php
namespace Mageplaza\Simpleshipping\Model\Carrier;
use Magento\Quote\Model\Quote\Address\RateRequest;
use Magento\Shipping\Model\Rate\Result;
class Shipping extends \Magento\Shipping\Model\Carrier\AbstractCarrier implements
\Magento\Shipping\Model\Carrier\CarrierInterface
{
/**
* @var string
*/
protected $_code = 'simpleshipping';
/**
* @var \Magento\Shipping\Model\Rate\ResultFactory
*/
protected $_rateResultFactory;
/**
* @var \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory
*/
protected $_rateMethodFactory;
/**
* Shipping 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);
}
/**
* get allowed methods
* @return array
*/
public function getAllowedMethods()
{
return [$this->_code => $this->getConfigData('name')];
}
/**
* @return float
*/
private function getShippingPrice()
{
$configPrice = $this->getConfigData('price');
$shippingPrice = $this->getFinalPriceWithHandlingFee($configPrice);
return $shippingPrice;
}
/**
* @param RateRequest $request
* @return bool|Result
*/
public function collectRates(RateRequest $request)
{
if (!$this->getConfigFlag('active')) {
return false;
}
/** @var \Magento\Shipping\Model\Rate\Result $result */
$result = $this->_rateResultFactory->create();
/** @var \Magento\Quote\Model\Quote\Address\RateResult\Method $method */
$method = $this->_rateMethodFactory->create();
$method->setCarrier($this->_code);
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethod($this->_code);
$method->setMethodTitle($this->getConfigData('name'));
$amount = $this->getShippingPrice();
$method->setPrice($amount);
$method->setCost($amount);
$result->append($method);
return $result;
}
}
Шаг 3: Создайте файл конфигурации
Теперь создайте файл system.xml в app / code / Mageplaza / Simpleshipping / etc / adminhtml / system.xml
со следующим содержанием:
<?xml version="1.0"?>
<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<section id="carriers" translate="label" type="text" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1">
<group id="simpleshipping" translate="label" type="text" sortOrder="0" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Mageplaza Simple Shipping Method</label>
<field id="active" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="0" canRestore="1">
<label>Enabled</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
</field>
<field id="name" translate="label" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Method Name</label>
</field>
<field id="price" translate="label" type="text" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="0" canRestore="1">
<label>Price</label>
<validate>validate-number validate-zero-or-greater</validate>
</field>
<field id="handling_type" translate="label" type="select" sortOrder="7" showInDefault="1" showInWebsite="1" showInStore="0" canRestore="1">
<label>Calculate Handling Fee</label>
<source_model>Magento\Shipping\Model\Source\HandlingType</source_model>
</field>
<field id="handling_fee" translate="label" type="text" sortOrder="8" showInDefault="1" showInWebsite="1" showInStore="0">
<label>Handling Fee</label>
<validate>validate-number validate-zero-or-greater</validate>
</field>
<field id="sort_order" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0">
<label>Sort Order</label>
</field>
<field id="title" translate="label" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Title</label>
</field>
<field id="sallowspecific" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="0" canRestore="1">
<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" translate="label" type="multiselect" sortOrder="91" showInDefault="1" showInWebsite="1" showInStore="0">
<label>Ship to Specific Countries</label>
<source_model>Magento\Directory\Model\Config\Source\Country</source_model>
<can_be_empty>1</can_be_empty>
</field>
<field id="showmethod" translate="label" type="select" sortOrder="92" showInDefault="1" showInWebsite="1" showInStore="0">
<label>Show Method if Not Applicable</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
<frontend_class>shipping-skip-hide</frontend_class>
</field>
<field id="specificerrmsg" translate="label" type="textarea" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
<label>Displayed Error Message</label>
</field>
</group>
</section>
</system>
</config>
Шаг 4: Включить модуль
Это последний шаг, вам нужно запустить команду обновления, чтобы включить метод простой доставки.
php bin/magento setup:upgrade
Статья взята с сайта: https://www.mageplaza.com/