【问题标题】:Disable Cash on Delivery for specific products禁用特定产品的货到付款
【发布时间】:2015-07-01 09:04:57
【问题描述】:

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

我是 Magento 结构的新手,对此毫无疑问。尝试对其进行一些调试,但它超出了我的想象。

另外,我在互联网上到处搜索,但从来没有人提供过 Magento v1.9.0.1 的代码。

【问题讨论】:

  • 你能分享你安装的扩展的链接吗?您是否需要在管理员端对此进行任何选项来禁用特定产品的 COD??
  • 我已经安装了 Mage Specialist 的 COD 扩展。这是扩展名的link。是的,我需要管理员方面的选项

标签: php magento payment-gateway magento-1.9


【解决方案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>

我已经对此进行了测试并且工作正常。

【讨论】:

  • 谢谢哥们。这个对我有用。您能告诉我如何在订单总额中添加额外的 COD 费用吗?
  • 为增加货到付款选项的额外费用,您需要开发一个扩展。简而言之,如果付款方式为 COD,则需要 setGrandTotal
【解决方案2】:

COD 已经存在于 magento 中,您无需安装它。

有两种方法

  1. 创建一个新的配置设置,您可以在其中输入产品 ID 您不想要 COD 选项。
  2. 您也可以创建产品属性来检查 COD 选项。

并使用 产品 ID 或检查产品属性 app\design\frontend\base\default\template\checkout\onepage\payment\methods.phtml。 通过简单的 if else 条件,您可以避免这些的 COD 选项 产品。

【讨论】:

  • 感谢您的回答。你能帮我写代码吗?我已经为 COD 创建了属性,但我不知道如何在编码中实现它
  • 我现在不会写代码。我会为你提供深夜。尝试在该页面上获取购物车会话。从购物车会话中,您将获得产品 ID,然后将该产品加载到 methods.phtml 并检查属性。根据您的网站,付款方式代码是“p_method_phoenix_cashondelivery”。所以放一个 if 条件,在其中检查属性,如果属性存在,然后再检查不显示 COD。
猜你喜欢
  • 2012-12-10
  • 1970-01-01
  • 2017-06-25
  • 2018-06-10
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2017-05-31
相关资源
最近更新 更多