2013-04-02 8 views
7

muszę skonfigurować zakres cen produktu podobnegoJak uzyskać konfigurowalny zakres cenowy produktów w magento?

below image is my requirement

Dla nazwy produktu: 140 $ - 310 i skorzystać z poniższego kodu

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(); 

Ja również potrzebują regularnego zakres cen produktu configure. Myślę też, że mój zasięg po nazwie produktu jest zły, ponieważ w Your Price have a price $135, jak mogę uzyskać minimalną wartość i maksymalną cenę specjalną, a także w zwykłej cenie?

Jak mogę to zdobyć?

Dzięki i Pozdrawiam

+0

Znalazłeś solidną odpowiedź ten przypadek? –

+0

dalej, jeśli masz rozwiązanie, zamiast zamieszczać je w odpowiedzi @Raphael Rafatpanah – Jalpesh

Odpowiedz

1

można użyć coś jak ten

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

Może nie idealne rozwiązanie, ale działa

2

u można próbować uzyskać wszystkie produkty podrzędne tego konfigurowalnego produktu pierwszy , następnie zdobądź cenę każdego produktu dziecięcego i porównaj je, znajdź najwyższy i najniższy.

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

Zakłada się, że cena podstawowych prostych produktów jest taka sama jak cena tych opcji w konfiguracji. Nie jest to bezpieczne założenie. – Laizer

+0

to nie jest tak dobrze, jak mamy 100 konfigurowalnych produktów i każdy ma 10 prostych produktów dla dzieci na każdej stronie, a następnie zamierza stworzyć duży problem wydajności. 100 * 10 = 1000 zapytań mysql – Saurabh

3

This answer z podobnym pytaniem na Magento Stack Exchange Network jest dobrą podstawą do pracy. Wykorzystując to, oto rozwiązanie tego problemu, które bierze pod uwagę potencjał konfigurowalnych produktów posiadających więcej niż jeden atrybut zmieniający cenę.

Napisałem go jako funkcję, która przyjmuje konfigurowalny identyfikator produktu i zwraca ciąg od minimalnej do maksymalnej ceny. Powinno być całkiem jasne, jak pracować z kontekstem, którego potrzebujesz.

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

Spróbuj używając $product->getMinPrice() i $product->getMaxPrice()

Spójrz na app/code/core/Mage/Katalog/Model/zasobów/product/Collection.php

Powiązane problemy