2013-10-06 5 views
0

это мой код, но я получаю только те продукты, которые доступны на складе. Я хочу получить все продукты, в том числе и аншлаг. Есть ли у вас какие-либо идеи?Magento - Получайте товары для самых продаваемых товаров, включая продаваемые товары

$productCount = 5; 
     $storeId = Mage::app()->getStore()->getId(); 


$productsBestSellerMens = Mage::getResourceModel('reports/product_collection') 
      ->addOrderedQty() 
      ->addAttributeToSelect('*') 
      ->setStoreId($storeId) 
      ->addCategoryFilter($mensID) 
      ->setPageSize($productCount); 
+0

В родном Magento 1.7 этот запрос не учитывает доступность, вы можете проверить это, добавив 'Mage :: log ($ productsBestSellerMens-> getSelect() -> собрать(), null, 'productsBestSellerMens. log ', TRUE); 'после запроса запустите его и откройте файл YOUR_MAGENTO_ROOT/var/log/productsBestSellerMens.log. Это исключает пакет/настраиваемый/сгруппированный, возможно, это ваша проблема? – OSdave

ответ

0

Вы можете попробовать расширение, которое будет отображаться не только самых продаваемых продуктов, но и новые/продажа/ходкая/наиболее просматриваемых/топ-рейтингу/признакам/аншлаг продукции.

Источник: http://www.magentocommerce.com/magento-connect/product-gallery.html

1

Комментарий по OSdave является хорошим местом, чтобы начать с найти ответ на свой вопрос.

В своем сердце Magento использует Zend_Db при доступе к базе данных. В результате вы можете использовать «magic» для вывода базового запроса MySQL, генерируемого вашим PHP-кодом. В категории фильтрации специфичен для вашей ситуации я немного адаптировать исходный код:

$productCount = 5; 
$storeId  = Mage::app()->getStore()->getId(); 

$productsBestSellerMens = Mage::getResourceModel('reports/product_collection') 
    ->addOrderedQty() 
    ->addAttributeToSelect('*') 
    ->setStoreId($storeId) 
    ->setPageSize($productCount); 

var_dump((string) $productsBestSellerMens->getSelect()); 
exit; 

Это грубый, но очень простой способ найти, что результирующий SQL запрос:

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` 
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 
WHERE (parent_item_id IS NULL) 
GROUP BY `order_items`.`product_id` 
HAVING (SUM(order_items.qty_ordered) > 0) 

Как вам как видно из обзора запроса, нет ничего, что отфильтровывало бы «продукты».

Вы можете обрабатывать дисплей «проданных» продуктов, используя метод isSaleable() класса Mage_Catalog_Model_Product. Пример этого на практике показан в файле шаблона Magento /app/design/frontend/base/default/template/catalog/product/view.phtml.

Следует также отметить, что, когда я пытался использовать тот же метод, чтобы отбросить список бестселлеров, я обнаружил, что результаты не соответствуют проверенным данным продаж. Более полное расследование и исправленный метод извлечения бестселлеров, которые данные проверенных данных macth доступны на нашем blog.

Смежные вопросы