2011-01-25 15 views
8

के साथ कार्ट में मैंने थोड़ी देर के लिए खोज की और केवल बुद्धि समाधान आया जो मैगेंटो स्टोर में उत्पादों के लिए नए नए विकल्प सेट को जोड़ता है।उत्पाद के लिए विकल्प मान जोड़ें, फिर Magento

जो मैं पूरा करने की कोशिश कर रहा हूं वह कार्ट में एक सरल उत्पाद जोड़ने का एक तरीका है। इस सरल उत्पाद में कुछ पूर्वनिर्धारित कस्टम विकल्प (निःशुल्क टेक्स्ट फ़ील्ड) हैं जिन्हें एक php फ़ंक्शन द्वारा भरना होगा।

तो, मैं यह कैसे कर सकता हूं? मान लें कि मेरे पास आईडी "111" और एक कस्टम विकल्प वाला उत्पाद है।

$qty = '1'; 
$product = Mage::getModel('catalog/product')->load("111"); 
// set option value in product model? 

$cart = Mage::helper('checkout/cart')->getCart(); 
$cart->addProduct($product, $qty); 
// set option value while passing product to car? 

$cart->save(); 

किसी भी हिंद के लिए अग्रिम धन्यवाद।

बीटीडब्ल्यू: क्वेरीरीस्ट्रिंग के माध्यम से सेटिंग विकल्प मूल्य here देखा गया है।

उत्तर

15

आप उत्पाद मॉडल पर कस्टम विकल्प सेट नहीं करते हैं, तो आप इसे $cart->addProduct($product, $params) पर दूसरे तर्क के माध्यम से पास करते हैं।

की स्थापना की हम एक परियोजना, कि Magento गाड़ी में जोड़ने के लिए एक बाहरी अनुप्रयोग की आवश्यकता है के लिए है, निम्न स्वरूप का एक $params सरणी का उपयोग करना है:

$params = array(
    'product' => 1, // This would be $product->getId() 
    'qty' => 1, 
    'options' => array(
     34 => "value", 
     35 => "other value", 
     53 => "some other value" 
    ) 
); 

$params['options'] कस्टम विकल्प में जानकारी शामिल है । कुंजी कस्टम विकल्प आईडी हैं, यदि आप फ़ायरबग, या इसी तरह के उत्पाद स्क्रीन के कस्टम विकल्प अनुभाग का निरीक्षण करते हैं तो आप उन्हें देख सकते हैं।

$params['product'] अनावश्यक हो सकता है, मैंने कुछ समय पहले इस स्क्रिप्ट को Magento के पहले संस्करण के लिए लिखा था।

इसके अलावा, मुझे यकीन है कि मानक कार्ट में जोड़ें ईवेंट इस तरह से जोड़े जाने पर आग लगेंगे, इसलिए आपको उन्हें स्वयं से सेट करना होगा। दुष्प्रभाव हो सकते हैं।

+0

धन्यवाद निक! Magento 1.4.1.1 में परीक्षण किया, उम्मीद की तरह काम करता है। – NiBa

+0

मेरे मामले में यह एक विन्यास योग्य उत्पाद मैं इसे कैसे प्राप्त कर सकता हूं? मुझे addtocart से एक कस्टम मॉड्यूल संबंधित मूल्य पारित करने की जरूरत है। मेरे विकल्प यहाँ क्या हैं? मैं सत्र, घटना का उपयोग कर सकता हूं लेकिन मैं केवल तभी करूंगा, जब मुझे यकीन है कि कोई दूसरा रास्ता नहीं है। ps: सभी प्रकार के उत्पादों के लिए इसे सामान्य बनाने के लिए tyring। –

+0

धन्यवाद! मैंने एक ही परेशानी से लड़ने के लिए आधा दिन बिताया! –

0

वर्तमान उत्तर में समस्या यह है कि यदि एसकेयू समान है तो Magento एक दूसरी पंक्ति वस्तु नहीं जोड़ पाएगा लेकिन विकल्प पहले से अलग हैं। यदि आप एक 3 "सेब और एक 4" सेब चाहते हैं तो आप अलग लाइन आइटम चाहते हैं। या कम से कम मुझे करना है।

निम्न URL

/store/checkout/cart/add?product=23&qty=1&options[41]=4 

पीछा करने के लिए एक HTTP कॉल

/store/checkout/cart/add?product=23&qty=1&options[41]=3 

द्वारा दो पंक्ति वस्तुएँ जोड़ देगा।

लेकिन फिर भी यह लड़ाई का केवल आधा है, ये विकल्प कोड किसके लिए खड़े हैं ?? वैसे निम्नलिखित PHP कोड आपको बताएगा। और चूंकि हम एक HTTP कॉल का उपयोग कर रहे हैं, कोड जावास्क्रिप्ट तैयार जेएसओएन वापस करेगा।

<?php  
include_once '../app/Mage.php'; 
Mage::app(); 
echo getProductOptionsIds($_GET['eventcode']); 

function getProductOptionsIds($sku) 
{ 

    $ProductID = Mage::getModel('catalog/product')->getIdBySku($sku); 
    $Product = Mage::getModel('catalog/product')->load($ProductID); 

    $config = array(); 
    $config['ProductID'] = $ProductID; 

    foreach ($Product->getOptions() as $option) { 
      // @var $option Mage_Catalog_Model_Product_Option 
     if ($option->getGroupByType() == Mage_Catalog_Model_Product_Option::OPTION_GROUP_SELECT) { 
      $_tmpValues = array(); 
      foreach ($option->getValues() as $value) { 
       // @var $value Mage_Catalog_Model_Product_Option_Value 
       $_tmpValues[$value->getTitle()] = $value->getId(); 
      } 

      $config[$option->getTitle().'list'] = $option->getId(); 
      $optionValue = $_tmpValues; 
     } else { 
      $optionValue = $option->getId(); 
     } 
     $config[$option->getTitle()] = $optionValue; 
    } 
    return json_encode($config); 
} 
?> 
1

आप addproduct के लिए इनपुट पैरामीटर लिखना चाहिए निम्न स्वरूप के रूप में, यह अपने आप के द्वारा परीक्षण किया जाता है:

$params = array(
    'product' => 1, // This would be $product->getId() 
    'qty' => 1, 
    'super_attribute' => array(
     34 => "value", 
     35 => "other value", 
     53 => "some other value" 
    ) 
); 
4

Magento 1.7 में आप एक Varien वस्तु में पैरामीटर सरणी रैप करने के लिए किया है।

   $params = array(
        'product' => $_fancypack->getId(), 
        'qty' => 1, 
        'options' => array(
         $this->_getOptionId($_fancypack,'Product SKU') => $product->getId() .'/'. $product->getSku() 
        ) 
       ); 

       $request = new Varien_Object(); 
       $request->setData($params); 

       $quote->addProduct($_fancypack, $request); 
संबंधित मुद्दे