首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Magento 1.9到Magento 2.2的航运扩展

将Magento 1.9到Magento 2.2的航运扩展
EN

Stack Overflow用户
提问于 2017-12-03 04:45:24
回答 1查看 165关注 0票数 1

我正在尝试迁移一个定制的Magento1.9扩展到Magento2.2。我做了很多搜索,但是找不到关于我试图迁移的用例的信息。我最初使用本教程进行了1.9个扩展。我知道有一个工具可以帮助端口扩展,但我尝试手动完成,因为我无法让该工具为我工作。

每次更新购物车以计算自定义运费时,都会运行自定义配送扩展。目标是在Magento2.2中重新创建这个扩展,这样每次打开或更新购物车时,它都会运行并计算一个运输成本,然后通过结帐过程传播。

下面是Magento1.9扩展的概述。对于如何将其翻译成Magento2.2,有什么建议吗?

/app/etc/modules/Extensions_Shipper.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<config>
<modules>
    <Extensions_Shipper>
        <active>true</active>
        <codePool>local</codePool>
        <depends>
            <Mage_Shipping />
        </depends>
    </Extensions_Shipper>
</modules>

/app/code/local/Extensions/Shipper/etc/config.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
    <Extensions_Shipper>
        <module>0.0.1</module>
    </Extensions_Shipper>
</modules>
<global>
    <models>
        <extensions_shipper>
            <class>Extensions_Shipper_Model</class>
        </extensions_shipper>
    </models>
</global>
<default>
    <carriers>
        <extensions_shipper>
            <active>1</active>
            <model>extensions_shipper/carrier</model>
            <title>Shipping Options</title>
            <sort_order>10</sort_order>
            <sallowspecific>0</sallowspecific>
        </extensions_shipper>
    </carriers>
</default>

/app/code/local/Extensions/Shipper/Model/Carrier.php

代码语言:javascript
复制
<?php
class Extensions_Shipper_Model_Carrier extends Mage_Shipping_Model_Carrier_Abstract implements Mage_Shipping_Model_Carrier_Interface
{
    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
        //Are there magento 2.2 equivalence for the following?
        $addressInfo = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getData();
        $result = Mage::getModel('shipping/rate_result');
        $items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
        $currentItem = Mage::getModel('catalog/product')->load($items[$itemsArray[$i]]->getProduct()->getId());
        Mage::getSingleton('core/session')->addNotice('some text');
        //$result = some calculations for shipping rate
        return $result;
    }

    public function getAllowedMethods()
    {
        return array();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-12-06 14:36:09

您可以在checkout_cart_add_product_complete事件上创建一个事件观察者来执行逻辑来更新运输成本。

代码语言:javascript
复制
namespace MyCompany\MyModule\Observer;

use Magento\Framework\Event\ObserverInterface;

class MyObserver implements ObserverInterface
{
  public function __construct()
  {
    //Observer initialization code...
    //You can use dependency injection to get any class this observer may need.
  }

  public function execute(\Magento\Framework\Event\Observer $observer)
  {
    //Observer execution code...
  }
}

订阅events.xml中的事件

代码语言:javascript
复制
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="my_module_event_before">
        <observer name="myObserverName" instance="MyCompany\MyModule\Observer\MyObserver" />
    </event>
    <event name="my_module_event_after">
        <observer name="myObserverName" instance="MyCompany\MyModule\Observer\AnotherObserver" />
    </event>
</config>

参见Magento关于事件和观察者的文档:http://devdocs.magento.com/guides/v2.0/extension-dev-guide/events-and-observers.html

有关所有Magento2.2事件的列表,请参见:https://cyrillschumacher.com/magento-2.2-list-of-all-dispatched-events/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47615339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档