Jadi, saya menggunakan kode di bawah ini dalam kombinasi dengan ekstensi seperti produk organik sederhana yang dapat dikonfigurasi.
Kode di bawah ini dimaksudkan untuk proses keranjang / checkout, pada dasarnya, ini merupakan pembaruan untuk model harga yang dapat dikonfigurasi yang melewati perhitungan harga ke produk sederhana jika produk telah ditambahkan ke keranjang --- solusi ini TIDAK TIDAK menampilkan harga pada halaman produk itu sendiri (namun ada banyak ekstensi yang sudah melakukannya).
Perbarui aplikasi / kode / inti / Penyihir / Katalog / Model / Produk / Jenis / Dapat Dikonfigurasi / Harga.php (idealnya Anda menggunakan ekstensi atau penggantian lokal dalam aplikasi / kode / lokal)
Perbarui metode: getFinalPrice, ubah ke
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;
}
Kemudian tambahkan fungsi ini tepat di bawah getFinalPrice:
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);
}
Anda dapat melihat, jika pengguna telah "menyesuaikan" produk (IE, opsi yang dapat dikonfigurasi yang dipilih), kami menentukan produk sederhana yang terkait dan memberikan kontrol ke model penetapan harganya, jika tidak, jika produk tersebut tidak "disesuaikan" (yaitu, kami Sedang browsing di halaman produk) kami melanjutkan seperti biasa