EE 1.14.2 / সিই 1.9.2: উদ্ধৃতি আইটেমগুলি লগইনে সঠিকভাবে মার্জ করা হয়নি (কার্টে পণ্য সদৃশ)


16

আমি কার্টের সাথে ম্যাজেন্টো EE 1.14.2 এ (এছাড়াও সিই 1.9.2 প্রভাবিত করে) একটি অদ্ভুত বাগ পেয়েছি।

ধাপ পুনর্গঠন কর:

  1. গ্রাহক হিসাবে লগ ইন করুন
  2. কার্টে পণ্য এক্স যোগ করুন
  3. একটি ভিন্ন ব্রাউজারে স্যুইচ করুন
  4. কার্টে পণ্য এক্স যোগ করুন
  5. গ্রাহক হিসাবে লগ ইন করুন

প্রত্যাশিত কার্ট:

  • 2 এক্স পণ্য এক্স

আসল কার্ট:

  • 1 এক্স পণ্য এক্স
  • 1 এক্স পণ্য এক্স

অর্থাত্ পণ্যগুলি একত্রিত হয় না।

ব্রাউজারটি স্যুইচ করার পরিবর্তে আপনি সেশন কুকি সাফ করতে বা পণ্যটির জন্য আলাদা কিউটি বেছে নিতে পারেন।

এর সবচেয়ে খারাপ পার্শ্ব প্রতিক্রিয়া হ'ল প্রতি আইটেম সর্বাধিক অর্ডার পরিমাণ প্রয়োগ করা হয়। আমার ক্ষেত্রে, একটি পণ্যতে 100% ছাড় ছিল তবে আপনি কেবল একবার এটি অর্ডার করতে পারবেন। এই সামান্য কৌশলটি দিয়ে, আপনি এটিকে যে কোনও পরিমাণে বিনামূল্যে অর্ডার করতে পারেন could

কেন এটি ঘটে এবং আমি কীভাবে এটি প্রতিরোধ করতে পারি?

উত্তর:


18

উপরের বাগটি খুব ভালভাবে জড়িয়ে আছে, ফ্যাবিয়ান!

এই ত্রুটিটি পেরিয়ে আসা আরও যে কোনও ব্যবহারকারীর জন্য, ইতিমধ্যে এর জন্য ম্যাজেন্টো থেকে একটি প্যাচ রয়েছে।

একটি এন্টারপ্রাইজ গ্রাহক হিসাবে, আপনি এটি PATCH_SUPEE-6190_EE_1.14.2.0_v1.shঠিক করতে অনুরোধ / ডাউনলোড করতে পারেন ।

24.02.2016 আপডেট করুন: সর্বশেষতম সুপারি -7405 বনাম 1.1 প্যাচেও এটি সম্বোধন করা হয়েছিল। টুইটারে ফ্যাবিয়ানের মতে ( এটি এবং নিম্নলিখিত টুইটগুলি দেখুন ) এমন একটি সম্ভাবনা রয়েছে যা এখনও সম্পূর্ণ সমাধান করা হয়নি। এটি নিজে পরীক্ষা করুন।

EE 1.14.2.0 হিসাবে সমাধানটি হ'ল:

diff --git a/app/code/core/Mage/Sales/Model/Quote/Item.php b/app/code/core/Mage/Sales/Model/Quote/Item.php
index 3554faa..d759249 100644
--- a/app/code/core/Mage/Sales/Model/Quote/Item.php
+++ b/app/code/core/Mage/Sales/Model/Quote/Item.php
@@ -502,8 +502,8 @@ class Mage_Sales_Model_Quote_Item extends Mage_Sales_Model_Quote_Item_Abstract
                         $itemOptionValue = $_itemOptionValue;
                         $optionValue = $_optionValue;
                         // looks like it does not break bundle selection qty
-                        unset($itemOptionValue['qty'], $itemOptionValue['uenc']);
-                        unset($optionValue['qty'], $optionValue['uenc']);
+                        unset($itemOptionValue['qty'], $itemOptionValue['uenc'], $itemOptionValue['form_key']);
+                        unset($optionValue['qty'], $optionValue['uenc'], $optionValue['form_key']);
                     }
                 }

দ্রষ্টব্য: সাধারণত আমি এখানে ইই কোড পোস্ট করব না, তবে সমস্যা / ফাইলগুলি সিই হিসাবে একই এবং কেবল একটি ইই-বৈশিষ্ট্য প্রভাবিত করে না, আমি আশা করি এটি ঠিক আছে।


4
আমি এটি অনুমোদিত।
ফিলিউঙ্কল

5
আমরা এটিকে স্লাইড করতে দেব।
বেনমার্কস

1
স্লাইড এটি হয়।
মারিয়াস

