cancel
Showing results for 
Search instead for 
Did you mean: 

Расчет доставки без товаров в корзине для Magento 1.9.x

SOLVED

Расчет доставки без товаров в корзине для Magento 1.9.x

Добрый день! 

Есть ли возможность получить методы доставки (названия и цены) без добавленных в корзину товаров? "По умолчанию" не даёт так сделать. А я хочу показывать на странице информацию вроде, "Доставка 1: от 100 рублей, доставка 2: от 200 рублей". 

Можно, конечно, написать "положите в корзину и здесь отобразится цена", но это как то "не спортивно". Писать отдельный метод, который будет высчитывать доставку тоже не хочется, это придётся поддерживать в "двух" местах.

Кто-нибудь сталкивался с подобным?

2 REPLIES

Re: Расчет доставки без товаров в корзине для Magento 1.9.x

Доставка рассчитывается исходя из веса, габаритов товара, исходя из места отправки и места назначения. Согласитесь что Ваш сайт сам не сможет понять куда нужно отправлять товар без дополнительных вмешательств. Тут как раз нужен расширять функционал. С весом все понятно, геоданные можно брать по IP, а таблицу тарифов из тех мест куда обращаются модули доставки.

Встречались мне такие готовые модули, но они все работали с забугорными способами доставки.

Самое легкое это создать просто виджет и написать там "Доставка 1: от 100 рублей, доставка 2: от 200 рублей" без каких либо подсчетов.

Re: Расчет доставки без товаров в корзине для Magento 1.9.x

В моем случае доставка зависит только от веса. Пункт назначения тоже есть. Модули доставки у меня считают ТК и почту России. Я кажется нашел вариант решения: http://stackoverflow.com/questions/11934138/magento-get-all-shipping-rates 

// Change to your postcode / country.
$zipcode = '2000';
$country = 'AU';

// Update the cart's quote.
$cart = Mage::getSingleton('checkout/cart');
$address = $cart->getQuote()->getShippingAddress();
$address->setCountryId($country)
        ->setPostcode($zipcode)
        ->setCollectShippingrates(true);
$cart->save();

// Find if our shipping has been included.
$rates = $address->collectShippingRates()
                 ->getGroupedAllShippingRates();

foreach ($rates as $carrier) {
    foreach ($carrier as $rate) {
        print_r($rate->getData());
    }
}