【问题标题】:Magento - Payment Method for each ProductMagento - 每种产品的付款方式
【发布时间】:2016-06-11 20:23:45
【问题描述】:

是否可以为每种产品选择付款方式?

例如:在我的商店中,一种产品以“游戏中的现金”出售,因此当客户购买此产品时,magento 仅启用“游戏中”的付款选项。

对于其他用真钱购买的产品,它会禁用“游戏中”的支付选项并启用信用卡支付(例如)。

我找到了一些模块,但经过测试并不起作用。

谢谢

【问题讨论】:

标签: magento payment product


【解决方案1】:

是的,你可以通过这个模块来做到这一点。例如我们想为某些产品货到付款 ->

首先创建一个产品属性(名称:'magepal_payment_filter_by_product',类型:yes/no)来识别这些产品。

例如,您可以使用 Magento v1.7 的基础

以编程方式自动启用支付模块 [参见][1]

启用所有适用的支付模块并过滤显示哪个模块

在 /app/code/local/MagePal/PaymentFilterByProduct/etc/config.xml 中

<?xml version="1.0"?>
<config>
<modules>
    <MagePal_PaymentFilterByProduct>
        <version>1.0.1</version>
    </MagePal_PaymentFilterByProduct>
</modules>
<global>
    <helpers>
        <paymentfilterbyproduct>
            <class>MagePal_PaymentFilterByProduct_Helper</class>
        </paymentfilterbyproduct>
        <payment>
            <rewrite>
                <data>MagePal_PaymentFilterByProduct_Helper_Payment_Data</data>
            </rewrite>
        </payment>            
    </helpers>      
</global>
</config>

在 /app/code/local/MagePal/PaymentFilterByProduct/Helper/Payment/Data.php 中

<?php
class MagePal_PaymentFilterByProduct_Helper_Payment_Data extends Mage_Payment_Helper_Data
{

public function getStoreMethods($store = null, $quote = null)
{   
    $methods = parent::getStoreMethods($store, $quote);

    if(!Mage::getStoreConfig('paymentfilterbyproduct/general_option/paymentfilterbyproduct_enable', Mage::app()->getStore()) || !$quote){
        return $methods;
    }

    //get a list of product in cart
    $cart = Mage::getSingleton('checkout/session');

    $specialProductInCart = array();

    foreach ($cart->getQuote()->getAllItems() as $item) {
        $specialProductInCart[] = $item->getMagepalPaymentFilterByProduct();                 
    }

    // if special product in cart 
    // need to if check $item->getMagepalPaymentFilterByProduct() return 'yes/no' or '0/1)
    if(in_array('yes', $specialProductInCart)){
       $filter_csv = Mage::getStoreConfig('paymentfilterbyproduct/filter_option/paymentfilter_special_products', Mage::app()->getStore()); 
    }
    else{
        $filter_csv = Mage::getStoreConfig('paymentfilterbyproduct/filter_option/paymentfilter_all_product', Mage::app()->getStore());
    }

    $filter_array = explode(",", $filter_csv);

    foreach ($methods as $k => $method){
        if(!in_array($method->getCode(), $filter_array))
            unset($methods[$k]);       
    }//methods

    return $methods;
}
}

在 /app/code/local/MagePal/PaymentFilterByProduct/etc/system.xml 中

<?xml version="1.0"?>
<config>
<tabs>
    <magepal translate="label" module="paymentfilterbyproduct">
        <label>MagePal</label>
        <sort_order>900</sort_order>
    </magepal>
</tabs>
<sections>
    <paymentfilterbyproduct translate="label" module="paymentfilterbyproduct">
        <label>Payment Method Filter by Product</label>
        <tab>magepal</tab>
        <sort_order>1000</sort_order>
        <show_in_default>1</show_in_default>
        <show_in_website>1</show_in_website>
        <show_in_store>1</show_in_store>
        <groups>
            <general_option translate="label">
                <label>General Options</label>
                <frontend_type>text</frontend_type>
                <sort_order>1</sort_order>
                <show_in_default>1</show_in_default>
                <show_in_website>1</show_in_website>
                <show_in_store>1</show_in_store>
                <fields>
                    <paymentfilter_enable translate="label">
                        <label>Enable Payment Filter</label>
                        <frontend_type>select</frontend_type>
                        <source_model>adminhtml/system_config_source_yesno</source_model>
                        <sort_order>50</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </paymentfilter_enable>
                </fields>
            </general_option>
            <filter_option translate="label">
                <label>Payment Method Filter Configuration</label>
                <frontend_type>text</frontend_type>
                <sort_order>2</sort_order>
                <show_in_default>1</show_in_default>
                <show_in_website>1</show_in_website>
                <show_in_store>1</show_in_store>
                <comment>Please enable all applicable payment methods in system payment config</comment>
                <fields>
                    <paymentfilter_all_products translate="label">
                        <label>Select Default Payment option for All Products</label>
                        <frontend_type>multiselect</frontend_type>
                        <source_model>MagePal_PaymentFilterByProduct_ActivePaymentMethod</source_model>
                        <sort_order>30</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </paymentfilter_admin>
                    <paymentfilter_special_products translate="label">
                        <label>Select Payments for Cart with Special Products</label>
                        <frontend_type>multiselect</frontend_type>
                        <source_model>MagePal_PaymentFilterByProduct_ActivePaymentMethod</source_model>
                        <sort_order>40</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </paymentfilter_store>
                </fields>
            </filter_option>
        </groups>
    </paymentfilterbyproduct>
</sections>
</config>

在 /app/code/local/MagePal/PaymentFilterByProduct/Helper/Data.php 中

<?php 
class MagePal_PaymentFilterByProduct_Helper_Data extends    Mage_Core_Block_Template
{
}

在 /app/code/local/MagePal/PaymentFilterByProduct/ActivePaymentMethod.php 中

<?php
class MagePal_PaymentFilterByProduct_ActivePaymentMethod
{
    //get all active (enable) payment method
    public function toOptionArray()
    {
       $payments = Mage::getSingleton('payment/config')->getActiveMethods();

       foreach ($payments as $paymentCode=>$paymentModel) {
           if($paymentModel->canUseCheckout() == 1){
                $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title');
                $methods[$paymentCode] = array(
                    'label'   => $paymentTitle,
                    'value' => $paymentCode,
                );
            }
        }

        return $methods;
    }
}

在 /app/etc/modules/MagePal_PaymentFilterByProduct.xml 中

<?xml version="1.0"?>
<config>
 <modules>
    <MagePal_PaymentFilterByProduct>
        <active>true</active>
        <codePool>local</codePool>
    </MagePal_PaymentFilterByProduct>
 </modules>
 </config>

【讨论】:

  • 谢谢,但我在另一篇文章中看到的这个模块似乎是相同的。我已经测试并失败了。但以防万一我再次测试并带来回报..
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 2012-03-01
  • 2012-11-27
  • 2013-03-03
  • 2012-08-02
  • 2012-12-10
  • 2017-08-15
  • 2020-03-28
相关资源
最近更新 更多