कॉन्फ़िगर करने योग्य उत्पाद विकल्पों की कीमत प्राप्त करें


9

मुझे Magento 1.7 से कीमतों के साथ सभी उत्पादों को निर्यात करने की आवश्यकता है।

साधारण उत्पादों के लिए यह कोई समस्या नहीं है, लेकिन विन्यास योग्य उत्पादों के लिए मेरे पास यह समस्या है: निर्यात किया गया मूल्य संबंधित साधारण उत्पाद के लिए निर्धारित मूल्य है! जैसा कि आप जानते हैं, Magento इस मूल्य को अनदेखा करता है और चयनित विकल्पों के लिए विन्यास योग्य उत्पाद प्लस समायोजन की कीमत का उपयोग करता है।

मुझे मूल उत्पाद की कीमत मिल सकती है, लेकिन मैं चयनित विकल्पों के आधार पर अंतर की गणना कैसे करूं?

मेरा कोड कुछ इस तरह दिखता है:

foreach($products as $p)
   {
    $price = $p->getPrice();
            // I save it somewhere

    // check if the item is sold in second shop
    if (in_array($otherShopId, $p->getStoreIds()))
     {
      $otherConfProd = Mage::getModel('catalog/product')->setStoreId($otherShopId)->load($p->getId());
      $otherPrice = $b2cConfProd->getPrice();
      // I save it somewhere
      unset($otherPrice);
     }

    if ($p->getTypeId() == "configurable"):
      $_associatedProducts = $p->getTypeInstance()->getUsedProducts();
      if (count($_associatedProducts))
       {
        foreach($_associatedProducts as $prod)
         {
                            $p->getPrice(); //WRONG PRICE!!
                            // I save it somewhere
                        $size $prod->getAttributeText('size');
                        // I save it somewhere

          if (in_array($otherShopId, $prod->getStoreIds()))
           {
            $otherProd = Mage::getModel('catalog/product')->setStoreId($otherShopId)->load($prod->getId());

            $otherPrice = $otherProd->getPrice(); //WRONG PRICE!!
                            // I save it somewhere
            unset($otherPrice);
            $otherProd->clearInstance();
            unset($otherProd);
           }
         }
                     if(isset($otherConfProd)) {
                         $otherConfProd->clearInstance();
                            unset($otherConfProd);
                        }
       }

      unset($_associatedProducts);
    endif;
  }

जवाबों:


13

यहां बताया गया है कि आप साधारण उत्पादों की कीमतें कैसे प्राप्त कर सकते हैं। उदाहरण एकल विन्यास योग्य उत्पाद के लिए है, लेकिन आप इसे अपने लूप में एकीकृत कर सकते हैं।
प्रदर्शन में समस्या हो सकती है क्योंकि बहुत सारे foreachलूप हैं लेकिन कम से कम आपके पास शुरू करने के लिए एक जगह है। आप बाद में ऑप्टिमाइज़ कर सकते हैं।

//the configurable product id
$productId = 126; 
//load the product - this may not be needed if you get the product from a collection with the prices loaded.
$product = Mage::getModel('catalog/product')->load($productId); 
//get all configurable attributes
$attributes = $product->getTypeInstance(true)->getConfigurableAttributes($product);
//array to keep the price differences for each attribute value
$pricesByAttributeValues = array();
//base price of the configurable product 
$basePrice = $product->getFinalPrice();
//loop through the attributes and get the price adjustments specified in the configurable product admin page
foreach ($attributes as $attribute){
    $prices = $attribute->getPrices();
    foreach ($prices as $price){
        if ($price['is_percent']){ //if the price is specified in percents
            $pricesByAttributeValues[$price['value_index']] = (float)$price['pricing_value'] * $basePrice / 100;
        }
        else { //if the price is absolute value
            $pricesByAttributeValues[$price['value_index']] = (float)$price['pricing_value'];
        }
    }
}

//get all simple products
$simple = $product->getTypeInstance()->getUsedProducts();
//loop through the products
foreach ($simple as $sProduct){
    $totalPrice = $basePrice;
    //loop through the configurable attributes
    foreach ($attributes as $attribute){
        //get the value for a specific attribute for a simple product
        $value = $sProduct->getData($attribute->getProductAttribute()->getAttributeCode());
        //add the price adjustment to the total price of the simple product
        if (isset($pricesByAttributeValues[$value])){
            $totalPrice += $pricesByAttributeValues[$value];
        }
    }
    //in $totalPrice you should have now the price of the simple product
    //do what you want/need with it
}

उपरोक्त कोड 1.6.0.0 के लिए Magento नमूना डेटा के साथ CE-1.7.0.2 पर परीक्षण किया गया था।
मैंने उत्पाद ज़ोलोफ़ द रॉक एंड रोल डिस्ट्रॉयर पर परीक्षण किया : एलओएल कैट टी-शर्ट और यह काम करने के लिए सीम। मुझे उसी तरह के परिणाम मिलते हैं जैसे मैं उत्पाद को कॉन्फ़िगर करके Sizeऔर देखने के बाद सामने वाले हिस्से में देखता हूंColor


3

यह है कि आप को बदलने की जरूरत हो सकता है $pकरने के लिए $prodनीचे दिए गए कोड में?

 foreach($_associatedProducts as $prod)
         {
                            $p->getPrice(); //WRONG PRICE!!

2

यह मेरा इसे करने का तरीका है:

$layout = Mage::getSingleton('core/layout');
$block = $layout->createBlock('catalog/product_view_type_configurable');
$pricesConfig = Mage::helper('core')->jsonDecode($block->getJsonConfig());

इसके अतिरिक्त, आप इसे Varien_Object में बदल सकते हैं:

$pricesConfigVarien = new Varien_Object($pricesConfig);

तो मूल रूप से मैं उसी विधि का उपयोग कर रहा हूं जिसका उपयोग magento कोर में आपके कॉन्फ़िगर करने योग्य उत्पाद पृष्ठ के लिए कीमतों की गणना करने के लिए किया जाता है।


0

निश्चित नहीं है कि यह मदद करेगा, लेकिन यदि आप इस कोड को configurable.phtml पृष्ठ में जोड़ते हैं, तो इसे प्रत्येक विकल्प और उसके लेबल की कीमत के साथ विन्यास योग्य उत्पादों के सुपर गुण को थूक देना चाहिए।

   $json =  json_decode($this->getJsonConfig() ,true);


    foreach ($json as $js){
        foreach($js as $j){

      echo "<br>";     print_r($j['label']); echo '<br/>';

            foreach($j['options'] as $k){
                echo '<br/>';     print_r($k['label']); echo '<br/>';
                print_r($k['price']); echo '<br/>';
            }
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.