脚本宝典收集整理的这篇文章主要介绍了php – Magento Shipping Method加载速度,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Magento是正常的吗?或者是否有加快查询速度或是否有任何修改或黑客我可以让它只查询允许方法?
好心提醒.
谢谢.
我不相信联邦快递的请求会造成延误,但是要帮助我们解决问题(并回答你的问题): –
发出请求的代码是:
//file: app/code/core/Mage/Usa/Modell/Shipping/Carrier/Fedex.PHP //class: Mage_Usa_Model_Shipping_Carrier_Fedex //function: _getQuotes() PRotected function _getQuotes() { $this->_result = Mage::getModel('shipping/rate_result'); // make separate request for Smart Post method $AllowedMethods = explode(',',$this->getConfigData('allowed_methods')); if (in_array(self::RATE_REQUEST_SMARTPOST,$allowedMethods)) { $response = $this->_doRatesRequest(self::RATE_REQUEST_SMARTPOST); $preparedSmartpost = $this->_prepareRateResponse($response); if (!$preparedSmartpost->getError()) { $this->_result->apPEnd($preparedSmartpost); } } // make general request for all methods $response = $this->_doRatesRequest(self::RATE_REQUEST_GENERAL); $preparEdgeneral = $this->_prepareRateResponse($response); if (!$preparedGeneral->getError() || ($this->_result->getError() && $preparedGeneral->getError())) { $this->_result->append($preparedGeneral); } return $this->_result; }
答案1:是的,Magento确实收集了所有方法,无论您通过管理员允许哪种方法.它在两个请求中完成,一个用于SMARTPOST,另一个用于所有其他方法.
解答2:如果您想要一种服务类型,那么您正在寻求设置,例如,
$ratesRequest [‘RequestedShipment’] [‘ServiceType’] =’INTERNATIONAL_ECONOMY’;
对于测试*,您可以从中复制文件
//file: app/code/core/Mage/Usa/Modell/Shipping/Carrier/Fedex.PHP
至
//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.PHP
//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.PHP //class: Mage_Usa_Model_Shipping_Carrier_Fedex //function: _getQuotes() protected function _getQuotes() { $this->_result = Mage::getModel('shipping/rate_result'); // make separate request for Smart Post method $allowedMethods = explode(',$this->getConfigData('allowed_methods')); //a liTTLe test code for me; you can omIT it //echo(nl2br(print_r($allowedMethods,true))); //exit(); /* Array<br /> (<br /> [0] => EUROPE_First_INTERNATIONAL_PRIORITY<br /> [1] => FEDEX_1_DAY_FReiGHT<br /> [2] => FEDEX_2_DAY_FREIGHT<br /> [3] => FEDEX_2_DAY<br /> [4] => FEDEX_2_DAY_am<br /> [5] => FEDEX_3_DAY_FREIGHT<br /> [6] => FEDEX_EXPress_SAVER<br /> [7] => FEDEX_GROUND<br /> [8] => FIRST_OVERNIGHT<br /> [9] => GROUND_HOME_DELIVERY<br /> [10] => INTERNATIONAL_ECONOMY<br /> [11] => INTERNATIONAL_ECONOMY_FREIGHT<br /> [12] => INTERNATIONAL_FIRST<br /> [13] => INTERNATIONAL_GROUND<br /> [14] => INTERNATIONAL_PRIORITY<br /> [15] => INTERNATIONAL_PRIORITY_FREIGHT<br /> [16] => PRIORITY_OVERNIGHT<br /> [17] => SMART_POST<br /> [18] => STANDARD_OVERNIGHT<br /> [19] => FEDEX_FREIGHT<br /> [20] => FEDEX_NATIONAL_FREIGHT<br /> )<br /> */ //THIS IS THE NEW BIT (non core) if(count($allowedMethods)==1){ //then there is only one method so use it $response = $this->_doRatesRequest($allowedMethods[0]); $preparedSingleRate = $this->_prepareRateResponse($response); if (!$preparedSingleRate->getError() || ($this->_result->getError() && $preparedSingleRate->getError())) { $this->_result->append($preparedSingleRate); } }else{ //revert to default treatment: if (in_array(self::RATE_REQUEST_SMARTPOST,$allowedMethods)) { $response = $this->_doRatesRequest(self::RATE_REQUEST_SMARTPOST); $preparedSmartpost = $this->_prepareRateResponse($response); if (!$preparedSmartpost->getError()) { $this->_result->append($preparedSmartpost); } } // make general request for all methods $response = $this->_doRatesRequest(self::RATE_REQUEST_GENERAL); $preparedGeneral = $this->_prepareRateResponse($response); if (!$preparedGeneral->getError() || ($this->_result->getError() && $preparedGeneral->getError())) { $this->_result->append($preparedGeneral); } } return $this->_result; }
并在同一文件中编辑函数_formRateRequest的结尾以应对特定的速率请求目的:
//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.PHP //class: Mage_Usa_Model_Shipping_Carrier_Fedex //function: formRateRequest() protected function _formRateRequest($purpose) { $r = $this->_rawRequest; //... //... if ($purpose == self::RATE_REQUEST_GENERAL) { $ratesRequest['RequestedShipment']['RequestedPackageLineItems'][0]['InsuredValue'] = array( 'Amount' => $r->getValue(),'Currency' => $this->getCurrencyCode() ); } else if ($purpose == self::RATE_REQUEST_SMARTPOST) { $ratesRequest['RequestedShipment']['ServiceType'] = self::RATE_REQUEST_SMARTPOST; $ratesRequest['RequestedShipment']['SmartPostDetail'] = array( 'Indicia' => ((float)$r->getWeight() >= 1) ? 'PARCEL_SELECT' : 'PRESORTED_STANDARD','HubId' => $this->getConfigData('smartpost_hubid') ); } else { //THIS IS THE NEW BIT (non core) $ratesRequest['RequestedShipment']['RequestedPackageLineItems'][0]['InsuredValue'] = array( 'Amount' => $r->getValue(),'Currency' => $this->getCurrencyCode() ); $ratesRequest['RequestedShipment']['ServiceType'] = $purpose; } return $ratesRequest; }//end function _formRateRequest
您可以通过添加一些计时器和一些日志记录(到VAR / LOG / shipping_fedex.log)来运行计时测试,如下所示:
//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.PHP //class: Mage_Usa_Model_Shipping_Carrier_Fedex //function: protected function _getQuotes() { $this->_result = Mage::getModel('shipping/rate_result'); // make separate request for Smart Post method $allowedMethods = explode(',$this->getConfigData('allowed_methods')); //THIS IS THE NEW BIT (non core) if(count($allowedMethods)==1){ //then there is only one method so use it $time_start = microtime(true); $response = $this->_doRatesRequest($allowedMethods[0]); $preparedSingleRate = $this->_prepareRateResponse($response); if (!$preparedSingleRate->getError() || ($this->_result->getError() && $preparedSingleRate->getError())) { $this->_result->append($preparedSingleRate); } $time_end = microtime(true); $time = $time_end - $time_start; $this->_debug('Polled '.$allowedMethods[0].' in '.$time.' seconds'); }else{ //revert to default treatment: $time_start = microtime(true); if (in_array(self::RATE_REQUEST_SMARTPOST,$allowedMethods)) { $response = $this->_doRatesRequest(self::RATE_REQUEST_SMARTPOST); $preparedSmartpost = $this->_prepareRateResponse($response); if (!$preparedSmartpost->getError()) { $this->_result->append($preparedSmartpost); } } $time_end = microtime(true); $time = $time_end - $time_start; $this->_debug('Polled SMART_POST in '.$time.' seconds'); // make general request for all methods $time_start = microtime(true); $response = $this->_doRatesRequest(self::RATE_REQUEST_GENERAL); $preparedGeneral = $this->_prepareRateResponse($response); if (!$preparedGeneral->getError() || ($this->_result->getError() && $preparedGeneral->getError())) { $this->_result->append($preparedGeneral); } $time_end = microtime(true); $time = $time_end - $time_start; $this->_debug('Polled all methods in '.$time.' seconds'); } return $this->_result; }
我正在点击FedEx沙箱但是为了什么值得我在日志文件中记录这些时间:
//file: var/log/shipping_fedex.log Polled SMART_POST in 1.1807501316071 seconds Polled SMART_POST in 1.3307409286499 seconds Polled all methods in 0.78275394439697 seconds //returns warning 556 [Message] => There are no valid services available. Polled all methods in 2.0135650634766 seconds //returns 8 valid shipping methods Polled all methods in 1.3563330173492 seconds //returns INTERNATIONAL_ECONOMY and INTERNATIONAL_PRIORITY //single service request results Polled FEDEX_2_DAY in 3.1365180015564 seconds Polled FEDEX_2_DAY in 3.6471431255341 seconds Polled FEDEX_2_DAY in 2.1428818702698 seconds Polled INTERNATIONAL_ECONOMY in 2.2340540885925 seconds Polled INTERNATIONAL_ECONOMY in 2.9664940834045 seconds
*对于生产来说,当然习惯上说’制作扩展Mage_Usa_Model_Shipping_Carrier_Fedex类的自己的模块’.
**注意:我必须强制将请求中发送的货币代码强制为“USD”,以使FedEx返回SMART_POST以外的服务类型的任何运费,因此如果您正在测试此事,请注意这一点.
以上是脚本宝典为你收集整理的php – Magento Shipping Method加载速度全部内容,希望文章能够帮你解决php – Magento Shipping Method加载速度所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。