Ücretsiz gönderim geçerliyse, Kargo toplamı satış teklifi kalemlerinin satır_ ağırlığını neden 0 olarak ayarlar?


21

Önsöz: Bu, Magento'nun topluluk (ve kendim için) mimarisine ilişkin yazılı bir gözlem ve aynı zamanda gerçek bir soru olarak hizmet etmek içindir. Yoğun olarak değiştirilmiş bir araba ve ödeme deneyimi ile çalışıyoruz, ancak bu sorunun kaynağı Magento'nun ana mantığı içinde.

Arka fon

Standart alışveriş sepeti fiyat kuralları işlevini kullanarak ücretsiz bir nakliye kuponu oluşturduk. Kuponda hiçbir koşul yoktur ve tek eylem bunun Free Shippingayarlandığı şeydir For matching items only. Hiçbir koşul olduğundan, bu ayarlar free_shippingiçin 1satış alıntı öğelerin tümü için.

Geleneksel olduğu gibi, Ücretsiz Kargo sevkıyat yöntemini de etkinleştirdik. Freeshippingİstek ücretsiz kargo veya subtotal eşleşmeye sahip veya eşiğini aştığında taşıyıcı modeli oranları sağlayacaktır (ama biz eşik seçeneği kullanmıyorsanız). Bakınız Mage_Shipping_Model_Carrier_Freeshipping::collectRates:

$this->_updateFreeMethodQuote($request);

if (($request->getFreeShipping()) // <-- This is the condition we're relying on
    || ($request->getBaseSubtotalInclTax() >=
        $this->getConfigData('free_shipping_subtotal'))
) {
    /* Snip: Add $0.00 method to the result */
}

Ve Mage_Shipping_Model_Carrier_Freeshipping::_updateFreeMethodQuoteşuna benziyor:

protected function _updateFreeMethodQuote($request)
{
    $freeShipping = false;
    $items = $request->getAllItems();
    $c = count($items);
    for ($i = 0; $i < $c; $i++) {
        if ($items[$i]->getProduct() instanceof Mage_Catalog_Model_Product) {
            if ($items[$i]->getFreeShipping()) {
                $freeShipping = true;
            } else {
                return;
            }
        }
    }
    if ($freeShipping) {
        $request->setFreeShipping(true);
    }
}

Bu nedenle, tüm eşyalar free_shippingbir truthy değerine ayarlandığı sürece (ki bu kupondan dolayı olacaktır) ücretsiz nakliye alacağız. Ve yapıyoruz!

Sorun

Bununla birlikte, büyük bir yan etkisi vardır: row_weightFedEx taşıyıcısının özelleştirilmiş sürümünde olduğu gibi, bir öğeye dayanan herhangi bir gönderi yöntemi, her öğenin ücretsiz gönderim etkin olduğunda row_weightayarlandığı için uygun gönderim ücretlerini hesaplayamaz 0.

İlginçtir ki, Magento'nun varsayılan nakliye gemilerinin hiçbiri aslında güvenmiyor row_weight, ancak neden / ne zaman row_weightayarlandığını belirledikten sonra buna varacağız 0.

Neden row_weightayarlandığını bulmak0

Bu kısmı kazmak oldukça kolaydı. Sevkıyat hesaplamalarının büyük bir kısmı Mage_Sales_Model_Quote_Address_Total_Shipping::collect, aşağıdakiler dahil olmak üzere row_weight, içinde 0:

