Daher benutze ich den unten stehenden Code in Kombination mit einer Erweiterung, wie zum Beispiel einfach konfigurierbaren Produkten für das organische Internet.
Der folgende Code ist für den Warenkorb- / Checkout-Prozess gedacht. Im Wesentlichen handelt es sich um eine Aktualisierung des konfigurierbaren Preismodells, das die Preisberechnung an ein einfaches Produkt weiterleitet, falls das Produkt dem Warenkorb hinzugefügt wurde. Diese Lösung zeigt KEINE Preise an auf der Produktseite selbst (es gibt jedoch viele Erweiterungen, die dies bereits tun).
Aktualisiere App / Code / Kern / Magier / Katalog / Modell / Produkt / Typ / Konfigurierbar / Preis.php (idealerweise verwendest du eine Erweiterung oder lokale Überschreibung in App / Code / Lokal)
Aktualisieren Sie die Methode: getFinalPrice, wechseln Sie zu
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;
}
Dann fügen Sie diese Funktion direkt unterhalb von getFinalPrice hinzu:
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);
}
Sie können sehen, dass für den Fall, dass der Benutzer das Produkt "angepasst" hat (IE, ausgewählte konfigurierbare Optionen), wir das zugehörige einfache Produkt bestimmen und die Kontrolle an sein Preismodell übergeben, andernfalls, wenn das Produkt nicht "angepasst" ist (IE, wir) browsen auf der Produktseite) gehen wir wie gewohnt vor