一部の顧客が配信方法が利用できないのはなぜですか?
-
16-10-2019 - |
質問
4つの配送方法があります。
古い顧客は2つの方法しか入手しません。別のメールで同じ顧客を作成しました。 4つの配送方法すべてが取得されます。
コードとDBテーブルに潜りました sales_flat_quote_shipping_rate.
address_idによるソート:古い顧客向け:2レートレコード。同じ新しい顧客の場合:4レートレコード。
なぜそれが起こるのですか?レートレコードはどこで作成されますか?
更新1:
私は住所に依存しません。それは製品に依存します。製品が体重を満たしている場合、顧客はいくつかの配送方法を見ることができません。今、問題はなぜですか?)
解決
その理由がありました proccessAdditionalValidation
機能します Mage_Shipping_Model_Carrier_Abstract
クラス:
/**
* Processing additional validation to check is carrier applicable.
*
* @param Mage_Shipping_Model_Rate_Request $request
* @return Mage_Shipping_Model_Carrier_Abstract|Mage_Shipping_Model_Rate_Result_Error|boolean
*/
public function proccessAdditionalValidation(Mage_Shipping_Model_Rate_Request $request)
{
$maxAllowedWeight = (float) $this->getConfigData('max_package_weight');
$error = null;
$showMethod = $this->getConfigData('showmethod');
foreach ($request->getAllItems() as $item) {
if ($item->getProduct() && $item->getProduct()->getId()) {
// here I got true
if ($item->getProduct()->getWeight() > $maxAllowedWeight) { $error = Mage::getModel('shipping/rate_result_error');
$error->setCarrier($this->_code)
->setCarrierTitle($this->getConfigData('title'));
$errorMsg = $this->getConfigData('specificerrmsg');
$error->setErrorMessage($errorMsg?$errorMsg:Mage::helper('shipping')->__('The shipping module is not available.'));
break;
}
}
}
if (null !== $error && $showMethod) {
return $error;
} elseif (null !== $error) {
return false;
}
return $this;
}
所属していません magento.stackexchange