public function collect(Mage_Sales_Model_Quote_Address $address)
{
    parent::collect($address);

    foreach ($items as $item) {
        /* Snip: Handling virtual items and parent items */

        if ($item->getHasChildren() && $item->isShipSeparately()) {
            /* Snip: Handling items with children */
        }
        else {
            if (!$item->getProduct()->isVirtual()) {
                $addressQty += $item->getQty();
            }
            $itemWeight = $item->getWeight();
            $rowWeight  = $itemWeight*$item->getQty();
            $addressWeight+= $rowWeight;
            if ($freeAddress || $item->getFreeShipping()===true) {
                $rowWeight = 0;
            } elseif (is_numeric($item->getFreeShipping())) {
                $freeQty = $item->getFreeShipping();
                if ($item->getQty()>$freeQty) {
                    $rowWeight = $itemWeight*($item->getQty()-$freeQty);
                }
                else {
                    $rowWeight = 0;
                }
            }
            $freeMethodWeight+= $rowWeight;
            $item->setRowWeight($rowWeight);
        }
    }

Bu neden Magento'nun varsayılan operatörlerini etkilemiyor?

Bir için düzenli ifade arama yaparsanız /row_?weight/i(örneğin getRowWeight, setRowWeight, setData('row_weight')içinde, vb) Mage_Shipping(basit taşıyıcılar) ve Mage_Usa(FedEx, UPS, ve diğer bazı taşıyıcılar), hiçbir şey açılır. Niye ya? Çünkü varsayılan taşıyıcılar, her bir öğenin ağırlığını değil, toplam adres ağırlığını kullanır.

Örneğin, bakalım Mage_Usa_Model_Shipping_Carrier_Fedex::setRequest:

public function setRequest(Mage_Shipping_Model_Rate_Request $request)
{
    $this->_request = $request;

    $r = new Varien_Object();

    /* Snip */

    $weight = $this->getTotalNumOfBoxes($request->getPackageWeight());
    $r->setWeight($weight);
    if ($request->getFreeMethodWeight()!= $request->getPackageWeight()) {
        $r->setFreeMethodWeight($request->getFreeMethodWeight());
    }

Ve talep paket ağırlığını nereden alıyor? Cevap içinde Mage_Sales_Model_Quote_Address::requestShippingRates:

public function requestShippingRates(Mage_Sales_Model_Quote_Item_Abstract $item = null)
{
    /** @var $request Mage_Shipping_Model_Rate_Request */
    $request = Mage::getModel('shipping/rate_request');
    /* Snip */
    $request->setPackageWeight($item ? $item->getRowWeight() : $this->getWeight());

Burada kullanımını görmezden gelebiliriz $item->getRowWeight()çünkü requestShippingRatesbelirli bir öğeyi parametre olarak sağlamadan çağrılır Mage_Sales_Model_Quote_Address_Total_Shipping::collect:

public function collect(Mage_Sales_Model_Quote_Address $address)
{
    parent::collect($address);

    foreach ($items as $item) {
        /* Snip: Handling virtual items and parent items */

        if ($item->getHasChildren() && $item->isShipSeparately()) {
            /* Snip: Handling items with children */
        }
        else {
            if (!$item->getProduct()->isVirtual()) {
                $addressQty += $item->getQty();
            }
            $itemWeight = $item->getWeight();
            $rowWeight  = $itemWeight*$item->getQty();
            $addressWeight+= $rowWeight;
            if ($freeAddress || $item->getFreeShipping()===true) {
                $rowWeight = 0;
            } elseif (is_numeric($item->getFreeShipping())) {
                $freeQty = $item->getFreeShipping();
                if ($item->getQty()>$freeQty) {
                    $rowWeight = $itemWeight*($item->getQty()-$freeQty);
                }
                else {
                    $rowWeight = 0;
                }
            }
            $freeMethodWeight+= $rowWeight;
            $item->setRowWeight($rowWeight);
        }
    }

    $address->setWeight($addressWeight);
    $address->setFreeMethodWeight($freeMethodWeight);

    $address->collectShippingRates();

Bu, tanıdık görünmelidir, çünkü bu, ücretsiz gönderimin geçerli olması durumunda her bir öğenin row_weightayarlandığı yerdir 0. $addressWeightHer bir öğenin ne kadarını topladığına dikkat edin $rowWeight, ancak bu daha önce row_weightayarlandığı şekilde0 yapılır .

Temel olarak, adres ağırlığı free_shippingher bir öğenin değerinden bağımsız olarak her zaman tüm öğelerin toplam ağırlığı olacaktır . Magento'nun varsayılan taşıyıcıları yalnızca adres ağırlığına bağlı olduklarından, sorun row_weightgörünmüyor.

Peki neden ihtiyacımız var row_weight

İhtiyacımız var, row_weightçünkü Magento’nun FedEx operatörünü, aynı hedefe gidiyor olsalar bile (ve böylece aynı adresin bir parçası olsalar), farklı kökenlerden gelen ürünler için ayrı oranları hesaplamak üzere özelleştirdik. Örneğin, NJ’de yaşıyorsanız, NJ’den bir öğeyi CA’dan göndermekten daha ucuz (ve daha hızlı) - ve eğer siparişinizde hem NJ hem de CA’dan öğeleriniz varsa, maliyeti görebilirsiniz (ve tahmin edilir). Her gönderinin teslim tarihi).

Sonuç olarak, doğrudan görmezden row_weightve kullanarak bu konuda kolayca çalışabileceğimiz anlaşılıyor weight * qty. Ancak, bizi yönlendirir:

Soru

Ücretsiz gönderim geçerliyse , Shippingtoplam neden row_weightfiyat teklifi öğelerini belirler 0? Bu hiçbir yerde kullanılmıyor gibi görünüyor.

Daha fazla gözlem

Ben belirtmeyi ihmal row_weighthala az aslında sıfırdan olabilir, ama weight * qtyeğer, free_shippingbir sayı yerine ise true. Bunun amacının, böyle bir senaryoya bir çözüm sağlamak olduğunu varsaymaktayım:

Sepetimde aynı üründen 3 ürün var, her ürün 2 lb ağırlığında. Ücretsiz gönderim kuponu uygularım, ancak bu miktar 2 ile sınırlıdır, bu nedenle yalnızca 2 öğeye uygulanır. Şimdi, nakliye ücretlerine baktığımda, 6 lbs (2 + 2 + 2) yerine 2 lbs (2 + 0 + 0) için nakliye ücretlerine bakacağım.

Bu mantıklı görünüyor, ancak onunla iki büyük sorun var:

  • Varsayılan Magento taşıyıcılarının hiçbiri bu şekilde çalışmaz (adres toplam ağırlığını kullanırlar, yukarıya bakın).

  • Taşıyıcıların bazıları bu şekilde çalışsa bile, bu, herhangi bir nakliye yöntemini seçebileceğim anlamına gelir (örn. Bir gecede nakliye) ve sadece 1 öğenin ağırlığını öderim - yani, satıcı diğer 2 öğenin maliyetini karşılamak zorunda kalırdı. . Bir şekilde, sadece 1 öğenin ağırlığını ödediğimi ve ardından diğer 2 öğeyi daha düşük maliyetli bir yöntem kullanarak gönderdiğimi, Magento’nun gösterdiği şey ile öğelerin gerçekte nasıl olduğu arasında bir uyumsuzluk yaratacağını anlamaya çalışmak tüccara kalmış. kargolandı.


Heh, alıcı yok mu? :)
Agop

Çok fazla oy, çok az tartışma! Magento gelişiminin hayatı budur.
Agop

Yanıtlar:


2

Bunu bıçaklayacağımı düşündüm ...;)

Buraya gönderdiğiniz ilginç bir soru bu yüzden neden yaptıklarını düşünüyorum, ancak bu özel durumun ne zaman ortaya çıktığını izlemeye çalışıyorum.

USPS taşıyıcı yöntemine bakıldığında, API'larına yönelik Uluslararası İstekler, her bir ürün için ayrıntılı ağırlıklar sağlıyor gibi görünmektedir. Bunu yapan bulabildiğim tek taşıyıcı bu. Aşağıdaki tam yöntemi ve altındaki vurgulanan bölümü bulun.

protected function _formIntlShipmentRequest(Varien_Object $request)
    {
        $packageParams = $request->getPackageParams();
        $height = $packageParams->getHeight();
        $width = $packageParams->getWidth();
        $length = $packageParams->getLength();
        $girth = $packageParams->getGirth();
        $packageWeight = $request->getPackageWeight();
        if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
            $packageWeight = Mage::helper('usa')->convertMeasureWeight(
                $request->getPackageWeight(),
                $packageParams->getWeightUnits(),
                Zend_Measure_Weight::POUND
            );
        }
        if ($packageParams->getDimensionUnits() != Zend_Measure_Length::INCH) {
            $length = round(Mage::helper('usa')->convertMeasureDimension(
                $packageParams->getLength(),
                $packageParams->getDimensionUnits(),
                Zend_Measure_Length::INCH
            ));
            $width = round(Mage::helper('usa')->convertMeasureDimension(
                $packageParams->getWidth(),
                $packageParams->getDimensionUnits(),
                Zend_Measure_Length::INCH
            ));
            $height = round(Mage::helper('usa')->convertMeasureDimension(
                $packageParams->getHeight(),
                $packageParams->getDimensionUnits(),
                Zend_Measure_Length::INCH
            ));
        }
        if ($packageParams->getGirthDimensionUnits() != Zend_Measure_Length::INCH) {
            $girth = round(Mage::helper('usa')->convertMeasureDimension(
                $packageParams->getGirth(),
                $packageParams->getGirthDimensionUnits(),
                Zend_Measure_Length::INCH
            ));
        }

        $container = $request->getPackagingType();
        switch ($container) {
            case 'VARIABLE':
                $container = 'VARIABLE';
                break;
            case 'FLAT RATE ENVELOPE':
                $container = 'FLATRATEENV';
                break;
            case 'FLAT RATE BOX':
                $container = 'FLATRATEBOX';
                break;
            case 'RECTANGULAR':
                $container = 'RECTANGULAR';
                break;
            case 'NONRECTANGULAR':
                $container = 'NONRECTANGULAR';
                break;
            default:
                $container = 'VARIABLE';
        }
        $shippingMethod = $request->getShippingMethod();
        list($fromZip5, $fromZip4) = $this->_parseZip($request->getShipperAddressPostalCode());

        // the wrap node needs for remove xml declaration above
        $xmlWrap = new SimpleXMLElement('<?xml version = "1.0" encoding = "UTF-8"?><wrap/>');
        $method = '';
        $service = $this->getCode('service_to_code', $shippingMethod);
        if ($service == 'Priority') {
            $method = 'Priority';
            $rootNode = 'PriorityMailIntlRequest';
            $xml = $xmlWrap->addChild($rootNode);
        } else if ($service == 'First Class') {
            $method = 'FirstClass';
            $rootNode = 'FirstClassMailIntlRequest';
            $xml = $xmlWrap->addChild($rootNode);
        } else {
            $method = 'Express';
            $rootNode = 'ExpressMailIntlRequest';
            $xml = $xmlWrap->addChild($rootNode);
        }

        $xml->addAttribute('USERID', $this->getConfigData('userid'));
        $xml->addAttribute('PASSWORD', $this->getConfigData('password'));
        $xml->addChild('Option');
        $xml->addChild('Revision', self::DEFAULT_REVISION);
        $xml->addChild('ImageParameters');
        $xml->addChild('FromFirstName', $request->getShipperContactPersonFirstName());
        $xml->addChild('FromLastName', $request->getShipperContactPersonLastName());
        $xml->addChild('FromFirm', $request->getShipperContactCompanyName());
        $xml->addChild('FromAddress1', $request->getShipperAddressStreet2());
        $xml->addChild('FromAddress2', $request->getShipperAddressStreet1());
        $xml->addChild('FromCity', $request->getShipperAddressCity());
        $xml->addChild('FromState', $request->getShipperAddressStateOrProvinceCode());
        $xml->addChild('FromZip5', $fromZip5);
        $xml->addChild('FromZip4', $fromZip4);
        $xml->addChild('FromPhone', $request->getShipperContactPhoneNumber());
        if ($method != 'FirstClass') {
            if ($request->getReferenceData()) {
                $referenceData = $request->getReferenceData() . ' P' . $request->getPackageId();
            } else {
                $referenceData = $request->getOrderShipment()->getOrder()->getIncrementId()
                                 . ' P'
                                 . $request->getPackageId();
            }
            $xml->addChild('FromCustomsReference', 'Order #' . $referenceData);
        }
        $xml->addChild('ToFirstName', $request->getRecipientContactPersonFirstName());
        $xml->addChild('ToLastName', $request->getRecipientContactPersonLastName());
        $xml->addChild('ToFirm', $request->getRecipientContactCompanyName());
        $xml->addChild('ToAddress1', $request->getRecipientAddressStreet1());
        $xml->addChild('ToAddress2', $request->getRecipientAddressStreet2());
        $xml->addChild('ToCity', $request->getRecipientAddressCity());
        $xml->addChild('ToProvince', $request->getRecipientAddressStateOrProvinceCode());
        $xml->addChild('ToCountry', $this->_getCountryName($request->getRecipientAddressCountryCode()));
        $xml->addChild('ToPostalCode', $request->getRecipientAddressPostalCode());
        $xml->addChild('ToPOBoxFlag', 'N');
        $xml->addChild('ToPhone', $request->getRecipientContactPhoneNumber());
        $xml->addChild('ToFax');
        $xml->addChild('ToEmail');
        if ($method != 'FirstClass') {
            $xml->addChild('NonDeliveryOption', 'Return');
        }
        if ($method == 'FirstClass') {
            if (stripos($shippingMethod, 'Letter') !== false) {
                $xml->addChild('FirstClassMailType', 'LETTER');
            } else if (stripos($shippingMethod, 'Flat') !== false) {
                $xml->addChild('FirstClassMailType', 'FLAT');
            } else{
                $xml->addChild('FirstClassMailType', 'PARCEL');
            }
        }
        if ($method != 'FirstClass') {
            $xml->addChild('Container', $container);
        }
        $shippingContents = $xml->addChild('ShippingContents');
        $packageItems = $request->getPackageItems();
        // get countries of manufacture
        $countriesOfManufacture = array();
        $productIds = array();
        foreach ($packageItems as $itemShipment) {
                $item = new Varien_Object();
                $item->setData($itemShipment);

                $productIds[]= $item->getProductId();
        }
        $productCollection = Mage::getResourceModel('catalog/product_collection')
            ->addStoreFilter($request->getStoreId())
            ->addFieldToFilter('entity_id', array('in' => $productIds))
            ->addAttributeToSelect('country_of_manufacture');
        foreach ($productCollection as $product) {
            $countriesOfManufacture[$product->getId()] = $product->getCountryOfManufacture();
        }

        $packagePoundsWeight = $packageOuncesWeight = 0;
        // for ItemDetail
        foreach ($packageItems as $itemShipment) {
            $item = new Varien_Object();
            $item->setData($itemShipment);

            $itemWeight = $item->getWeight() * $item->getQty();
            if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
                $itemWeight = Mage::helper('usa')->convertMeasureWeight(
                    $itemWeight,
                    $packageParams->getWeightUnits(),
                    Zend_Measure_Weight::POUND
                );
            }
            if (!empty($countriesOfManufacture[$item->getProductId()])) {
                $countryOfManufacture = $this->_getCountryName(
                    $countriesOfManufacture[$item->getProductId()]
                );
            } else {
                $countryOfManufacture = '';
            }
            $itemDetail = $shippingContents->addChild('ItemDetail');
            $itemDetail->addChild('Description', $item->getName());
            $ceiledQty = ceil($item->getQty());
            if ($ceiledQty < 1) {
                $ceiledQty = 1;
            }
            $individualItemWeight = $itemWeight / $ceiledQty;
            $itemDetail->addChild('Quantity', $ceiledQty);
            $itemDetail->addChild('Value', $item->getCustomsValue() * $item->getQty());
            list($individualPoundsWeight, $individualOuncesWeight) = $this->_convertPoundOunces($individualItemWeight);
            $itemDetail->addChild('NetPounds', $individualPoundsWeight);
            $itemDetail->addChild('NetOunces', $individualOuncesWeight);
            $itemDetail->addChild('HSTariffNumber', 0);
            $itemDetail->addChild('CountryOfOrigin', $countryOfManufacture);

            list($itemPoundsWeight, $itemOuncesWeight) = $this->_convertPoundOunces($itemWeight);
            $packagePoundsWeight += $itemPoundsWeight;
            $packageOuncesWeight += $itemOuncesWeight;
        }
        $additionalPackagePoundsWeight = floor($packageOuncesWeight / self::OUNCES_POUND);
        $packagePoundsWeight += $additionalPackagePoundsWeight;
        $packageOuncesWeight -= $additionalPackagePoundsWeight * self::OUNCES_POUND;
        if ($packagePoundsWeight + $packageOuncesWeight / self::OUNCES_POUND < $packageWeight) {
            list($packagePoundsWeight, $packageOuncesWeight) = $this->_convertPoundOunces($packageWeight);
        }

        $xml->addChild('GrossPounds', $packagePoundsWeight);
        $xml->addChild('GrossOunces', $packageOuncesWeight);
        if ($packageParams->getContentType() == 'OTHER' && $packageParams->getContentTypeOther() != null) {
            $xml->addChild('ContentType', $packageParams->getContentType());
            $xml->addChild('ContentTypeOther ', $packageParams->getContentTypeOther());
        } else {
            $xml->addChild('ContentType', $packageParams->getContentType());
        }

        $xml->addChild('Agreement', 'y');
        $xml->addChild('ImageType', 'PDF');
        $xml->addChild('ImageLayout', 'ALLINONEFILE');
        if ($method == 'FirstClass') {
            $xml->addChild('Container', $container);
        }
        // set size
        if ($packageParams->getSize()) {
            $xml->addChild('Size', $packageParams->getSize());
        }
        // set dimensions
        $xml->addChild('Length', $length);
        $xml->addChild('Width', $width);
        $xml->addChild('Height', $height);
        if ($girth) {
            $xml->addChild('Girth', $girth);
        }

        $xml = $xmlWrap->{$rootNode}->asXML();
        return $xml;
    }

