У меня есть код, чтобы показать самые продаваемые товары в нашем магазине. Код работает хорошо, если я отключаю плоскую категорию и плоский продукт. Есть ли способ заставить это работать без отключения плоского товара и категории. Спасибо…
class Mage_Catalog_Block_Product_Viewed extends Mage_Catalog_Block_Product_Abstract{
public function __construct(){
parent::__construct();
$storeId = Mage::app()->getStore()->getId();
$products = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addMinimalPrice()
->addAttributeToSelect('*')
->addAttributeToSelect(array('name', 'price', 'small_image'))
->setStoreId($storeId)
->addStoreFilter($storeId)
->setOrder(‘ordered_qty’, ‘desc’);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
$products->setPageSize(15)->setCurPage(1);
$this->setProductCollection($products);
}
}
Убедитесь, что все атрибуты продукта, которые необходимо вернуть по вашему запросу, помечены как «Используется в списке продуктов» = ДА в администраторе Magento (Каталог> Управление атрибутами). Атрибуты становятся частью плоской таблицы только тогда, когда установлена эта (или несколько других) опция, и это одно из главных отличий при включении плоского каталога.
Вы можете выполнить Mage :: log () запрос для выбора коллекции и посмотреть, в чем заключаются различия с включенным и выключенным плоским каталогом, что поможет вам понять различия и отладить:
$products->setPageSize(15)->setCurPage(1);
$products->load(); // this is needed only for debugging,
// to get the "real" database query
// PLEASE remove this and Mage::log
// in production as it would affect performance
Mage::log( (string)$products->getSelect() );
$this->setProductCollection($products);
Других решений пока нет …