Ottieni il prezzo delle opzioni del prodotto configurabile


9

Devo esportare tutti i prodotti con prezzi da Magento 1.7.

Per i prodotti semplici questo non è un problema, ma per i prodotti configurabili ho questo problema: il prezzo esportato è il prezzo fissato per il prodotto semplice associato! Come sapete, Magento ignora questo prezzo e utilizza il prezzo del prodotto configurabile più le rettifiche per le opzioni selezionate.

Posso ottenere il prezzo del prodotto principale, ma come posso calcolare la differenza in base alle opzioni selezionate?

Il mio codice è simile al seguente:

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

Risposte:


13

Ecco come ottenere i prezzi dei prodotti semplici. L'esempio è per un singolo prodotto configurabile ma puoi integrarlo nel tuo loop.
Potrebbe esserci un problema con le prestazioni perché ci sono molti foreachloop ma almeno hai un punto di partenza. Puoi ottimizzare in seguito.

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

Il codice sopra è stato testato su CE-1.7.0.2 con i dati di esempio Magento per 1.6.0.0.
Ho testato il prodotto Zolof The Rock And Roll Destroyer: maglietta LOL Cat e cuciture perfettamente funzionanti. Ottengo come risultati gli stessi prezzi che vedo nel frontend dopo aver configurato il prodotto da SizeeColor


3

Potrebbe essere che è necessario modificare $pper $prodnel seguente codice?

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

2

Ecco come lo faccio:

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

Inoltre, puoi convertirlo in Varien_Object:

$pricesConfigVarien = new Varien_Object($pricesConfig);

Quindi, fondamentalmente, sto usando lo stesso metodo utilizzato per calcolare i prezzi per la tua pagina di prodotto configurabile nel core magento.


0

Non sono sicuro che ciò possa aiutare, ma se aggiungi questo codice alla pagina configurable.phtml dovrebbe sputare i super attributi dei prodotti configurabili con il prezzo di ciascuna opzione e la sua etichetta.

   $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/>';
            }
        }
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.