Как я могу отобразить альтернативное сообщение в зависимости от элементов в цикле php foreach - PullRequest
1 голос
/ 14 мая 2011

Я пытаюсь отобразить стоимость доставки на странице товара в Magento. Мне удалось сделать это с помощью php, чтобы повторить цены доставки. Тем не менее, теперь я предлагаю бесплатную доставку на определенные товары, и на этих продуктах я получаю бесплатную цену доставки и другую стоимость доставки, которая выглядит неправильно.

Каким образом можно получить бесплатную доставку, только если она у вас есть, а для всего остального - по обычной цене?

Мне удалось вывести правило бесплатной доставки, используя следующий код:

        <?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)
        if ($rate->getPrice(0.00)) 
        {
            echo ('This item qualifies for FREE shipping');
        }
        else    
            echo ('Shipping from £' . $rate->getPrice());
        }
        ?>

Но это все равно отображает другую стоимость доставки. Как я могу остановить показ другой цены?

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

Вы уверены, что не хотите делать:

if ($rate->getPrice()==0)

Потому что я не верю, что вы хотите передать значение методу get в Magento.

0 голосов
/ 15 мая 2011

Поскольку у вас есть более одной оценки для оценки, и вы просматриваете их с foreach, вы получите сообщение для каждой оценки. Требуется простое программирование.

$minPrice = PHP_INT_MAX;
foreach ($rates as $rate) {
    $minPrice = min($minPrice, $rate->getPrice());
}
if ($minPrice == 0) {
    echo ('This item qualifies for FREE shipping');
}
elseif ($minPrice < PHP_INT_MAX) {
    echo ('Shipping from £' . $rate->getPrice());
}
...