Belirli bölüm:

$packagePoundsWeight = $packageOuncesWeight = 0;
        // for ItemDetail
        foreach ($packageItems as $itemShipment) {
            $item = new Varien_Object();
            $item->setData($itemShipment);

            $itemWeight = $item->getWeight() * $item->getQty();
            if ($packageParams->getWeightUnits() != Zend_Measure_Weight::POUND) {
                $itemWeight = Mage::helper('usa')->convertMeasureWeight(
                    $itemWeight,
                    $packageParams->getWeightUnits(),
                    Zend_Measure_Weight::POUND
                );
            }
            if (!empty($countriesOfManufacture[$item->getProductId()])) {
                $countryOfManufacture = $this->_getCountryName(
                    $countriesOfManufacture[$item->getProductId()]
                );
            } else {
                $countryOfManufacture = '';
            }
            $itemDetail = $shippingContents->addChild('ItemDetail');
            $itemDetail->addChild('Description', $item->getName());
            $ceiledQty = ceil($item->getQty());
            if ($ceiledQty < 1) {
                $ceiledQty = 1;
            }
            $individualItemWeight = $itemWeight / $ceiledQty;
            $itemDetail->addChild('Quantity', $ceiledQty);
            $itemDetail->addChild('Value', $item->getCustomsValue() * $item->getQty());
            list($individualPoundsWeight, $individualOuncesWeight) = $this->_convertPoundOunces($individualItemWeight);
            $itemDetail->addChild('NetPounds', $individualPoundsWeight);
            $itemDetail->addChild('NetOunces', $individualOuncesWeight);
            $itemDetail->addChild('HSTariffNumber', 0);
            $itemDetail->addChild('CountryOfOrigin', $countryOfManufacture);

            list($itemPoundsWeight, $itemOuncesWeight) = $this->_convertPoundOunces($itemWeight);
            $packagePoundsWeight += $itemPoundsWeight;
            $packageOuncesWeight += $itemOuncesWeight;
        }

