Bất cứ ai cũng có thể giúp tôi làm rõ Chỉ số giá trong Magento? Tôi đang sử dụng phiên bản 1.9.
Nhiệm vụ của tôi : Kết xuất các sản phẩm nổi bật vào trang chủ.
Giải pháp của tôi : Thay vì tạo danh mục có tên "Sản phẩm nổi bật". Tôi đã tạo một thuộc tính "is_featured", vì vậy tôi chỉ cần lọc sản phẩm có thuộc tính đó là đúng để có kết quả như mong đợi.
Dựa trên tiện ích tích hợp Mage_Catalog_Block_ Productt_Widget_New , chức năng của tôi để có được bộ sưu tập sản phẩm như được xác định:
protected function _getProductCollection()
{
/** @var $collection Mage_Catalog_Model_Resource_Product_Collection */
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
$collection = $this->_addProductAttributesAndPrices($collection)
->addStoreFilter()
->addAttributeToFilter('is_featured', array('eq' => true))
->setPageSize($this->getProductsCount())
->setCurPage(1);
return $collection;
}
Kết quả: Một số sản phẩm đã xuất hiện, nhưng một số sản phẩm khác bị thiếu. Khi gỡ lỗi SQL, tôi thấy:
SELECT
`e`.*,
`cat_index`.`position` AS `cat_index_position`,
`price_index`.`price`,
`price_index`.`tax_class_id`,
`price_index`.`final_price`,
IF(price_index.tier_price IS NOT NULL,
LEAST(price_index.min_price,
price_index.tier_price),
price_index.min_price) AS `minimal_price`,
`price_index`.`min_price`,
`price_index`.`max_price`,
`price_index`.`tier_price`,
`at_is_featured`.`value` AS `is_featured`
FROM
`catalog_product_entity` AS `e`
INNER JOIN
`catalog_category_product_index` AS `cat_index` ON cat_index.product_id = e.entity_id
AND cat_index.store_id = '1'
AND cat_index.visibility IN (2 , 4)
AND cat_index.category_id = '2'
INNER JOIN
`catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id
AND price_index.website_id = '1'
AND price_index.customer_group_id = 0
INNER JOIN
`catalog_product_entity_int` AS `at_is_featured` ON (`at_is_featured`.`entity_id` = `e`.`entity_id`)
AND (`at_is_featured`.`attribute_id` = '210')
AND (`at_is_featured`.`store_id` = 0)
WHERE
(at_is_featured.value = '1')
LIMIT 6
Vấn đề là ở đây, catalog_carget_product_index , một số sản phẩm biến mất có bị thiếu trong bảng này không? Nhưng tôi không biết, tại sao chỉ số của một số sản phẩm lại bị bỏ lỡ? Tôi đã thử Re-Index rất nhiều lần mà không có kết quả như mong đợi! Có ai có thể giúp tôi không? Cảm ơn rất nhiều!