magento2 支付页面如何给shipping method添加自定义属性

4.51K 浏览开发笔记

magento2 支付页面如何给shipping method添加自定义属性

在开发过程中,我们需要在所选运输方式(shipping method)里显示一些说明文本,这个说明文本在后台设置,需要在前台输出来。

比如要显示的属性字段为intro_text。运输方式为ysfs。

假设你已经创建了运输方式,不会的请自行谷歌。

一,先在system.xml里添加intro_text

                                      

二,在etc/extension_attributes.xml里定义

             

在m2里 我们不能直接修改核心模块,并且shipping method这些显示的字段都是通过api/data来定义的,非常不好理解,里面的字段都是写死了的。我们要扩展的话 只能通过extension_attributes来扩展。不能直接改源码,重写api/data也不合理。

只能按照m2的规则来做,通过extension_attributes来添加扩展属性。

我这里加的扩展属性是intro_text,字符串类型。

三,扩展重写MagentoQuoteModelCartShippingMethodConverter

因为我们前台显示的shipping method内容,都是在这个类里 赋值,并输出来的。

所以我们需要改写这个类,在这个类里 把intro_text的值加进去。那样的话 前台页面才会显示intro_text的值。

我们一般用plugin来扩展某个类具体的某个方法

1,在etc/di.xml里定义

                

2,创建ZouDemoPluginQuoteCartShippingMethodConverter.php

extensionFactory = $extensionFactory;        $this->helper = $helper;    }     public function afterModelToDataObject(         MagentoQuoteModelCartShippingMethodConverter $subject,         $result,         $rateModel, $quoteCurrencyCode     ) {      $code = $rateModel->getCarrier();//获取该运输方式的code      if($code != 'ysfs'){      return $result;      }      //读取后台设置的intro_text文本      $introText = $this->helper->getConfig('carriers/ysfs/intro_text');      $extensibleAttribute =  ($result->getExtensionAttributes())             ? $result->getExtensionAttributes()             : $this->extensionFactory->create();         //$rateModel->getIntroText()         //         $extensibleAttribute->setIntroText($introText);         $result->setExtensionAttributes($extensibleAttribute);         return $result;     } }

注意:这里要先判断getExtensionAttributess是否存在,不存在的话 需要$this->extensionFactory->create()下,不然的话 加不进去 会报错。

四,改写前台shipping method模版

1,创建ZouDemoviewfrontendlayoutcheckout_index_index.xml

                                                                                                                                                                                                                                                                                                                                                                                                                                     Zou_Demo/shipping-address/shipping-method-item                                                                                                                                                                                                                                                                                                                                                                             

也就是说把默认的shipping method模版改成我们自己的,这样的话 我们就是任意修改了。

2,创建ZouDemoviewfrontendwebtemplateshipping-addressshipping-method-item.html

                                                                                  
        
                                 

我们在ysfs这个运输方式里下面显示里intro_text文本。

直接读取method.extension_attributes.intro_text这里的值就ok了。这个值我们在第三步里已经赋值了,是有值的。

五,测试

m2顺便改个东西 都麻烦的很 要改很多东西 才能匹配他的尿性。不然的话 就寸步难行。

0