实战:Magento 2 添加一个线下配送方法

·

·

在电子商务领域,配送方式的选择对于顾客的购物体验至关重要。Magento 2 作为一个强大的电商平台,提供了多种配送方式的集成选项。然而,有时候我们可能需要添加一个特定的线下配送方法来满足特定的业务需求。本文将详细介绍如何在 Magento 2 中添加一个线下配送方法,并提供丰富的示例。

一、Magento 2 配送方式概述

Magento 2 自带了一些常见的配送方式,如快递配送、自提等。这些配送方式可以满足大多数电商业务的基本需求。但是,对于一些特殊的业务场景,我们可能需要添加一个自定义的线下配送方法。

例如,对于一家本地的零售商,可能需要提供店内自提和同城配送的线下配送方式。或者对于一家提供定制服务的企业,可能需要一种特殊的线下配送方式,如客户到工厂自取。

二、准备工作

在开始添加线下配送方法之前,我们需要进行一些准备工作。首先,确保你已经安装了 Magento 2 开发环境,并且熟悉 Magento 2 的基本架构和开发流程。其次,了解 Magento 2 的配送模块的结构和工作原理,这将有助于我们更好地理解如何添加一个新的配送方法。

三、创建配送模块

  1. 创建模块目录结构
    首先,我们需要创建一个新的 Magento 2 模块来实现线下配送方法。在 Magento 2 的根目录下,创建一个名为 “Vendor_OfflineDelivery” 的目录,其中 “Vendor” 是你的模块供应商名称,可以根据实际情况进行修改。

在 “Vendor_OfflineDelivery” 目录下,创建以下文件和目录结构:

  • etc/module.xml:模块的配置文件。
  • Registration.php:模块的注册文件。
  • etc/config.xml:模块的配置文件。
  • Model/Carrier/OfflineDelivery.php:线下配送方法的模型类。
  1. 编写模块配置文件
    打开 “etc/module.xml” 文件,添加以下内容:

收起

xml

复制

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Framework/Module/etc/module.xsd">
    <module name="Vendor_OfflineDelivery" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Shipping"/>
        </sequence>
    </module>
</config>

这个配置文件定义了模块的名称和版本号,并指定了模块的依赖关系。在这个例子中,我们的线下配送模块依赖于 Magento_Shipping 模块。

  1. 编写模块注册文件
    打开 “Registration.php” 文件,添加以下内容:

收起

php

复制

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

这个注册文件用于将我们的模块注册到 Magento 2 的模块系统中。

  1. 编写模块配置文件
    打开 “etc/config.xml” 文件,添加以下内容:

收起

xml

复制

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Shipping/etc/config.xsd">
    <default>
        <carriers>
            <offlinedelivery>
                <active>1</active>
                <model>Vendor\OfflineDelivery\Model\Carrier\OfflineDelivery</model>
                <title>Offline Delivery</title>
                <sort_order>10</sort_order>
                <sallowspecific>0</sallowspecific>
            </offlinedelivery>
        </carriers>
    </default>
</config>

这个配置文件定义了我们的线下配送方法。其中,“offlinedelivery” 是配送方法的代码,“active” 表示该配送方法是否启用,“model” 是配送方法的模型类,“title” 是配送方法的名称,“sort_order” 是配送方法的排序顺序,“sallowspecific” 表示该配送方法是否允许选择特定的地区。

四、实现线下配送方法模型类

  1. 创建模型类目录结构
    在 “Vendor_OfflineDelivery” 模块目录下,创建以下目录结构:
  • Model/Carrier/:线下配送方法的模型类目录。
  1. 编写线下配送方法模型类
    打开 “Model/Carrier/OfflineDelivery.php” 文件,添加以下内容:

收起

php

复制

<?php
namespace Vendor\OfflineDelivery\Model\Carrier;

use Magento\Quote\Model\Quote\Address\RateRequest;
use Magento\Shipping\Model\Rate\Result;

class OfflineDelivery extends \Magento\Shipping\Model\Carrier\AbstractCarrier implements
    \Magento\Shipping\Model\Carrier\CarrierInterface
{
    protected $_code = 'offlinedelivery';

    public function __construct(
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
        \Magento\Quote\Model\Quote\Address\RateResult\ErrorFactory $rateErrorFactory,
        \Psr\Log\LoggerInterface $logger,
        array $data = []
    ) {
        parent::__construct($scopeConfig, $rateErrorFactory, $logger, $data);
    }

    public function collectRates(RateRequest $request)
    {
        if (!$this->getConfigFlag('active')) {
            return false;
        }

        $result = $this->_rateResultFactory->create();

        $shippingPrice = $this->getConfigData('price');

        $method = $this->_rateMethodFactory->create();
        $method->setCarrier($this->_code);
        $method->setCarrierTitle($this->getConfigData('title'));
        $method->setMethod($this->_code);
        $method->setMethodTitle($this->getConfigData('title'));
        $method->setPrice($shippingPrice);
        $method->setCost($shippingPrice);

        $result->append($method);

        return $result;
    }

    public function getAllowedMethods()
    {
        return [$this->_code => $this->getConfigData('title')];
    }
}

这个模型类实现了 Magento 2 的配送方法接口,定义了线下配送方法的具体逻辑。在这个例子中,我们实现了 collectRates 方法和 getAllowedMethods 方法,分别用于计算配送费用和返回允许的配送方法。

五、配置线下配送方法

  1. 在管理后台中配置配送方法
    登录 Magento 2 的管理后台,进入 “Stores> Configuration > Sales > Shipping Methods” 页面。在这里,你可以找到我们刚刚添加的线下配送方法 “Offline Delivery”,并进行配置。

你可以设置配送方法的名称、价格、是否启用等选项。根据你的业务需求,进行相应的配置。

  1. 在前台页面中显示配送方法
    在前台页面中,当顾客进行购物结算时,他们将能够看到我们添加的线下配送方法。如果需要对配送方法的显示进行定制,可以通过修改模板文件来实现。

六、测试线下配送方法

  1. 创建测试订单
    在 Magento 2 的前台页面中,创建一个测试订单,并选择线下配送方法。确保订单的收货地址在配送范围内,并填写正确的联系信息。
  2. 检查配送费用和订单状态
    在订单提交后,检查订单的配送费用是否正确计算,并且订单状态是否更新为待处理状态。如果一切正常,说明我们的线下配送方法已经成功添加并可以正常使用。

七、总结与展望

通过以上步骤,我们成功地在 Magento 2 中添加了一个线下配送方法。线下配送方法可以满足特定的业务需求,为顾客提供更多的配送选择。在实际应用中,可以根据具体的业务场景进一步扩展和优化线下配送方法的功能。

例如,可以添加更多的配送选项,如指定配送时间、提供配送跟踪等。同时,还可以通过开发插件和扩展来增强线下配送方法的功能,与其他 Magento 2 模块进行集成。

总之,Magento 2 的强大灵活性使得添加线下配送方法成为可能,为电商企业提供了更多的创新和发展空间。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注