Bana göre, Magento, paket ağırlığını gerçek madde ağırlıklarına göre yeniden hesaplıyor ve adres ağırlığını yükseltmiyor gibi görünüyor. Aktarılan paket öğelerinin ağırlıkları sıfırlanıp sıfırlanmadığını merak ediyorum, çünkü bu oranların cevabın kötü ağırlık verilerine dayanacağını düşünerek yanlış ürün ağırlıklarına yol açacaktır.

Yine de karanlıkta vurdu.


1

Ben de bu konuda bir bıçak vardı ve bu kod satırını ilginç bir şey buldum

$item->setRowWeight($rowWeight);

İşlev böyle olduğu için önceden 1.1.5 sürümünde tanıtıldı.

Magento Ayna İthalatı Magento Yayın 1.1.5 - Shipping.php

Magento Ayna İthalatı Magento Yayın 1.1.1 - Shipping.php

            else {
            if (!$item->getProduct()->getTypeInstance()->isVirtual()) {
                $addressQty += $item->getQty();
            }
            $itemWeight = $item->getWeight();
            $rowWeight  = $itemWeight*$item->getQty();
            $addressWeight+= $rowWeight;
            if ($freeAddress || $item->getFreeShipping()===true) {
                $rowWeight = 0;
            } elseif (is_numeric($item->getFreeShipping())) {
                $freeQty = $item->getFreeShipping();
                if ($item->getQty()>$freeQty) {
                    $rowWeight = $itemWeight*($item->getQty()-$freeQty);
                }
                else {
                    $rowWeight = 0;
                }
            }
            $freeMethodWeight+= $rowWeight;
        }
    }

Benim anladığım kadarıyla Mage_Sales_Model_Quote_Address_Total_Shipping :: $ addressWeight ve $ freeMethodWeight 'ı hesaplamak / güncellemek için gerekenleri toplamak.

    $addressWeight      = $address->getWeight();
    $freeMethodWeight   = $address->getFreeMethodWeight();

ve $ item-> setRowWeight, teklif ve adres ile ilgili olmayan öğeyle ilgili olduğu için burada kullanılmaz.

Benim iddiaya göre bu bir hata. Muhtemelen row_total hiçbir zaman varsayılan modüllerin kullanmadığı için nakliye yöntemlerinde kullanılmak üzere tasarlanmamıştır.

Bunun neden 1.1.0'da tanıtıldığını açıklayabilecek herhangi bir değişiklik günlüğünü bulamadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.