Magento একাধিক কুপন কার্টে প্রয়োগ


9

আমি কার্টে একাধিক কুপন প্রয়োগের জন্য 2 দিন ধরে কাজ করছি আমি জানি যে এর জন্য উপলব্ধ মডিউল রয়েছে। তবে আমি এটি ব্যবহার করতে চাই না। আমি কিছু কাস্টম কোড চাই যাতে আমি একক ক্রমে 1 টিরও বেশি কুপন কোড প্রয়োগ করতে পারি।

সাহায্য করুন. আমি একই জিনিস কাজ করার পরে খুব ক্লান্ত। এখানে চিত্র বর্ণনা লিখুন



BTW, আপনার প্রশ্নের eerily আমি শুধুমাত্র উপরের লিঙ্ক, যা 2013 থেকে অনুরূপ
টিম Hallman

@ টিম ~ আমি মনে করি না যে এটি সেরা পদ্ধতি, কারণ এটিতে ম্যাগেন্টোর প্রচলিত পদ্ধতিগুলি বাইপাস করে সরাসরি বিক্রয় টেবিলগুলিতে কলাম যুক্ত করা জড়িত। আমি এখন এটি নিয়ে প্রায় খেলেছি, এবং 2 টি পুনর্লিখন এবং কয়েকটি লাইন কোড দিয়ে এটি সহজেই অর্জন করা যায়। এছাড়াও সেই লিঙ্কের উত্তরটি কেবল 2 টি কোড যুক্ত করার অনুমতি দেয়। আমি কিছুটা উত্তর
দিয়েছি

@ শাগান pls আপনার কোড পোস্ট করুন।
জহিরব্বাস

আমাকে একটি উদাহরণ জিপ দিতে পারে, বা আরও নির্দিষ্ট ডিরেক্টরি হতে দয়া করে ধন্যবাদ
অলেক্সমালার

উত্তর:


14

আপনার কাস্টম মডিউলে, নিম্নলিখিতগুলিতে এতে যুক্ত করুন config.xml:

<models>
    <salesrule>
        <rewrite>
            <quote_discount>Namespace_Module_Rewrite_SalesRule_Model_Quote_Discount</quote_discount>
        </rewrite>
    </salesrule>
</models>
<frontend>
    <routers>
        <checkout>
            <args>
                <modules>
                    <Namespace_Module before="Mage_Checkout">Namespace_Module_Checkout</Namespace_Module>
                </modules>
            </args>
        </checkout>
    </routers>
</frontend>

প্রথম একটি লেখা হল Mage_SalesRule_Model_Quote_DiscountথেকেNamespace_Module_Rewrite_SalesRule_Model_Quote_Discount

দ্বিতীয়টি হল ওভারলোডেড নিয়ামক Mage_Checkout_CartController

এরপরে নিম্নলিখিত ফাইলটি যুক্ত করুন app/code/community/Namespace/Module/controllers/Checkout/CartController.php এবং নিম্নলিখিত কোডটি সন্নিবেশ করুন:

<?php

require_once 'Mage/Checkout/controllers/CartController.php';

class Namespace_Module_Checkout_CartController extends Mage_Checkout_CartController
{
    /**
     * Initialize coupon
     */
    public function couponPostAction()
    {
        /**
         * No reason continue with empty shopping cart
         */
        if (!$this->_getCart()->getQuote()->getItemsCount()) {
            $this->_goBack();
            return;
        }

        $couponCode = (string) $this->getRequest()->getParam('coupon_code');
        if ($this->getRequest()->getParam('remove') == 1) {
            $couponCode = '';
        }
        $oldCouponCode = $this->_getQuote()->getCouponCode();

        if (!strlen($couponCode) && !strlen($oldCouponCode)) {
            $this->_goBack();
            return;
        }

        try {
            $codeLength = strlen($couponCode);
            $isCodeLengthValid = $codeLength && $codeLength <= Mage_Checkout_Helper_Cart::COUPON_CODE_MAX_LENGTH;

            // Combine multiple coupons
            $couponFlag = true;

            if ($isCodeLengthValid) {
                $del = ',';

                if ($oldCouponCode) {

                    if ($oldCouponCode == $couponCode) {
                        $couponCode = $oldCouponCode;
                    } else {
                        $couponCode = $oldCouponCode . $del . $couponCode;
                    }
                }
            } else {
                $couponCode = '';
            }

            $this->_getQuote()->getShippingAddress()->setCollectShippingRates(true);
            $this->_getQuote()->setCouponCode($couponCode)
                ->collectTotals()
                ->save();

            if ($codeLength) {
                if ($isCodeLengthValid && $couponFlag) {
                    $this->_getSession()->addSuccess(
                        $this->__('Coupon code "%s" was applied.', Mage::helper('core')->escapeHtml($couponCode))
                    );
                } else {
                    $this->_getSession()->addError(
                        $this->__('Coupon code "%s" is not valid.', Mage::helper('core')->escapeHtml($couponCode))
                    );
                }
            } else {
                $this->_getSession()->addSuccess($this->__('Coupon code was canceled.'));
            }

        } catch (Mage_Core_Exception $e) {
            $this->_getSession()->addError($e->getMessage());
        } catch (Exception $e) {
            $this->_getSession()->addError($this->__('Cannot apply the coupon code.'));
            Mage::logException($e);
        }

        $this->_goBack();
    }
}

