Konfigüre Edilebilir Ürün seçeneklerinden fiyat alın


9

Tüm ürünleri Magento 1.7'den fiyatlarla ihraç etmem gerekiyor.

Basit ürünler için bu bir problem değildir, ancak yapılandırılabilir ürünler için bu problemim var: Verilen fiyat, ilgili basit ürün için belirlenen fiyattır! Bildiğiniz gibi, Magento bu fiyatı yok sayar ve yapılandırılabilir ürünün fiyatını ve ayrıca seçilen seçenekler için ayarlamaları kullanır.

Ana ürünün fiyatını alabilirim, ancak seçilen seçeneklere bağlı olarak farkı nasıl hesaplayabilirim?

Kodum şuna benzer:

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;
  }

Yanıtlar:


13

Basit ürünlerin fiyatlarını nasıl alabileceğiniz aşağıda açıklanmıştır. Örnek tek bir yapılandırılabilir ürün içindir, ancak döngünüze entegre edebilirsiniz.
Performansla ilgili bir sorun olabilir, çünkü çok fazla foreachdöngü var, ancak en azından başlayacak bir yeriniz var. Daha sonra optimizasyon yapabilirsiniz.

//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
}

Yukarıdaki kod, 1.6.0.0 için Magento örnek verileri ile CE-1.7.0.2 üzerinde test edilmiştir.
Ürünü Rock And Roll Destroyer: LOL Cat T-shirt üzerinde test ettim ve işe yaradı. Ürünü yapılandırdıktan sonra ön uçta gördüğüm fiyatlarla aynı sonuçları alıyorum SizeveColor


3

Eğer değişim gerektiğini olabilir $piçin $prodaşağıdaki kodu?

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

2

Bunu nasıl yaparım:

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

Ayrıca, Varien_Object'e dönüştürebilirsiniz:

$pricesConfigVarien = new Varien_Object($pricesConfig);

Yani temelde magento çekirdeğinde yapılandırılabilir ürün sayfanızın fiyatlarını hesaplamak için kullanılan yöntemi kullanıyorum.


0

Bunun yardımcı olup olmayacağından emin değilim, ancak bu kodu configurable.phtml sayfasına eklerseniz, yapılandırılabilir ürünlerin süper özelliklerini her bir seçeneğin fiyatı ve etiketiyle tükürmelidir.

   $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/>';
            }
        }
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.