Dapatkan Harga Opsi Produk yang Dapat Dikonfigurasi

9

Saya perlu mengekspor semua produk dengan harga dari Magento 1.7.

Untuk produk sederhana ini bukan masalah, tetapi untuk produk yang dapat dikonfigurasi, saya memiliki masalah ini: Harga yang diekspor adalah harga yang ditetapkan untuk produk sederhana yang terkait! Seperti yang Anda ketahui, Magento mengabaikan harga ini dan menggunakan harga produk yang dapat dikonfigurasi plus penyesuaian untuk opsi yang dipilih.

Saya bisa mendapatkan harga dari produk induk, tetapi bagaimana cara menghitung perbedaan tergantung pada opsi yang dipilih?

Kode saya terlihat seperti ini:

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;
  }
Josef berkata Reinstate Monica
sumber

Jawaban:

13

Inilah cara Anda bisa mendapatkan harga dari produk-produk sederhana. Contohnya adalah untuk satu produk yang dapat dikonfigurasi tetapi Anda dapat mengintegrasikannya dalam loop Anda.
Mungkin ada masalah dengan kinerja karena ada banyak foreachloop tetapi setidaknya Anda memiliki tempat untuk memulai. Anda bisa mengoptimalkannya nanti.

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

Kode di atas diuji pada CE-1.7.0.2 dengan data sampel Magento untuk 1.6.0.0.
Saya menguji pada produk Zolof The Rock And Roll Destroyer: LOL Cat T-shirt dan itu bekerja. Saya mendapatkan hasil harga yang sama seperti yang saya lihat di frontend setelah mengkonfigurasi produk oleh SizedanColor

Marius
sumber
3

Mungkinkah bahwa Anda perlu untuk perubahan $pke $proddalam kode di bawah?

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

Beginilah cara saya melakukannya:

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

Selain itu, Anda dapat mengonversinya ke Varien_Object:

$pricesConfigVarien = new Varien_Object($pricesConfig);

Jadi pada dasarnya saya menggunakan metode yang sama yang digunakan untuk menghitung harga untuk halaman produk Anda yang dapat dikonfigurasi di inti magento.

Oleg Kudinov
sumber
0

Tidak yakin apakah ini akan membantu tetapi jika Anda menambahkan kode ini ke halaman configurable.phtml harus meludahkan atribut super produk yang dapat dikonfigurasi dengan harga setiap opsi dan labelnya.

   $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/>';
            }
        }
    }
Egregory
sumber