আপনি লক্ষ্য করবেন যে আমি "," দ্বারা ডিলিমেট কুপন কোডগুলি একত্রিত করার জন্য একটি বিভাগ যুক্ত করেছি। এটি অবশ্যই আরও পরিমার্জনযোগ্য হতে পারে এবং আপনি অতিরিক্ত চেকিং ইত্যাদি যুক্ত করতেও পারেন তবে এই কোডটি সরাসরি ব্যাট হাতে কাজ করা উচিত।

এবং অবশেষে আমাদের টুকরাটি যুক্ত করতে হবে যা সমস্ত যাদু করে। ফাইল যুক্ত করুনapp/code/community/Namespace/Module/Rewrite/SalesRule/Model/Quote/Discount.php

এবং সামগ্রী যুক্ত করুন:

<?php

class Namespace_Module_Rewrite_SalesRule_Model_Quote_Discount extends Mage_SalesRule_Model_Quote_Discount
{
    /**
     * Collect address discount amount
     *
     * @param   Mage_Sales_Model_Quote_Address $address
     * @return  Mage_SalesRule_Model_Quote_Discount
     */
    public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        Mage_Sales_Model_Quote_Address_Total_Abstract::collect($address);
        $quote = $address->getQuote();
        $store = Mage::app()->getStore($quote->getStoreId());
        $this->_calculator->reset($address);

        $items = $this->_getAddressItems($address);
        if (!count($items)) {
            return $this;
        }

        $couponCode = $quote->getCouponCode();
        $couponArray = explode(',',$couponCode);

        foreach ($couponArray as $couponCode) {
            $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $couponCode);
            $this->_calculator->initTotals($items, $address);

            $eventArgs = array(
                'website_id'        => $store->getWebsiteId(),
                'customer_group_id' => $quote->getCustomerGroupId(),
                'coupon_code'       => $couponCode,
            );

            $address->setDiscountDescription(array());
            $items = $this->_calculator->sortItemsByPriority($items);
            foreach ($items as $item) {
                if ($item->getNoDiscount()) {
                    $item->setDiscountAmount(0);
                    $item->setBaseDiscountAmount(0);
                }
                else {
                    /**
                     * Child item discount we calculate for parent
                     */
                    if ($item->getParentItemId()) {
                        continue;
                    }

                    $eventArgs['item'] = $item;
                    Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);

                    if ($item->getHasChildren() && $item->isChildrenCalculated()) {
                        foreach ($item->getChildren() as $child) {
                            $this->_calculator->process($child);
                            $eventArgs['item'] = $child;
                            Mage::dispatchEvent('sales_quote_address_discount_item', $eventArgs);

                            $this->_aggregateItemDiscount($child);
                        }
                    } else {
                        $this->_calculator->process($item);
                        $this->_aggregateItemDiscount($item);
                    }
                }
            }

            /**
             * process weee amount
             */
            if (Mage::helper('weee')->isEnabled() && Mage::helper('weee')->isDiscounted($store)) {
                $this->_calculator->processWeeeAmount($address, $items);
            }

            /**
             * Process shipping amount discount
             */
            $address->setShippingDiscountAmount(0);
            $address->setBaseShippingDiscountAmount(0);
            if ($address->getShippingAmount()) {
                $this->_calculator->processShippingAmount($address);
                $this->_addAmount(-$address->getShippingDiscountAmount());
                $this->_addBaseAmount(-$address->getBaseShippingDiscountAmount());
            }

            $this->_calculator->prepareDescription($address);
        }

        return $this;
    }
}

