magento2 支付页面如何给shipping method添加自定义属性
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顺便改个东西 都麻烦的很 要改很多东西 才能匹配他的尿性。不然的话 就寸步难行。
