2013-04-02 10 views
7

Ho bisogno configurare fascia di prezzo del prodotto comeCome ottenere un intervallo di prezzo del prodotto configurabile in Magento?

below image is my requirement

Per il nome del prodotto: $ 140-310 io uso sottostante Codice

if(Mage::getSingleton('customer/session')->isLoggedIn()) 
{ 
     // Get group Id 
     $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId(); 
} 
else 
{ 
     $groupId = 0; 
}  
$db = Mage::getSingleton('core/resource')->getConnection('core_write'); 
$result = $db->query('SELECT price ,final_price, min_price, max_price, tier_price, group_price FROM catalog_product_index_price WHERE entity_id='.$_product->getId().' AND customer_group_id ='.$groupId.' ORDER BY customer_group_id ASC LIMIT 1'); 
$rows = $result->fetch(); 

ho anche bisogno di una fascia di prezzo normale per il prodotto di configurazione. penso anche che la mia gamma dopo il nome del prodotto sia sbagliata perché in Your Price have a price $135 quindi come posso ottenere il valore minimo e il prezzo speciale massimo e anche nel prezzo normale?

Come posso ottenerlo?

Grazie e saluti

+0

Avete trovato una risposta solida per questa edizione? –

+0

notificare ancora che si dispone di una soluzione piuttosto che postarla in risposta @Raphael Rafatpanah – Jalpesh

risposta

1

Si può usare qualcosa di simile

$prices = array(); 
$associated = $_product->getTypeInstance(true)->getAssociatedProductCollection($_product) 
->addAttributeToSelect('special_price'); 

foreach ($associated as $assoc) { 
    $prices[] = $assoc->getSpecialPrice(); 
} 
// calculate min max price here 
if (count($prices)) { 
    $min_price = min($prices); 
    $max_price = max($prices); 
} else { 
    $min_price = 0; 
    $max_price = 0; 
} 

Forse non soluzione perfetta, ma funziona

2

u può cercare di ottenere tutti i prodotti per bambini di quel prodotto configurabile primo , quindi ottenere il prezzo di ogni prodotto figlio e confrontarli, trovare il più alto e il più basso.

//load configurable product  
$product = Mage::getModel('catalog/product')->load(some_id); 
//load all children 
$childProducts = Mage::getModel('catalog/product_type_configurable') 
        ->getUsedProducts(null,$product); 
foreach($childProducts as $child){ 
    $_child = Mage::getModel('catalog/product')->load($child->getId()); 
    $childPrice = $_child->getPrice(); 
    //compare the $childPrice 
} 
+2

Ciò presuppone che il prezzo dei prodotti semplici sottostanti sia uguale al prezzo di tali opzioni nel configurabile. Assunzione non sicura. – Laizer

+0

non va bene così come abbiamo 100 prodotti configurabili e ognuno ha 10 prodotti figlio semplici su ogni pagina, quindi creerà un grosso problema di prestazioni. 100 * 10 = 1000 query mysql – Saurabh

3

This answer a una domanda simile sul Magento StackExchange è una buona base su cui lavorare. Usando questo, ecco una soluzione a questo problema che tiene conto del potenziale di prodotti configurabili aventi più di un attributo che modifica il prezzo.

L'ho scritto come funzione che accetta un ID prodotto configurabile e restituisce una stringa dal minimo al massimo. Dovrebbe essere abbastanza chiaro come lavorarlo nel contesto di cui hai bisogno.

function getPriceRange($productId) { 

$max = ''; 
$min = ''; 

$pricesByAttributeValues = array(); 

$product = Mage::getModel('catalog/product')->load($productId); 
$attributes = $product->getTypeInstance(true)->getConfigurableAttributes($product); 
$basePrice = $product->getFinalPrice(); 

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


$simple = $product->getTypeInstance()->getUsedProducts(); 

foreach ($simple as $sProduct){ 
    $totalPrice = $basePrice; 

    foreach ($attributes as $attribute){ 

     $value = $sProduct->getData($attribute->getProductAttribute()->getAttributeCode()); 
     if (isset($pricesByAttributeValues[$value])){ 
      $totalPrice += $pricesByAttributeValues[$value]; 
     } 
    } 
    if(!$max || $totalPrice > $max) 
     $max = $totalPrice; 
    if(!$min || $totalPrice < $min) 
     $min = $totalPrice; 
} 

return "$min - $max"; 

} 
0

Provare a utilizzare il $product->getMinPrice() e $product->getMaxPrice()

Date un'occhiata a app/code/core/Mage/Catalogo/modello/Risorsa/Prodotto/Collection.php

Problemi correlati