2010-05-13 13 views
13

में कस्टम विकल्प प्रोग्रामेटिक रूप से कैसे प्राप्त करें मेरे पास चेकआउट पर कुछ उत्पाद हैं जो मुझे कोड के माध्यम से उनके लिए चुने गए सभी कस्टम विकल्प प्राप्त करने में सक्षम होना चाहिए।Magento

किसी भी मदद की बहुत सराहना की है!

+0

तरीके (में निर्मित, मॉड्यूल, आदि) की बहुत सी चीज़ें हैं एक कस्टम प्राप्त करने के लिए Magento में एक उत्पाद से जुड़ा विकल्प। यदि आप समुदाय को यह बताते हैं कि आप विकल्पों को कैसे जोड़ रहे हैं तो आपको जवाब प्राप्त करने का एक बेहतर मौका मिलेगा। –

+0

बस बस php में उत्पादक होने और उस उत्पाद से जुड़े कस्टम विकल्प प्राप्त करने में सक्षम होने के नाते। – DaveC

+0

यह शब्द "कस्टम विकल्प" है जो भ्रम पैदा कर रहा है। उत्पाद में कस्टम विकल्प कैसे जोड़े गए थे? Magento के माध्यम से? एक वाणिज्यिक विस्तार के माध्यम से? एक कस्टम विस्तार के माध्यम से? –

उत्तर

21

मैं आपको केवल एक उत्पाद का उदाहरण दूंगा। मान लीजिए कि आप अपने आवश्यक उत्पाद के स्कू को जानते हैं (उदाहरण के लिए, इसे "एबीसीडीई" दें)। तो आप उस उत्पाद की आईडी प्राप्त कर पाएंगे।

कोड कुछ हद तक तरह होगा: -

$productSku = "ABCDE"; 
$product = Mage::getModel('catalog/product'); 
$productId = $product->getIdBySku($productSku); 
$product->load($productId); 

/** 
* In Magento Models or database schema level, the product's Custom Options are 
* executed & maintained as only "options". So, when checking whether any product has 
* Custom Options or not, we should check by using this method "hasOptions()" only. 
*/ 
if($product->hasOptions()) { 
    echo '<pre>'; 

    foreach ($product->getOptions() as $o) { 
     $optionType = $o->getType(); 
     echo 'Type = '.$optionType; 

     if ($optionType == 'drop_down') { 
      $values = $o->getValues(); 

      foreach ($values as $k => $v) { 
       print_r($v); 
      } 
     } 
     else { 
      print_r($o); 
     } 
    } 

    echo '</pre>'; 
} 

मुझे लगता है कि यह आप आरंभ करने देगा।

परिवर्तनीय "$optionType" में विकल्प के प्रकार के आधार पर, आपको एक और नेस्टेड "foreach" लूप कॉल करने की आवश्यकता है। मैंने टेक्स्ट बॉक्स, टेक्स्ट फ़ील्ड्स, ड्रॉप डाउन पर काम किया है, लेकिन अन्य प्रकारों पर नहीं। तो मुझे लगता है कि आपको अपने आप से कुछ और आरएनडी करने की जरूरत है।

+0

मुझे कस्टम विकल्पों के लिए पूछताछ में समस्या आ रही है। एक ऐसे उत्पाद के लिए जो परिवर्तनीय आकार (बड़ा, मध्यम, छोटा) है, मैं उपयोगकर्ता को विकल्प प्रदर्शित करना चाहता हूं। मैंने यहां एक संबंधित प्रश्न पोस्ट किया है: http://stackoverflow.com/questions/5033427/magento-query-for-product- विकल्प – John

+0

धन्यवाद! यह मेरे लिए काम करता है :) हालांकि मैंने इसे एक पीटीएमएल फ़ाइल में इस्तेमाल किया और यहां तक ​​कि उत्पाद को लोड करने के बाद भी, जब तक मैं इसे फिर से लोड नहीं करता तब तक कोई विकल्प नहीं था। अजीब, लेकिन काम करता है! – s3v3n

+0

@ ज्ञान ज्ञान, जब मैं ऐसा करने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है, क्या आप कृपया मदद कर सकते हैं? यह त्रुटि है: 'घातक त्रुटि: किसी सदस्य फ़ंक्शन पर कॉल करें ऑब्जेक्ट्स() को गैर-ऑब्जेक्ट पर धन्यवाद' बहुत बहुत धन्यवाद! – Abude

7

जो लोग/चालान/शिपमेंट/क्रेडिट मेमो आदेश में व्यवस्थापक पैनल में चयनित कस्टम विकल्प बाद में देखना चाहता हूँ के लिए, फ़ाइलें: /ऐप्स/डिजाइन/adminhtml/[डिफ़ॉल्ट]/डिफ़ॉल्ट/टेम्पलेट/बिक्री/आदेश/दृश्य/आइटम/रेंडरर/default.phtml
/app/design/adminhtml/[default]/default/template/sales/order/invoice/view/items/renderer/default.phtml /ऐप/डिज़ाइन/adminhtml /[default ]/default/template/sales/order/shipment/view/items/renderer/default.phtml /ऐप/डिज़ाइन/adminhtml/[डिफ़ॉल्ट]/डिफ़ॉल्ट/टेम्पलेट/बिक्री/ऑर्डर/क्रेडिटमेमो/व्यू/आइटम/renderer/default.phtml पीएस: मैंने चालान/शिपमेंट के लिए configurated.phtml फ़ाइलों को नहीं बदला है/

 <?php 
    //---------start:---------------   
    // if ($allOptions = $_item->_getData('product_options')) {    // only for order item 
    if ($allOptions = $_item->getOrderItem()->getData('product_options')) { // for invoice, shipping, creditmemo 
     $options = unserialize($allOptions); 

     if (isset($options['options'])) { 
      foreach ($options['options'] as $optionValues) { 
       if ($optionValues['value']) { 
        echo '&nbsp;<strong><i>'. $optionValues['label'].'</i></strong>: '; 

        $_printValue = isset($optionValues['print_value']) ? $optionValues['print_value'] : strip_tags($optionValues['value']); 
        $values = explode(', ', $_printValue); 
        foreach ($values as $value) { 
         if (is_array($value)) 
          foreach ($value as $_value) 
           echo $_value; 
         else echo $value; 
        } 
        echo '<br />'; 
       } 
      }  
     } 
    } 
    //---------end:---------------     
    ?>   

