Bu yüzden aşağıdaki kodu organik internet gibi basit yapılandırılabilir ürünler gibi bir eklentiyle birlikte kullanıyorum.
Aşağıdaki kod, sepet / ödeme işlemi içindir, temel olarak, ürünün sepete eklenmesi durumunda fiyat hesaplamasını basit bir ürüne geçiren yapılandırılabilir fiyat modelinde bir güncellemedir - bu çözüm fiyat görüntülemez ürün sayfasında (ancak bunu zaten yapan birçok uzantı var).
Uygulamayı güncelle / kod / çekirdek / Mage / Katalog / Model / Ürün / Tip / Yapılandırılabilir / Fiyat / php (ideal olarak uygulama / kod / yerel olarak bir uzantı veya yerel geçersiz kılma kullanıyorsunuz)
Yöntemi güncelle: getFinalPrice, olarak değiştir
public function getFinalPrice($qty=null, $product)
{
//Start edit
$selectedAttributes = array();
if ($product->getCustomOption('attributes')) {
$selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
}
//End edit
if (sizeof($selectedAttributes)) return $this->getSimpleProductPrice($qty, $product);
if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) {
return $product->getCalculatedFinalPrice();
}
$basePrice = $this->getBasePrice($product, $qty);
$finalPrice = $basePrice;
$product->setFinalPrice($finalPrice);
Mage::dispatchEvent('catalog_product_get_final_price', array('product' => $product, 'qty' => $qty));
$finalPrice = $product->getData('final_price');
$finalPrice += $this->getTotalConfigurableItemsPrice($product, $finalPrice);
$finalPrice += $this->_applyOptionsPrice($product, $qty, $basePrice) - $basePrice;
$finalPrice = max(0, $finalPrice);
$product->setFinalPrice($finalPrice);
return $finalPrice;
}
Sonra bu işlevi getFinalPrice'ın hemen altına ekleyin:
public function getSimpleProductPrice($qty=null, $product)
{
$cfgId = $product->getId();
$product->getTypeInstance(true)
->setStoreFilter($product->getStore(), $product);
$attributes = $product->getTypeInstance(true)
->getConfigurableAttributes($product);
$selectedAttributes = array();
if ($product->getCustomOption('attributes')) {
$selectedAttributes = unserialize($product->getCustomOption('attributes')->getValue());
}
$db = Mage::getSingleton('core/resource')->getConnection('core_read');
$dbMeta = Mage::getSingleton('core/resource');
$sql = <<<SQL
SELECT main_table.entity_id FROM {$dbMeta->getTableName('catalog/product')} `main_table` INNER JOIN
{$dbMeta->getTableName('catalog/product_super_link')} `sl` ON sl.parent_id = {$cfgId}
SQL;
foreach($selectedAttributes as $attributeId => $optionId) {
$alias = "a{$attributeId}";
$sql .= ' INNER JOIN ' . $dbMeta->getTableName('catalog/product') . "_int" . " $alias ON $alias.entity_id = main_table.entity_id AND $alias.attribute_id = $attributeId AND $alias.value = $optionId AND $alias.entity_id = sl.product_id";
}
$id = $db->fetchOne($sql);
return Mage::getModel("catalog/product")->load($id)->getFinalPrice($qty);
}
Gördüğünüz gibi, kullanıcının ürünü "özelleştirmesi" durumunda (IE, yapılandırılabilir seçeneklerin seçilmesi), ilişkili basit ürünü belirleriz ve kontrolü fiyatlandırma modeline geçiririz, aksi halde ürün "özelleştirilmiş" değilse (IE, biz ürün sayfasına göz atıyorum) normal olarak ilerliyoruz