Vì vậy, tôi sử dụng mã dưới đây kết hợp với một phần mở rộng như các sản phẩm cấu hình đơn giản trên internet hữu cơ.
Mã dưới đây có nghĩa là cho quá trình thanh toán / giỏ hàng, về cơ bản, đó là bản cập nhật cho mô hình giá có thể định cấu hình để chuyển tính toán giá cho một sản phẩm đơn giản trong trường hợp sản phẩm đã được thêm vào giỏ hàng --- giải pháp này KHÔNG hiển thị giá trên chính trang sản phẩm (tuy nhiên đã có nhiều tiện ích mở rộng đã làm điều đó).
Cập nhật ứng dụng / mã / lõi / Pháp sư / Danh mục / Mô hình / Sản phẩm / Loại / Cấu hình / Giá.php (lý tưởng nhất là bạn sử dụng tiện ích mở rộng hoặc ghi đè cục bộ trong ứng dụng / mã / cục bộ)
Cập nhật phương thức: getFinalprice, thay đổi thành
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;
}
Sau đó thêm chức năng này ngay bên dưới 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);
}
Bạn có thể thấy, trong trường hợp người dùng đã "tùy chỉnh" sản phẩm (IE, các tùy chọn có thể định cấu hình được chọn), chúng tôi xác định sản phẩm đơn giản được liên kết và chuyển điều khiển sang mô hình định giá của sản phẩm, nếu không thì sản phẩm không được "tùy chỉnh" (IE, chúng tôi đang duyệt trên trang sản phẩm) chúng tôi tiến hành như bình thường