দেখা গেল যে এটি একটি বাগ Mage_Sales_Model_Quote_Item::compare()যা ম্যাগেন্টো সিই 1.9.2 / EE 1.14.2 এ চালু হয়েছিল। আইটেমগুলি একই পণ্য কিনা তা নির্ধারণ করার জন্য পদ্ধতিটি ব্যবহার করা হয় এবং একত্রীকরণ করা যায় (লগইন করার সময় এবং কার্টে পণ্য যুক্ত করার সময়)।
সমস্ত কাস্টম বিকল্পের তুলনা করার সময়, এটি এমন বিকল্পগুলি এড়িয়ে চলে উচিত _notRepresentOptionsযা পুনঃপ্রবেদী না হয় ( ), যেমন তথ্য_বাইআরয়েভেস্ট বিকল্প।
পূর্ববর্তী ম্যাজেন্টো সংস্করণগুলিতে এটি দেখতে এমন দেখাচ্ছে:
foreach ($this->getOptions() as $option) {
if (in_array($option->getCode(), $this->_notRepresentOptions)) {
continue;
}
এবং সঠিকভাবে কাজ। এখন এটির মতো দেখাচ্ছে:
foreach ($this->getOptions() as $option) {
if (in_array($option->getCode(), $this->_notRepresentOptions)
&& !$item->getProduct()->hasCustomOptions()
) {
continue;
}
এবং hasCustomOptions()বর্ণিত বাগের অতিরিক্ত তদন্তের কারণে। কেন? দেখে মনে হচ্ছে চেকটি সর্বদা কাস্টম বিকল্পগুলির সাথে পণ্য আলাদা রাখতে যোগ করা হয়েছে। আমি মনে করি না যে এটি বোধগম্য হয়েছে, অন্তত এটি যেভাবে কার্যকর করা হয়েছে তা নয়, তবে এর কিছু কারণ থাকবে যার সম্পর্কে আমি অবগত নই।
তবে, $item->getProduct()->hasCustomOptions()সবসময় উদ্ধৃতি আইটেমগুলির জন্য সত্য ফেরত দেয়!
এই পদ্ধতি:
public function hasCustomOptions()
{
if (count($this->_customOptions)) {
return true;
} else {
return false;
}
}
কিন্তু $this->_customOptionsএছাড়াও রয়েছে info_buyRequestউদ্ধৃতি আইটেম থেকে বিকল্প।
আপত্তিজনক সমাধানের জন্য, আমি info_buyRequestকোনও পর্যবেক্ষকের সমস্ত পণ্য থেকে বিকল্পটি সরিয়ে দেওয়ার চেষ্টা করেছি sales_quote_merge_before, কোনও সাফল্য নেই।
Mage_Sales_Model_Quote_Item_Abstract::getProduct()কোট আইটেমটি থেকে বিকল্পটি আবার অনুলিপি করা হওয়ার কারণটি রয়েছে :
public function getProduct()
{
$product = $this->_getData('product');
[...]
if (is_array($this->_optionsByCode)) {
$product->setCustomOptions($this->_optionsByCode);
}
return $product;
}
সমাধান
এই মুহুর্তে বিকল্পটি অন্তর্ভুক্ত না করার জন্য আমি Mage_Sales_Model_Quote_Itemএকটি ওভাররাইড দিয়ে পুনর্লিখন তৈরি করেছি :getProduct()info_buyRequest
public function getProduct()
{
$product = parent::getProduct();
$options = $product->getCustomOptions();
if (isset($options['info_buyRequest'])) {
unset($options['info_buyRequest']);
$product->setCustomOptions($options);
}
return $product;
}
এটি বান্ডিল পণ্যগুলির সাথে সমস্যার সৃষ্টি করে, নীচে বিকল্প বা @ আনাভাল্কল দ্বারা বর্ণিত অফিসিয়াল প্যাচ একটি ভাল সমাধান
বিকল্প
এছাড়াও আপনি আপত্তিকর দূর করতে পারবে && !$item->getProduct()->hasCustomOptions()মধ্যে compare()যদি আইটেমটি মডেল কোন পথে rewriting হয় পদ্ধতি। আমি জানি না কী সমস্যাটি সমাধান করার চেষ্টা করেছিল তবে এটি আরও তৈরি করেছে ...
জানুয়ারী 29, 2016 আপডেট
আমি এটি ম্যাজেন্টোকে জানিয়েছি এবং প্রতিক্রিয়া পেয়েছি যে তারা সমস্যাটি পুনরায় উত্পাদন করতে পারে না, তাই প্যাচটি এটি সম্প্রদায়ের সংস্করণে জমা দেবে না (সাবমিশন অ্যাপ্লিকেশন -1321)।
এর অর্থ হল, আপনার যদি সমস্যা হয় তবে আপনাকে প্রতিটি আপডেটের পরে এন্টারপ্রাইজ প্যাচ SUPEE-6190 প্রয়োগ করতে হবে বা তার পরিবর্তে একটি শ্রেণীর পুনর্লিখন ব্যবহার করতে হবে।