আপনার কাস্টম মডিউলে, নিম্নলিখিতগুলিতে এতে যুক্ত করুন 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:
সংযুক্ত কুপন পরীক্ষা 2
আমি স্থির পরিমাণ ছাড় দিয়ে পরীক্ষা করেছি এবং এটি প্রত্যাশার মতো কাজ করে works
এবং যেমনটি আমি বলেছিলাম, সম্ভবত আপনার ডুপ্লিকেটগুলির জন্য অতিরিক্ত চেক যোগ করার দরকার হতে পারে তবে আপনি এখানেই শুরু করবেন। সীমারেখার জন্য, আপনি কিছু যুক্তি যুক্ত করতে পারেন কোডগুলি বিভক্ত করতে পারেন তবে আপনি পছন্দ করেন বা যেমন করেন তেমন ছেড়ে যান।