আইটেম, অর্ডার আইটেম উদ্ধৃতি গতিশীল কাস্টম বিকল্প অনুলিপি


13

আমার কাছে একটি পর্যবেক্ষক রয়েছে যা পণ্যের বিবরণ পৃষ্ঠায় গতিশীল কাস্টম বিকল্পগুলি যুক্ত করছে, যা catalog_controller_product_viewইভেন্টটিতে ডাকা হয় । এটি গ্রাহককে তাদের বিদ্যমান লাইসেন্স কোডের একটি ড্রপডাউন থেকে নির্বাচন করতে দেয়।

public function addLicenseOptions(Varien_Event_Observer $observer) {
    $product = $observer->getEvent()->getProduct();
    if ($product->isSubscriptionProduct()) {
        $optionModel = Mage::getModel('catalog/product_option')
            ->setTitle('License Code')
            ->setProductId($product->getId())
            ->setStoreId($product->getStoreId())
            ->setId('license_code')
            ->setType('drop_down')
            ->setPrice(null)
            ->setPriceType(null)
            ->setIsRequire(true);

        $customer = Mage::getSingleton('customer/session')->getCustomer();
        if ($customer->getId()) {
            $linksPurchased = Mage::getResourceModel('downloadable/link_purchased_collection')
                        ->addFieldToFilter('customer_id', $customer->getId());

            if ($linksPurchased->count() > 0) {
                foreach ($linksPurchased as $linkPurchased) {
                    $valueModel = Mage::getModel('catalog/product_option_value')
                        ->setTitle($linkPurchased->getData('key_code'))
                        ->setProduct($product)
                        ->setOption($optionModel)
                        ->setId($linkPurchased->getData('license_code'))
                        ->setPrice(null)
                        ->setPriceType('fixed')
                        ->setSku(null);
                    $optionModel->addValue($valueModel);
                }
                $product->setHasOptions(1);
                $product->addOption($optionModel);
            }
        }
    }
}

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

উত্তর:


6

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

আমি ইভেন্টের জন্য একটি পর্যবেক্ষক ছিল sales_convert_quote_item_to_order_item

public function checkGiftWrap($observer)
{
    $orderItem = $observer->getEvent()->getOrderItem();
    $item = $observer->getEvent()->getItem();
    $wrap = $item->getOptionByCode('wrap');
    if ($wrap){
        $options = $orderItem->getProductOptions();
        $options['wrap'] = unserialize($wrap->getValue());
        $orderItem->setProductOptions($options);
    }
    return $this;
}

Mage_Catalog_Helper_Product_Configuration::getCustomOptionsআমার বিকল্পটি গুরুত্বপূর্ণ এবং এটি আলাদাভাবে চিকিত্সা করা উচিত বলে ম্যাগেন্টোকে জানানোর জন্য আমি সহায়তাকে আবার লিখেছি

<?php
class [Namespace]_[Module]_Helper_Product_Configuration extends Mage_Catalog_Helper_Product_Configuration
{
    public function getCustomOptions(Mage_Catalog_Model_Product_Configuration_Item_Interface $item){
        $options = parent::getCustomOptions($item);
        $wrap = $item->getOptionByCode('wrap');
        if ($wrap){
            $options = array_merge($options, array(unserialize($wrap->getValue())));
        }
        return $options;
    }
}

একই কারণে আমি আবারও লিখেছি Mage_Sales_Block_Order_Item_Renderer_Default::getItemOptionsতাই আমার বিকল্পটি কার্টে প্রদর্শিত হবে

<?php
class [Namespace]_[Module]_Block_Sales_Order_Item_Renderer_Default extends Mage_Sales_Block_Order_Item_Renderer_Default
{
    public function getItemOptions(){
        $result = parent::getItemOptions();
        $options = $this->getOrderItem()->getProductOptions();
        if (isset($options['wrap'])){
            $result = array_merge($result, array($options['wrap']));
        }
        return $result;
    }
}

এবং আদেশ আইটেমগুলি গ্রিডের জন্য প্রশাসকের নাম কলাম:

<?php
class [Namespace]_[Module]_Block_Adminhtml_Sales_Items_Column_Name extends Mage_Adminhtml_Block_Sales_Items_Column_Name
{
    public function getOrderOptions(){
        $result = parent::getOrderOptions();
        if ($options = $this->getItem()->getProductOptions()) {
            if (isset($options['wrap'])) {
                $result = array_merge($result, array($options['wrap']));
            }
        }
        return $result;
    }
}

