Magento - 每种产品的付款方式

时间:2016-02-28 21:45:41

标签: magento payment product

有可能选择每种产品的付款方式吗?

例如:在我的商店中,有一种产品正在销售#34;现金游戏",所以当客户购买此产品时,magento只启用游戏中的付款选项"

至于其他以真钱购买的产品,它会禁用游戏中的付款选项""并启用信用卡付款(例如)。

我找到了一些模块,但经过测试但没有用。

感谢' S

1 个答案:

答案 0 :(得分:0)

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

首先创建一个产品属性(名称:'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>