মূলত, এটি যা করে তা হ'ল কুপনের স্টিং আপ ভেঙে যায়, প্রতিটি কুপন কোডের মধ্য দিয়ে লুপ হয়, গণনা করে এবং উদ্ধৃতিগুলির योगের আপডেট হয়।

পরীক্ষা করতে, আমার কাছে দুটি শপিং কার্টের নিয়ম রয়েছে:

  • পরীক্ষা 1 - 10% পণ্যের মূল্য ছাড় - আরও নিয়ম প্রসেসিং বন্ধ করুন: না
  • পরীক্ষা 2 - 10% পণ্যের মূল্য ছাড় - আরও নিয়ম প্রসেসিং বন্ধ করুন: না

কোনও কুপন নেই: কোন কুপন

কুপন পরীক্ষা যোগ 1: যুক্ত কুপন পরীক্ষা 1

সংযুক্ত কুপন পরীক্ষা 2 যুক্ত কুপন পরীক্ষা 1

আমি স্থির পরিমাণ ছাড় দিয়ে পরীক্ষা করেছি এবং এটি প্রত্যাশার মতো কাজ করে works

এবং যেমনটি আমি বলেছিলাম, সম্ভবত আপনার ডুপ্লিকেটগুলির জন্য অতিরিক্ত চেক যোগ করার দরকার হতে পারে তবে আপনি এখানেই শুরু করবেন। সীমারেখার জন্য, আপনি কিছু যুক্তি যুক্ত করতে পারেন কোডগুলি বিভক্ত করতে পারেন তবে আপনি পছন্দ করেন বা যেমন করেন তেমন ছেড়ে যান।


এছাড়াও, উল্লেখ করতে ভুলে গেছি আপনি সম্ভবত আপনার প্রকৃত মডিউল নাম, ইত্যাদি নামস্থান / মডিউল প্রতিস্থাপন করতে হবে
Shaughn

এই উত্তরটি সম্পাদনার পরে এখন এটি উপরের স্ক্রিনশটের মতো কাজ করছে now এখন আমি একাধিক কুপন প্রয়োগের পরে কীভাবে নির্দিষ্ট কুপন বাতিল করতে পারি।
জহিরব্বাস

আপনাকে উত্তর দেওয়ার জন্য শাগানকে ধন্যবাদ, এটি আমার পক্ষে ম্যাজেন্টো ১.৯ এ কাজ করেছে তবে আমি এটি 1.8 ভেরিতে কাজ করতে পারিনি, এটি ব্রাউজারে কিছুই প্রদর্শন করে না এবং মেমোরি আকারকে ক্লান্তিযুক্ত ত্রুটিটি অ্যাপাচি ত্রুটিতে ফেলে দেয় (ম্যাজেন্টো ত্রুটি / সিস্টেম.লগ নয়) )
হারিস

আরে সাদ্দাম, মেমোরি ইস্যুটি সম্ভবত অনেকগুলি সমস্যার মধ্যে একটি তবে আপনি যা করতে পারছেন তা হল চেষ্টা করে কোডটি মুছে ফেলা এবং যে কোনও ত্রুটি কাটা হয়েছে তা লগইন করুন। পিএইচপি-তে সর্বোচ্চ মেমরির সেটিংস পরীক্ষা করে দেখুন এবং নিশ্চিত করুন যে আপনার পর্যাপ্ত স্মৃতি রয়েছে make পাওয়া যায়। লুপের ঠিক আগে আপনি কুপন কোডগুলি গণনা করতে পারতেন এবং মেমরিতে লোড হওয়া কয়েকটি রয়েছে বলে আমি সন্দেহ করি যে সেখানে কতগুলি আছে তা যাচাই করতে পারেন।
শাওন

1
একই কুপন কোডগুলির একাধিক ব্যবহার সহজেই প্রতিরোধ করতে আপনি কেবল অ্যারে_উনিক $ কুপনআরে = অ্যারে_উনিক (বিস্ফোরিত (',', $ কুপনকোড)) ব্যবহার করতে পারেন;
জুলিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.