Navigation Menu

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

Под катом исходный код и немного текста

Для начала открой файл

app/design/frontend/YOUR_THEME/template/checkout/onepage/shipping/method/available.phtml

Я буду рассказываю пример на основе дефолтного файла взятого по адресу

app/design/frontend/base/default/template/checkout/onepage/shipping/method/available.phtml

И так,

  1. Мы определим доступна ли бесплатная доставка, и если да то сделаем её по умолчанию
  2. Если доступна бесплатная доставка, то остальные методы доставки отображены не будут.

Ну и собственно сам код который это реализует:

[code lang=»php»]

<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE_AFL.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category    design
* @package     base_default
* @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*/
?>
<?php if (!($_shippingRateGroups = $this->getShippingRates())): ?>
<p><?php echo $this->__(‘Sorry, no quotes are available for this order at this time.’) ?></p>
<?php else: ?>
<dl>
<?php $shippingMe = array(); ?>
<?php $_sole = count($_shippingRateGroups) == 1; foreach ($_shippingRateGroups as $code => $_rates): ?>
<dt><?php echo $this->getCarrierName($code) ?></dt>
<dd>
<ul>
<?php $_sole = $_sole &amp;amp;amp;amp;&amp;amp;amp;amp; count($_rates) == 1; foreach ($_rates as $_rate): ?>

<?php

// cheking for free shippimg method

$shipping_method_is_free = false;

if ($_rate->getCode() == ‘freeshipping_freeshipping’) {
$this->getAddress()->setShippingMethod($_rate->getCode());
$shipping_method_is_free = true;
};

?>

<?php $shippingMe[] = "’".$_rate->getCode()."’:".(float)$_rate->getPrice(); ?>
<li>
<?php if ($_rate->getErrorMessage()): ?>
<ul><li><ul><li><?php echo $_rate->getErrorMessage() ?></li></ul></li></ul>
<?php else: ?>
<?php if ($_sole) : ?>
<span><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span>
<?php else: ?>
<input
name="shipping_method"
type="radio"
value="<?php echo $_rate->getCode() ?>"
id="s_method_<?php echo $_rate->getCode() ?>"

<?php

// if free shipping method available it will be checked by default

if ( $shipping_method_is_free ) {
echo ‘ checked="checked"’;
} elseif ( $_rate->getCode()===$this->getAddressShippingMethod() ) {
echo ‘ checked="checked"’;
};
?>

onchange="return includingShipping(‘<?php echo $_rate->getCode();?>’);"
/>

<script type="text/javascript">
//<![CDATA[
<?php if ($_rate->getCode()===$this->getAddressShippingMethod()): ?>
lastPrice = <?php echo (float)$_rate->getPrice(); ?>;
<?php endif; ?>
//]]>
</script>

<?php endif; ?>
<label for="s_method_<?php echo $_rate->getCode() ?>"><?php echo $_rate->getMethodTitle() ?>
<?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper(‘tax’)->displayShippingPriceIncludingTax()); ?>
<?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
<?php echo $_excl; ?>
<?php if ($this->helper(‘tax’)->displayShippingBothPrices() &amp;amp;amp;amp;&amp;amp;amp;amp; $_incl != $_excl): ?>
(<?php echo $this->__(‘Incl. Tax’); ?> <?php echo $_incl; ?>)
<?php endif; ?>
</label>
<?php endif ?>
</li>

<?php
endforeach;
if ( $shipping_method_is_free) break;
?>

</ul>
</dd>
<?php endforeach; ?>
</dl>
<script type="text/javascript">
//<![CDATA[
<?php if (!empty($shippingMe)): ?>
var shippingMe = {<?php echo implode(‘,’,$shippingMe); ?>};
<?php endif; ?>

function includingShipping(getShippingCode)
{
<?php if (!empty($shippingMe)): ?>
var newPrice = shippingMe[getShippingCode];
if (!lastPrice) {
lastPrice = newPrice;
quoteBaseGrandTotal += newPrice;
}
if (newPrice != lastPrice) {
quoteBaseGrandTotal += (newPrice-lastPrice);
lastPrice = newPrice;

}
<?php endif; ?>
checkQuoteBaseGrandTotal = quoteBaseGrandTotal;
return false;
}
//]]>
</script>
<?php endif; ?>

[/code]

Код на строках с 38 по 49 отвечает за проверку способа доставки.

Код на строках 65 — 74 отвечает за установку checked для элемента

А код на строках 99 — 120 отвечает за то что бы вывода Бесплатного метода доставки, остальные не грузились.