2014-02-07 4 views
0

Я просто хочу отображать только активные продукты в моем списке. У меня есть сценарий, который подсчитывает все разрешения и отключает продукты, но я хочу считать только активные продукты. мой код: -только активные продукты в magento

<?php 
    $_categories = Mage::getBlockSingleton('catalog/navigation'); 
    foreach ($_categories->getStoreCategories() as $_category) { 
    $category = Mage::getModel('catalog/category'); 
    $category->load($_category->getId()); 
    $subcategories = explode(',', $category->getChildren()); 
    $_count = is_array($subcategories)?count($subcategories):$subcategories->count(); 
    $pcount = array(); 
    foreach ($subcategories as $subcategoryId) { 
     $subcategory = Mage::getModel("catalog/category")->load($subcategoryId); 
     if($subcategory->getIsActive()){ 
     $pcount[] = $subcategory->getProductCount(); 
     } 
    } 
    } 

я пытался в состоянии, если getIsActive, но он не может работать это получить все включения и отключения продуктов, предложить мне, где я некоторые делают изменения рассчитывать только активные продукты.

+0

В этом коде вы проверяете, активна или нет категория, а не продукты. У них есть статус «включено» или отключен. – Prateek

+0

Как получить активные продукты ????? –

+0

продукты не являются «активными», они либо «включены», либо «отключены». Я могу предложить вам что-то, если вы хотите подсчитать включенные продукты. – Prateek

ответ

0

В вашем цикле Еогеасп, вам нужно изменить что-то вроде:

$collection = $category->getProductCollection() 
       ->addAttributeToFilter('status', array('eq'=>'1'); 
$pcount = count($collection); 

Он должен делать то, что вы хотите. Если нет, то дайте мне знать. Приветствия!

2

Если вы хотите активные продукты независимо от категории они находятся в вы можете сделать это:

$collection = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes()) //add the attributes visible in product list to the collection 
      ->addMinimalPrice() //add the prices to the collection 
      ->addFinalPrice() 
      ->addTaxPercents() 
      ->addUrlRewrite(); //add the url rewrites to the collection 
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection); //filter only active products 
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); //filter only visible in catalog products 

затем просто цикл по коллекции и сделать что-то с каждым продуктом

foreach ($collection as $product) { 
    //do something with $product 
} 

Если вы хотели бы получить количество продуктов в коллекции:

$size = $collection->getSize(); 

Если вы хотите сделать выше, но для одной категории:

$categoryId = 10;//replace with own id. 
$category = Mage::getModel('catalog/category')->load($categoryId); 

$collection = Mage::getModel('catalog/product')->getCollection() 
       ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes()) //add the attributes visible in product list to the collection 
       ->addMinimalPrice() //add the prices to the collection 
       ->addFinalPrice() 
       ->addTaxPercents() 
       ->addUrlRewrite($categoryId); //add the url rewrites to the collection 
$collection->addCategoryFilter($category); 
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection); //filter only active products 
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); //filter only visible in catalog products 
2

addVisibleFilterToCollection и addSaleableFilterToCollection являются устаревшими, и не будет делать ничего в новых версиях Magento. Вы должны использовать:

$collection->addAttributeToFilter('status', array('in'=>Mage::getSingleton('catalog/product_status')->getSaleableStatusIds())); 
$collection->addAttributeToFilter('visibility', array('in'=>Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds())); 
+0

Возможно, стоит предложить как отредактировать ответ Мариуса. – ScottSB

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