在prestashop 1.7中,我使用了API(运费报价单)来获取可用的承运人/货运提供商。在CheckoutDeliveryStep.php
课上,我写了以下内容
$carrierOptionsArr = array( );
if(!($xml===false) && $xml->children("soap",true)->count() ){
$GetRatingEngineQuoteResponse = $xml->children("soap",true)->Body->children()->GetRatingEngineQuoteResponse;
$errorsList = $GetRatingEngineQuoteResponse->children()->GetRatingEngineQuoteResult->children()->ValidationErrors->children();
foreach ($errorsList->B2berror as $key => $value) {
# code...
echo "".$value->children()->ErrorMessage."<br>";
}
$carrierOptions = $GetRatingEngineQuoteResponse->children()->GetRatingEngineQuoteResult->children()->QuoteCarrierOptions;
foreach ($carrierOptions->children() as $key => $value) {
//Carrier option id
$carrier = array();
$carrier["id"] = "".$value->children()->CarrierOptionId;
//CArrier Name
$carrier["name"] = "".$value->children()->CarrierName;
//Quote Amount
$carrier["amount"] = "".$value->children()->QuoteAmount;
$carrierOptionsArr[] = $carrier;
}
}
return $carrierOptionsArr;
并在此函数中呈现
public function render(array $extraParams = array())
{
return $this->renderTemplate(
$this->getTemplate(),$extraParams,array(
'hookDisplayBeforeCarrier' => Hook::exec('displayBeforeCarrier',array('cart' => $this->getcheckoutSession()->getcart())),'hookDisplayAfterCarrier' => Hook::exec('displayAfterCarrier','id_address' => $this->getcheckoutSession()->getIdAddressDelivery(),'delivery_options' => $this->getcheckoutSession()->getDeliveryOptions(),'delivery_option' => $this->getcheckoutSession()->getSelectedDeliveryOption(),'recyclable' => $this->getcheckoutSession()->isRecyclable(),'recyclablePackAllowed' => $this->isRecyclablePackAllowed(),'delivery_message' => $this->getcheckoutSession()->getMessage(),'gift' => array(
'allowed' => $this->isgiftAllowed(),'isgift' => $this->getcheckoutSession()->getgift()['isgift'],'label' => $this->getTranslator()->trans(
'I would like my order to be gift wrapped %cost%',array('%cost%' => $this->getgiftCostForLabel()),'Shop.Theme.Checkout'
),'message' => $this->getcheckoutSession()->getgift()['message']
),'options' => $this->getcarriers()
)
);
}
在订单控制器页面显示承运人列表。但是,选择项目不会更新或不会被选为载体。从prestashop admin后端添加的运营商在运营商列表中的此处工作正常。如何像常规结帐流程那样将自定义承运人加入购物车订单?谢谢