В Magento, как я могу указать стоимость доставки товаров на странице продукта?

Я хочу указать стоимость доставки на странице фактического продукта в Magento, чтобы клиенты могли видеть, сколько им это будет стоить. Я могу добавить оценку доставки со страницы корзины. Но все, что я на самом деле хочу, это строка текста под ценой продукта, в которой говорится, что доставка от XX.XX фунтов стерлингов

Я видел это руководство: http://aneeshsreedharan.wordpress.com/2010/04/28/estimating-shipping-rate-on-product-details-page-in-magento/#comment-10, но это у меня не работает на Magento 1.4.2 - я думаю, что в этом руководстве используется более старая версия.

В настоящее время я использую метод доставки по тарифу, основанному на весе, и только с одним вариантом.

РЕДАКТИРОВАТЬ: В конце концов я решил проблему: довольно смущающе, я не осознавал, что блог удаляет форматирование. Это было изменение ' на '

Теперь я могу подтвердить, что приведенный ниже код отображает доставку:

<?php
if($_product->isSaleable())
{
$quote = Mage::getModel('sales/quote');
$quote->getShippingAddress()->setCountryId('*');
$quote->addProduct($_product);
$quote->getShippingAddress()->collectTotals();
$quote->getShippingAddress()->setCollectShippingRates(true);
$quote->getShippingAddress()->collectShippingRates();
$rates = $quote->getShippingAddress()->getShippingRatesCollection();

foreach ($rates as $rate)
{
echo $rate->getPrice();
}
}
?>

person Chris Mousdale    schedule 12.04.2011    source источник


Ответы (2)


В конце концов я решил проблему: довольно смущающе, я не осознавал, что блог убирает форматирование. Это было изменение ' на '

Теперь я могу подтвердить, что приведенный ниже код отображает доставку:

<?php
if($_product->isSaleable())
{
$quote = Mage::getModel('sales/quote');
$quote->getShippingAddress()->setCountryId('*');
$quote->addProduct($_product);
$quote->getShippingAddress()->collectTotals();
$quote->getShippingAddress()->setCollectShippingRates(true);
$quote->getShippingAddress()->collectShippingRates();
$rates = $quote->getShippingAddress()->getShippingRatesCollection();

foreach ($rates as $rate)
{
echo $rate->getPrice();
}
}
?>

Я отредактировал свой исходный пост, но чтобы подтвердить, что приведенный выше код работает.

person Chris Mousdale    schedule 14.04.2011
comment
куда мне нужно добавить этот код? я пробовал в файле view.phtml, но у меня это не сработало. я получил эту ошибку: Fatal error: Call to a member function setStore() on a non-object в app/code/core/Mage/Shipping/Model/Shipping.php on line 424 - person fresher; 21.03.2016

Немного улучшил:

            <!-- SHOW SHIPPING RATES-->
        <?php $quote = Mage::getModel('sales/quote');
        $quote->getShippingAddress()->setCountryId('ES'); // Set your default shipping country here
        $_product->getStockItem()->setUseConfigManageStock(false);
        $_product->getStockItem()->setManageStock(false);
        $quote->addProduct($_product);
        $quote->getShippingAddress()->setCollectShippingRates(true);
        $quote->getShippingAddress()->collectTotals();
        $rates = $quote->getShippingAddress()->getShippingRatesCollection();
        // Find cheapest rate
        $cheapestrate = null;
        foreach ($rates as $rate) {
            if (is_null($cheapestrate) || $rate->getPrice() < $cheapestrate) {
                $cheapestrate = $rate->getPrice();
            }
        }
        $corehelper = Mage::helper('core');
        if ($cheapestrate) {
            echo '<p><strong>Shipping costs:</strong> ' . $corehelper->currency($cheapestrate);?></p>
            <?php
            }else {
            echo "<strong>Free shipping</strong> for this product." ;
        }?>
        <!-- END SHOW SHIPPING RATES-->

Кстати: это работает только с простыми продуктами. Еще не было времени назвать соответствующий простой продукт.

person Simon    schedule 29.01.2012