【问题标题】:How to add custom attribute to shipping method in magento2如何在magento2中将自定义属性添加到运输方式
【发布时间】:2016-03-16 02:59:03
【问题描述】:

我正在尝试在 magento2 中创建一个允许将自定义消息添加到运营商或特定方法的模块。我成功地创建了带有网格和表单的管理部分。现在我正在努力在前端显示这个。如果数据在estimate-shipping-methods 结果中,我已经创建了运行良好的js 和模板文件。我认为最简单的方法是将此消息添加到评分模型中。我创建了一个插件

<type name="Magento\Quote\Model\ShippingMethodManagement">
    <plugin name="hatimeria_shippingrateinfo_add_message_to_rates"
            type="Hatimeria\ShippingRateInfo\Plugin\ShippingMethodManagement"
            sortOrder="10"
            disabled="false"/>
</type>

获取当前费率的消息并将它们添加到模型中。一切正常,但此数据不会输出到 json 结果。正如我发现的那样,magento 不会简单地输出模型中的所有数据,而是只返回那些由ShippingMethodInterface 定义的数据。 然后我注意到有一个叫做 extension_attributes 的东西,根据文档,这应该允许我将我的消息添加到结果中。所以看看docs 和 Magento_ProductVideo 模块,我做了以下事情:

etc/extension_attributes.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="Magento\Quote\Api\Data\ShippingMethodInterface">
    <attribute code="rate_info" type="Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodInterface" />
</extension_attributes>

etc/di.xml我添加了对我的界面的偏好

<preference for="Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodInterface" type="Hatimeria\ShippingRateInfo\Model\Rate\RateInfo" />

现在是类,Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodIntarface.php中的第一个接口

namespace Hatimeria\ShippingRateInfo\Api\Quote\Data;

use Magento\Framework\Api\ExtensibleDataInterface;

/**
 * Shipping Rate Info data interface
 *
 * @api
 */
interface ShippingMethodInterface extends ExtensibleDataInterface
{

    const RATEINFO = 'rate_info';

    /**
     * Retrieve rate info message
     *
     * @return string
     */
    public function getRateInfo();

    /**
     * Set rate info message
     *
     * @param string $rateInfo
     * @return $this
     */
    public function setRateInfo($rateInfo);
}

以及在Hatimeria\ShippingRateInfo\Model\Rate\RateInfo.php中实际实现这一点的类

namespace Hatimeria\ShippingRateInfo\Model\Rate;

use Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodInterface;
use Magento\Framework\Model\AbstractExtensibleModel;

class RateInfo extends AbstractExtensibleModel implements ShippingMethodInterface
{
    /**
     * Retrieve rate info message
     *
     * @return string
     */
    public function getRateInfo()
    {
        return $this->getData(self::RATEINFO);
    }

    /**
     * Set rate info message
     *
     * @param string $rateInfo
     * @return $this
     */
    public function setRateInfo($rateInfo)
    {
        return $this->setData(self::RATEINFO, $rateInfo);
    }
}

这是行不通的。生成费率时,费率模型不会返回额外的扩展。任何帮助将不胜感激。

【问题讨论】:

标签: php magento2 magento-2.0


【解决方案1】:

尝试以下步骤:

  1. 运行 bin/magento setup:di:compile 以生成 ShippingMethodExtensionInterface 和实现此功能的类(即使禁用缓存,也不会在每个请求上执行此操作)
  2. 在您的插件中实例化Magento\Quote\Api\Data\ShippingMethodExtension 并将数据添加到该对象,然后将整个对象添加到带有$entity-&gt;setExtensionAttributes($extensionModel) 的实体

【讨论】:

    猜你喜欢
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2017-12-23
    • 2011-09-25
    相关资源
    最近更新 更多