سؤال

أحتاج في الأساس إلى تعطيل ميزة الدفع نقدًا عند التسليم لنوع منتج معين.في الأساس أنا أستخدم رصيد المتجر من متجر mage.هذا للمحفظة في الماجنتو.على خيار الدفع يظهر الدفع عند التسليم.إنه ليس منتجًا ماديًا أو افتراضيًا.لذلك أحتاج إلى تعطيل الدفع عند التسليم لهذا النوع من المنتجات.

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك عن طريق Magento Event/Observer

أولا، باستخدام payment_method_is_active يعتمد التعطيل على نوع منتج عرض الأسعار الحالي.

رمز لهذا:

كود الوحدة config.xml:

<global>
    <events>
    <payment_method_is_active>
        <observers>
            <paymentfilter_payment_method_is_active>
            <type>singleton</type>
            <class>yourmodel/observer</class>
            <method>filterpaymentmethod</method>
            </paymentfilter_payment_method_is_active>
        </observers>
    </payment_method_is_active>
    </events>
</global>

كود المراقب هو:

<?php

class YOURNANESPACE_YOURMODULE_Model_Observer {

    public function filterpaymentmethod(Varien_Event_Observer $observer) {
        /* call get payment method */
        $method = $observer->getEvent()->getMethodInstance();

        /*   get  Quote  */
        $quote = $observer->getEvent()->getQuote();

        $result = $observer->getEvent()->getResult();
        if (empty($quote) || (null === $quote)) {
            return $this;
        }

        /* Disable Your payment method for   adminStore */
        if ($method->getCode() == 'YOUR_PAYMENT_METHOD_CODE') {
            foreach ($quote->getAllItems() as $item) {
                // get Cart item product Type //
                if ($item->getProductType() == 'YourProductType'):
                    $result->isAvailable = false;
                endif;
            }
        }
    }

}

نصائح أخرى

لذلك تحتاج إلى استخدام الماجنتو payment_method_is_active حدث

أفترض أنك تعرف كيفية تطوير امتداد الماجنتو [إذا لم يكن الأمر كذلك، فيرجى التحقق من ذلك هذه الإجابة تحصل على الوحدة بأكملهااكتب هذا الكود في جهازك config.xml من app>code>codepool>namespace>package>etc

<global>
    ...
    <events>
        <payment_method_is_active>
            <observers>
                <paymentfilter_payment_method_is_active>
                    <type>singleton</type>
                    <class>PaymentFilter_Model_Observer</class>
                    <method>paymentMethodIsActive</method>
                </paymentfilter_payment_method_is_active>
            </observers>
        </payment_method_is_active>
    </events>
    ...
</global>

إنشاء ملف المراقب app/code/codepool>namespace>package/Model/Observer.php

class namespace_package_Model_Observer {

        public function paymentMethodIsActive(Varien_Event_Observer $observer) {
            $event           = $observer->getEvent();
            $method          = $event->getMethodInstance();
            $result          = $event->getResult();
            $currencyCode    = Mage::app()->getStore()->getCurrentCurrencyCode();


                if($someTrueConditionGoesHere){
                    $result->isAvailable = true;
                }else{
                    $result->isAvailable = false;
                }

        }

    }

هل تبدو هذا أعتقد أن هذا سيكون نحل حل مشكلتك، فأنت بحاجة فقط إلى تعديل ملف الأساليب. يمكن أن تحصل على أي علامات اقتباس أو القيام بالتحقق من الصحة أو الظروف أيضا من الوحدة النمطية عن طريق الحدث - المراقب أو عن طريقالتعديل في ملف PHTML؟

https://stackoverflow.com/questions/29819037/disable-cash-ON- التسليم - منتجات خاصة

و

href="https://stackoverflow.com/Questions/14011348/disable-Payment-Options-Only-Cash-On-Delivery-Fornivery-particular-product-magento"> https://stackoverflow.com/ أسئلة / 14011348 / تعطيل-خيارات الدفع فقط - فقط-نقد على التسليم - من أجل الخصم - Magento

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top