यह भी ध्यान रखें है कि वहाँ कोड में:

क्रेडिट मेमो और <?php echo $_item->getSku(); ?></div> के बाद कहीं और इससे पहले कि यह की पंक्ति के बंद टैग </td> कोड डालने

सम्मिलित कोड (सावधान रहना, यह प्रत्येक फ़ाइल के लिए अलग है) एक पंक्ति (अगर वाक्य) जो केवल डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से काम करती है .phtml फ़ाइल, और दूसरा अगर वाक्य चालान/शिपिंग/क्रेडिटमेमो फ़ाइलों में काम करता है। यह इस बात पर निर्भर करता है कि आप कोड कहां पोस्ट करते हैं, सुनिश्चित करें कि सही वाक्य पर टिप्पणी की गई है।

आशा है कि यह मदद करता है, धन्यवाद भी ज्ञान क्रेविंग जिसका कोड मुझे काफ़ी मदद की :-) jazkat

7

कृपया ध्यान दें कि

$product->hasCustomOptions() 
"ज्ञान क्रेविंग" में

के समाधान हमेशा करता है करने के लिए झूठी वापसी (कम से कम मेरे मामले में, Magento 1.6.2)। इसलिए अगर शर्त कभी पूरा नहीं होती है और नीचे दिया गया ब्लॉक निष्पादित नहीं होता है।

+1

आपके उत्तर के लिए बहुत बहुत धन्यवाद। हां, मुझे यह मानना ​​है कि Magento v1.5.x से, यह काम नहीं किया, लेकिन मैं इस जवाब को अपडेट करना भूल गया। तो मुझे सही रास्ता दिखाने के लिए फिर से धन्यवाद! –

+0

@nowledgeCraving ऐसा लगता है कि आप इसे एक बार फिर से अपडेट करना भूल गए हैं: डी अभी भी आपके उत्तर में इसका कोई उल्लेख नहीं दिख रहा है ... – OZZIE

2
$quote=$observer->getEvent()->getQuote(); 
    $quoteid=$quote->getId(); 
    $session= Mage::getSingleton('checkout/session'); 
    $getotal = Mage::helper('checkout')->getQuote()->getGrandTotal(); 

    foreach($session->getQuote()->getAllItems() as $item) 
     { 

     $sellcheck = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getissellbool(); 
     $options = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getProductOptionsCollection(); 
     foreach ($options as $o) 
      { 
       $title = $o->getTitle(); 
       $values = $o->getValues(); 
       foreach($values as $v) 
        { 
        $mydata = $v->getPrice(); 
        echo 'options price: ' . $mydata;      
         } 

       } 

      } 

शॉपिंग कार्ट में उत्पाद कस्टम विकल्पों तक पहुंचने के लिए आप इस कोड का उपयोग कर सकते हैं।

+1

बस एक नोट - आप उत्पाद को दो बार लोड कर रहे हैं –

1

मुझे आशा है कि यह आपके लिए उपयोगी के लिए उत्पाद पृष्ठ में केवल कस्टम ड्रापडाउन मूल्य मिलेगा

बस पिछले

एप्लिकेशन/डिजाइन/दृश्यपटल/आधार/डिफ़ॉल्ट/टेम्पलेट में इस फ़ाइल में निम्न कोड पेस्ट/सूची/उत्पाद/देखें/options.phtml

<?php 
    $product = Mage::getModel("catalog/product")->load($this->getProduct()->getId()); //product id 
    foreach ($product->getOptions() as $_option) { 
     $values = $_option->getValues(); 
     foreach ($values as $v) { 
      print_r($v->getTitle()); 
      echo "<br />"; 
     } 
    } 
?> 
+0

क्षमा करें अब मेरे पास इसका समाधान है – Naresh

1

हम भी ऐसे ही हल कर सकते हैं, कि चेकआउट पृष्ठ पर प्रदर्शित कर सकते हैं।

$items = Mage::getModel('checkout/cart')->getQuote()->getAllVisibleItems(); 
foreach($items as $product) { 
    $options = $product->getProduct()->getTypeInstance(true)->getOrderOptions($product->getProduct()); 
    if ($options) 
    { 
     if (isset($options['options'])) 
     { 
      $result = $options['options']; 
     } 
     if(count($result)>0){ 
      foreach($result as $key =>$value){ 
       $resultoption = $value['value']; 
      } 
     } 
    } 
0

आप टेम्पलेट/चेकआउट/गाड़ी/आइटम/default.php में इस कोड की कोशिश कर सकते हैं:

if($Product->hasOptions) 
      { 
       $optionsArr = $Product->getOptions(); 
       foreach ($optionsArr as $optionKey => $optionVal) 
       { 
          $optStr.= "<select style='display:block; clear:both;' name='options[".$optionVal->getId()."]'>";  
        foreach($optionVal->getValues() as $valuesKey => $valuesVal) 
        { 
          $optStr.= "<option value='".$valuesVal->getId()."'>".$valuesVal->getTitle()."</option>"; 
        } 
        $optStr.= "</select>"; 
        } 
    echo($optStr); 
      }