পর্যবেক্ষক ব্যবহার করে কার্টে স্রেফ পণ্য যুক্ত করার জন্য কাস্টম বিকল্প এবং পুরষ্কার তৈরি করা


15

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

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{

 $item = $observer->getQuoteItem();  
  $item->addOption(new Varien_Object(
            array(
                    'product' => $item->getProduct(),
                    'label' => 'Free Gifts',
                    'value' => 'Spend $50 and get gift product worth $9.99'
                 )
        ));
    return;

}

আমার পর্যবেক্ষক কাজ করছেন তবে আমি যুক্ত পণ্যটিতে কাস্টম বিকল্প যুক্ত করতে পারছি না। স্রেফ যুক্ত পণ্যটিতে পর্যবেক্ষক ব্যবহার করে কাস্টম বিকল্প যুক্ত করতে সহায়তা সরবরাহ করুন।


এছাড়াও আমাকে পর্যবেক্ষকের কাছে পণ্যের কাস্টম মূল্য পরিবর্তন করতে সরবরাহ করুন। আমি শুল্কে কাস্টম মূল্য যুক্ত করতে চাই অগ্রিম ধন্যবাদ
কিয়ুর প্যাটেল

উত্তর:


19

@ টিম উইকএন্ডে এই সমস্যা সম্পর্কে একটি বক্তব্য দিয়েছেন: https://docs.google.com/presentation/d/1efPznQSVTrT1HAD1xQvCPC-Tgvr8jYok4X7ZEJhm9jE/edit

আপনি যা চান তা হল পদ্ধতি 2: কনফিগ.এক্সএমএলে নিম্নলিখিত ইভেন্ট যুক্ত করুন

<sales_quote_collect_totals_before>
<observers>
<hackathon_presentation>
<type>singleton</type>
<class>modulename/observer</class>
<method>salesQuoteAddressCollectTotalsBefore</method>
</hackathon_presentation>
</observers>
</sales_quote_collect_totals_before>

Observer.php এ নিম্নলিখিত পদ্ধতিটি যুক্ত করুন

   public function salesQuoteAddressCollectTotalsBefore($observer)
    {
        $quote = $observer->getQuote();
        $quote_items = $quote->getItemsCollection();
        foreach ($quote_items as $item) {
            $additionalOptions = array(
                array(
                    'code'  => 'my_code',
                    'label' => 'This text is displayed through additional options',
                    'value' => 'ID is ' . $item->getProductId() . ' and SKU is ' . $item->getSku()
                )
            );
            $item->addOption(
                array(
                     'code'  => 'additional_options',
                     'value' => serialize($additionalOptions),
                )
            );
        }
    }

এই বিষয় সম্পর্কে এখানে আরও রয়েছে:

/programming/9334115/magento-change-custom-option-value-before-adding-it-to-cart/9344336#9344336

এবং আরও:

/programming/9412074/magento-quote-order-product-item-attribute-based-on-user-input/9496266#9496266


1
প্রথম: দয়া করে নতুন উত্তরগুলির পরিবর্তে মন্তব্যগুলি ব্যবহার করুন। এবং তারপরে লুপটিতে আপনার পণ্যটির জন্য একটি চেক sertোকান, সুতরাং কেবলমাত্র আপনার পছন্দসই পণ্যটি বিকল্প পায় gets
ফ্যাবিয়ান ব্লাচসমিড

1
এই দুর্দান্ত ডিবাগিং উত্তরের উপর একবার নজর দিন এবং ফিরে মন্তব্য করুন: magento.stackexchange.com/a/429/217
ফ্যাবিয়ান

1
উপরের বর্ণিত পদক্ষেপগুলি দিয়ে এটি সম্ভব
ফ্যাবিয়ান ব্লাচস্মিড্ট

2
পরামর্শের জন্য আপনাকে ধন্যবাদ যখন আমি কার্টে যুক্ত করি তখন আমি দুটি আইটেম পেয়েছিলাম কারণ আমি কনফিগারযোগ্য পণ্যটি ব্যবহার করছি এবং আমি শেষ উদ্ধৃতি আইটেমটি আপডেট করে সমস্যার সমাধান করেছি।
মিলোপ ইনক

1
আমি না, তবে আমি লিঙ্কটি আপডেট করেছি। ধন্যবাদ!
ফ্যাবিয়ান ব্লাচসমিড

3

ফ্লাইতে কাস্টম বিকল্পগুলি যুক্ত করতে অ্যাপোপিয়েট ইভেন্টটি হ'ল catalog_product_type_prepare_full_options, যা পণ্যটির কাস্টম বিকল্পগুলির সাথে একটি উদ্ধৃতি আইটেমে রূপান্তরিত হওয়ার ঠিক আগে ট্রিগার করা হয়।