[সম্পাদনা]
এটি আমার কিছু মিস হয়েছে তা শিখেছে। পণ্যটি কার্টে আসার পরে আমি কেবল একটি উপহারের rapালবার বিকল্পটি প্রয়োগ করেছি।
তবে আমি মনে করি আপনি কার্টে আইটেমটি যুক্ত করার আগে বা পরে কোনও ইভেন্টে একই কোডটি ব্যবহার করতে পারেন।

$data = array();
$data['label'] = Mage::helper('helper_alias')->__('Giftwrapping');
$data['value'] = Mage::helper('helper_alias')->__('Yes');
$product->addCustomOption('wrap', serialize($data));
$item->addOption($product->getCustomOption('wrap'));
$item->save(); //this line should be called only if it's not called by default after your event is dispatched.

এটাই. আমি আশা করি আপনি এটি থেকে দরকারী কিছু পেতে পারেন।


যেখানে আমার সমস্যা হচ্ছে সেখানে বিকল্পটি পাওয়া যাচ্ছে। আমি যখন $ আইটেম-> getOptionByCode ('লাইসেন্স_code') কল করি তখন আমি শূন্য হয়ে যাচ্ছি। আমি যখন নিম্নলিখিতগুলি কল করি তখন আমার বিকল্পগুলিও প্রদর্শিত হয় না: $ সহায়ক = দালাল :: সহায়ক ('ক্যাটালগ / পণ্য_ কনফিগারেশন'); $ বিকল্পগুলি = $ সহায়ক-> getCustomOptions (ote উদ্ধৃতি আইটেম); আপনি কীভাবে 'মোড়ানো' বিকল্পটি সেট করছেন?
লরা 21

@Laura। আমি কিছু মিস করেছি কিনা তা আমি যাব এবং আপনার কাছে ফিরে আসব I'll
মারিয়াস

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

আমি সর্বোপরি কেনার অনুরোধটিকে বিশ্লেষণ করে শেষ করেছি। সমস্যাটি হ'ল আমি আমার মূল কোড ব্লকে যে বিকল্পগুলি সেট করছি সেগুলি কেনার অনুরোধের বাইরে কোট আইটেমে স্থানান্তরিত হচ্ছে না।
লৌরা

@ মারিয়াস আমি ফ্লাই জেনারেট অপশনের সাথে কার্টে পণ্য যুক্ত করতে চাই অ্যাডমিনের পক্ষে পণ্য বিকল্পে যোগ না করে এটি কীভাবে সম্ভব
পুষ্পেন্দ্র সিং 11

4

মারিয়াসের উত্তরের সাথে জড়িত, এখানে এমন কিছু যা আমি নিয়ে এসেছি:

আমার কাছে একটি কাস্টম নিয়ামক রয়েছে যা একটি কাস্টম পণ্য ধরণের কনফিগারেশন পরিচালনা করে। এই নিয়ামক additional_optionsকার্টে যোগ করার সময় যুক্ত করে।

// My_Module_CartController::addToCartAction
// Get your product model
$product = $this->getProduct();

// Create options
$options = array();
$options['my_option'] = array(
    'label' => 'My Label',
    'value' => 'my_value'
);

$cartRequest = array(
    'product' => $product->getId(),
    'qty' => '1'
);

$cart = Mage::getModel('checkout/cart');
$cart->init();

// Add options
$product->addCustomOption('additional_options', serialize($options));

// Add to cart
$cart->addProduct($product, $cartRequest);
$cart->save();

ইভেন্টের কোনও পর্যবেক্ষক হিসাবে sales_convert_quote_item_to_order_item, আমি তখন এটি ধরব additional_optionsএবং অর্ডার আইটেমটিতে বিকল্প হিসাবে সেট করব:

// My_Module_Model_Order_Observer::convertQuoteToOrder(Varien_Event_Observer $o)
// Get quote and order items
$orderItem = $o->getEvent()->getOrderItem();
$quoteItem = $o->getEvent()->getItem();

// Get serialized options set on product earlier
$myOptions = $item->getProduct()->getCustomOption('additional_options')->getValue();

// Add these options into the order item's options
$options = $orderItem->getProductOptions();
$options['additional_options'] = unserialize($myOptions);
$orderItem->setProductOptions($options);

return $this;

ব্যবহার করে additional_optionsআপনাকে বিভিন্ন ব্লক / টেমপ্লেটগুলি বিকল্পগুলির রেন্ডারিং সম্পর্কে চিন্তা করতে হবে না (যদিও আপনি কোনও পরিবর্তিত বিন্যাস পছন্দ করতে পারেন) কারণ এই ব্লকগুলি এখানে দেখুন কল করবে$options['additional_options']

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.