এটি আমার ফিক্সের চেয়ে আরও ভাল কাজ করে যা বান্ডিল পণ্যগুলির সাথে সমস্যা সৃষ্টি করেছিল। ভাগ করে নেওয়ার জন্য ধন্যবাদ!
ফ্যাবিয়ান শেমংলার

1
দুর্ভাগ্যক্রমে এটি এখনও বাইপাস করা যায় যদি আপনি একবার পণ্য তালিকার মাধ্যমে এবং একবার পণ্য বিশদ পৃষ্ঠার মাধ্যমে পণ্য যুক্ত করেন, কারণ "সম্পর্কিত_প্রযুক্তি" পরামিতি কেবল পরবর্তী ক্ষেত্রে উপস্থিত থাকে। আপনি কলগুলিতে "সম্পর্কিত_প্রডাক্টগুলি" যুক্ত করতে পারেন unset(), তবে এটি এখনও নিরাপদ নয় কারণ যে কোনও স্বেচ্ছাসেবক পোস্ট প্যারামিটারটি বায়ার্কেস্ট বিকল্পটিতেও যুক্ত করা হয়। আমি পরিবর্তে এই বিকল্পটি উপেক্ষা করতে যাচ্ছি।
ফ্যাবিয়ান শেমংলার

15

দেখা গেল যে এটি একটি বাগ 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 প্রয়োগ করতে হবে বা তার পরিবর্তে একটি শ্রেণীর পুনর্লিখন ব্যবহার করতে হবে।


However, $item->getProduct()->hasCustomOptions() always returns true for quote items!এটি উদ্ধৃতি আইটেম নয় কাস্টম বিকল্পগুলির জন্য পণ্য ডেটা চেক করছে :)
কানেভবিগবে

1
@ Kanevbgbe আশ্চর্যজনকভাবে, না। ম্যাজেন্টো একটি উদ্ধৃতি আইটেমের সাথে যুক্ত পণ্যের উদাহরণটিকে "প্রস্তুত" করে এবং তার কাস্টম বিকল্পের মানগুলি যুক্ত করে
ফ্যাবিয়ান শেমংলার

আমি জানি যে কার্ট ক্রিয়াকলাপে পণ্য উদাহরণটি সম্পূর্ণরূপে লোড হয় (কোট লোডের সাথে তুলনা করে), সুতরাং এটি উদ্ধৃতিটির অ্যালগোরিদমগুলির বাইরে থেকে সরাসরি উদ্ধৃতি আইটেম উদাহরণ ট্রাট সেট প্রোডাক্ট () এ সেট করা থাকে, সম্ভবত তখন এই চেকটির আলাদা আউটপুট থাকে ।
কানেভগ্বে

1

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

আমাদের পক্ষে এটি খুব সহজ ছিল কারণ আমরা কেবল সাধারণ পণ্য ব্যবহার করি। সুতরাং, আমরা এর সাথে কোট মার্জ তুলনা ফাংশনটি প্রসারিত করেছি:

এনএস_মডিউল_মোডেল_সেলস_কোট_আইটেমটি ম্যাগেজ_সেলস_মোডেল_কোট_আইটেম প্রসারিত করে {

public function compare($item) {
    if ($this->getProductId() == $item->getProductId()) {
        return true;
    }
    return parent::compare($item);
}

}

এবং যোগ করেছেন

<models>
   <sales>
      <rewrite>
         <quote_item>NS_Module_Model_Sales_Quote_Item</quote_item>
      </rewrite>
   </sales>
</models>

কিন্তু। যারা কনফিগারযোগ্য পণ্যগুলি ব্যবহার করছেন তাদের ক্ষেত্রে এটি তখন আপনার পক্ষে সহায়ক নাও হতে পারে। সেক্ষেত্রে আপনি উভয় অ্যারে মুদ্রণ করতে পারেন: $ আইটেম্পশনভ্যালু এবং $ অপশনভ্যালু এবং পার্থক্যটি দেখতে পারেন। সমস্ত অতিরিক্ত কীগুলি আনসেট করুন যা উভয় অ্যারেতে সাধারণ নয়। যে সমস্যার সমাধান করা উচিত।


-1

আপনি ইভেন্টে বিক্রয়_উত্তীর্ণ_অ্যাড_াইটেমের জন্য কেবলমাত্র একটি বিকল্প যুক্ত করতে পারেন:

$data['microtime'] = microtime(true);
$product->addCustomOption('do_not_merge', serialize($data));
$item->addOption($product->getCustomOption('do_not_merge'));

রেফারেন্স লিঙ্ক: কার্টের অবস্থানগুলি মার্জ করা অক্ষম করবেন?


এটি একটি কার্যকর, কিন্তু সম্পূর্ণরূপে আইটেম মার্জ করা অক্ষম করা সাধারণত কাঙ্ক্ষিত নয়।
ফ্যাবিয়ান শেমংলার 6
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.