নিজস্ব বায়ারউয়েস্ট ডেটাতে পণ্যের বৈশিষ্ট্য বা বিকল্পগুলির উপর প্রভাব থাকতে হবে, ইভেন্টের একজন পর্যবেক্ষক catalog_product_type_prepare_{$processMode}_optionsভাল পছন্দ, যেখানে $processModeবৈধতা মোড এবং এটি "পূর্ণ" বা "লাইট" হতে পারে। "পূর্ণ" মোডটি ব্যবহৃত হয় যখন কোনও পণ্য নিয়মিত কার্টে যুক্ত হয় এবং প্রয়োজনীয় সমস্ত বিকল্পগুলি সেট করা থাকলে এবং পুরো কনফিগারেশনটি বৈধ কিনা তা যাচাই করে। "লাইট" মোডে কেবল অনুরোধের মধ্যে থাকা বিকল্পগুলি বৈধ হয়, ইচ্ছামত তালিকায় কোনও পণ্য যুক্ত করার সময় এটি ব্যবহৃত হয়, তবে ব্যাকএন্ড থেকে অর্ডার তৈরি করার সময় এটিও সম্ভব। যে কোনও ক্ষেত্রে ডেটা প্রক্রিয়া করতে আপনি উভয় ইভেন্টের জন্য পর্যবেক্ষককে নিবন্ধভুক্ত করতে পারেন। যদি কোনও বৈধতা থাকে তবে অবশ্যই আপনার অবশ্যই ইভেন্টগুলির মধ্যে পার্থক্য করা উচিত।

ইভেন্টগুলি ম্যাজ_গ্লাগল_মোডেল_প্রডাক্ট_টাইপ_ অ্যাবস্ট্র্যাক্ট :: _ রেডিপোশন () প্রস্তুত করে এবং নিম্নলিখিত প্যারামিটারগুলি উপলভ্য:

  • transport: সমস্ত কাস্টম বিকল্পের জন্য পরিবহণ অবজেক্ট (তবে অন্য কোনও বিকল্প নয়, উদাহরণস্বরূপ বান্ডিল বিকল্পগুলি), যাতে আপনি সেগুলি পর্যবেক্ষকগুলিতে পরিবর্তন করতে পারেন। পরিবহন-> বিকল্পগুলি বিকল্প_আইডি => বিকল্প_মূল্যে ফর্মের একটি অ্যারে। মনোযোগ দিন, পরিবহন নিজেই একটি stdClass অবজেক্ট, ভ্যারেন_অবজেক্টের উদাহরণ নয়, যেমনটি আপনি আশা করতে পারেন। সুতরাং পরিবহন-> বিকল্পগুলির জন্য কোনও গেটর এবং সেটার পদ্ধতি নেই।
  • buy_request: বায়ারেক্সট অবজেক্ট, আপনি এটি এখানে পড়তে পারেন এবং এখনও এটি পরিবর্তন করতে পারেন।
  • product: পরে যে পণ্যটি একটি উদ্ধৃতি আইটেমে রূপান্তরিত হবে। এখানে আপনি বৈশিষ্ট্যগুলি পরিচালনা করতে পারেন বা এগুলি গতিশীলভাবে যুক্ত করতে পারেন। তবে রূপান্তর প্রক্রিয়াতে আপনার এখনও তাদের বিবেচনা করা দরকার। এর জন্য ব্যবহৃত ইভেন্টটি sales_quote_product_add_after, কেবল পরে ট্রিগার করা হবে।

উত্স: দ্য ম্যাজেন্টো বায়ার্কেস্ট অবজেক্ট - একটি রেফারেন্স

সুতরাং কোনও পর্যবেক্ষক এর মতো দেখতে পাবেন:

public function addCustomOption(Varien_Event_Observer $observer)
{
    $transport = $observer->getTransport();
    if (this_item_should_be_free()) { // implement your condition here
        $transport->options['Free Gifts'] = 'Spend $50 and get gift product worth $9.99';
    }
}

আপনি এই গতিশীলভাবে যুক্ত কাস্টম বিকল্পের জন্য মূল্য নির্ধারণ করতে পারবেন না, তবে আপনি দ্বিতীয় পর্যবেক্ষককে এর catalog_product_get_final_priceমতো ব্যবহার করে উদ্ধৃতি আইটেমের দাম পরিবর্তন করতে পারেন :

public function adjustFinalPrice($observer) {

    $product = $observer->getProduct();
    // Set price to "0" if custom option "Free Gift" has been set
    if ($product->getCustomOption('Free Gift')) {
        $product->setFinalPrice(0);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.