禁用特定产品的货到付款

时间:2015-04-23 09:20:20

标签: php magento payment-gateway magento-1.9

我正在运行Magento v1.9.0.1。我想禁用特定产品的货到付款。我已经从magento commerce安装了COD扩展程序。

我是Magento结构的新手,对此毫不逊色。尝试了一些调试,但它正在我的头上。

此外,我搜索了互联网上的每一个地方,但没有人提供过Magento v1.9.0.1的代码。

2 个答案:

答案 0 :(得分:1)

COD已经在magento你不需要安装它。

有两种方式

  1. 创建一个新的配置设置,您可以在其中输入产品ID 你不想要COD选项。
  2. 您也可以创建产品属性以检查COD选项。
  3. 并使用以下命令检查这些ID(如果您创建配置设置)     产品ID或检查产品属性     app\design\frontend\base\default\template\checkout\onepage\payment\methods.phtml。     通过简单的if else条件,您可以避免这些的COD选项     产品

答案 1 :(得分:1)

创建属性代码为cod的自定义属性,并将其分配给属性集的General

现在根据您的要求更改您的methods.phtml(如果此处没有自定义代码),如下所示。

<?php
    $methods = $this->getMethods();
    $oneMethod = count($methods) <= 1;
?>
<?php if (empty($methods)): ?>
    <dt>
        <?php echo $this->__('No Payment Methods') ?>
    </dt>
<?php else:
    foreach ($methods as $_method):
        $_code = $_method->getCode();
?>
    <dt>
    <?php 
    //cod verification starts
    $attr_cod = array();
    $cartItems = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
    foreach ($cartItems as $item) {
        $attr_cod[] = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getCod();

    }
    if(in_array('1', $attr_cod) && $_code == 'cashondelivery') {continue; }
    //cod verification ends
?>
    <?php if(!$oneMethod): ?>

        <input id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" type="radio" name="payment[method]" title="<?php echo $this->escapeHtml($_method->getTitle()) ?>" onclick="payment.switchMethod('<?php echo $_code ?>')"<?php if($this->getSelectedMethodCode()==$_code): ?> checked="checked"<?php endif; ?> class="radio" />
    <?php else: ?>
        <span class="no-display"><input id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" type="radio" name="payment[method]" checked="checked" class="radio" /></span>
        <?php $oneMethod = $_code; ?>
    <?php endif; ?>
        <label for="p_method_<?php echo $_code ?>"><?php echo $this->escapeHtml($this->getMethodTitle($_method)) ?> <?php echo $this->getMethodLabelAfterHtml($_method) ?></label>
    </dt>
    <?php if ($html = $this->getPaymentMethodFormHtml($_method)): ?>
    <dd>
        <?php echo $html; ?>
    </dd>
    <?php endif; ?>
<?php endforeach;
    endif;
?>
<?php echo $this->getChildChildHtml('additional'); ?>
<script type="text/javascript">
    //<![CDATA[
    <?php echo $this->getChildChildHtml('scripts'); ?>
    payment.init();
    <?php if (is_string($oneMethod)): ?>
    payment.switchMethod('<?php echo $oneMethod ?>');
        <?php endif; ?>
    //]]>
</script>

我测试了这个并且工作正常。