В Magento я использую следующий код для сбора данных о бестселлерах:
Модель Функция:
public function bestSellers($limit = 12){
$storeId = Mage::app()->getStore()->getId();
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addAttributeToSelect('id')
->setStoreId($storeId)
->addStoreFilter($storeId)
->setOrder('ordered_qty', 'desc') //best sellers on top
->setPageSize($limit);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($_productCollection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_productCollection);
return $_productCollection;
}
Блок вывода:
<code><?php $products = Mage::getModel('tabs/collections')->bestSellers($limit); ?>
<pre>
<?php print_r($productCollection->getData()); ?>
Однако он ничего не возвращает, когда в функции модели используется строка addVisibleInCatalogFilterToCollection, но если я удаляю строку addVisibleInCatalogFilterToCollection, то она возвращает массив ожидаемых данных бестселлера о продукте (включая те, которые не должны быть видны в каталоге) .
Как я могу вернуть свой массив данных с фильтром видимости, работающим как надо? Вместо того, чтобы ничего не возвращать. Очень смущенный. Заранее спасибо!
Вот getSelect:
SELECT SUM(order_items.qty_ordered) AS `ordered_qty`, `order_items`.`name` AS `order_items_name`, `order_items`.`product_id` AS `entity_id`, `e`.`entity_type_id`, `e`.`attribute_set_id`, `e`.`type_id`, `e`.`sku`, `e`.`has_options`, `e`.`required_options`, `e`.`created_at`, `e`.`updated_at`, `cat_index`.`position` AS `cat_index_position` FROM `sales_flat_order_item` AS `order_items`
INNER JOIN `sales_flat_order` AS `order` ON `order`.entity_id = order_items.order_id AND `order`.state <> 'canceled'
LEFT JOIN `catalog_product_entity` AS `e` ON (e.type_id NOT IN ('grouped', 'configurable', 'bundle')) AND e.entity_id = order_items.product_id AND e.entity_type_id = 4
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' WHERE (parent_item_id IS NULL) GROUP BY `order_items`.`product_id` HAVING (SUM(order_items.qty_ordered) > 0) ORDER BY `ordered_qty` desc