Obtenga una colección de productos de un ID de categoría


18

Estoy tratando de obtener una colección de productos de una identificación de categoría. Algunas cosas que he intentado están en el bloque:

 $category = Mage::getModel('catalog/category')->load(123)
        ->getProductCollection();

y

    $category = Mage::getModel('catalog/category')->load(123);
    $products = $category->getProductCollection()->addCategoryFilter($category)
                         ->addAttributeToFilter('type_id', 'simple')
                         ->addAttributeToSelect('*');

También traté de hacerlo desde el phtml

$oCatId = Mage::getModel('catalog/category')->load(769); 
        $products->addCategoryFilter($oCatId);

Nada de esto funciona pero tampoco veo ningún error. Vi otra publicación que parece la misma pregunta: Magento - Obtener productos de una categoría específica, pero ese método tampoco funcionó para mí. ¡Gracias por cualquier ayuda!

Respuestas:


32

Prueba esto:

$products = Mage::getModel('catalog/category')->load($category_id)
 ->getProductCollection()
 ->addAttributeToSelect('*') // add all attributes - optional
 ->addAttributeToFilter('status', 1) // enabled
 ->addAttributeToFilter('visibility', 4) //visibility in catalog,search
 ->setOrder('price', 'ASC'); //sets the order by price

Fuente: http://overlycaffeinated.com/blog/2011/02/get-all-sale-products-from-a-category-in-magento/

Esto debería funcionar porque agrega el filtro de categoría porque ya tiene la categoría cargada:

Mage_Catalog_Model_Category

public function getProductCollection()
{
    $collection = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId($this->getStoreId())
        ->addCategoryFilter($this);
    return $collection;
}

¡Espera, todavía no funciona!

Ok, entonces puede tener problemas más grandes, presumiblemente algo sobrescrito getProductCollection. Entonces intentemos eludir ese método de conveniencia:

$category = Mage::getModel('catalog/category')->load($category_id);
$products = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->addCategoryFilter($category);

¡Gracias por tu ayuda! Me siento más cerca pero sigo tambaleando. Utilizando su último método, agregué foreach ($products as $product) { echo $product->getId(); }y obtengo una serie de identificadores. Sin embargo cuando no intento echo $product->getName();nada. Intenté agregar ->addAttributeToSelect('*')también pero no. Gracias por más ayuda.
Zac

@philwinkle ¿Hay alguna forma de obtener todos los productos para una categoría? Tengo problemas para obtener los que están deshabilitados. Estoy usandoMage::getResourceModel('catalog/product_collection')->setStoreId(Mage::app()->getStore()->getId())->addCategoryFilter($category)->addAttributeToSelect('sku');
Nick Rolando

9

Cómo cargar una colección de productos con todos los datos que generalmente necesita para las listas de productos en la interfaz:

$_categoryId = 123;
$category = Mage::getModel('catalog/category')->load($_categoryId );
$productCollection = $category->getProductCollection();
$productCollection
        ->addStoreFilter()
        ->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds())
        ->addMinimalPrice()
        ->addFinalPrice()
        ->addTaxPercents()
        ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
        ->addUrlRewrite();

Esto prepara la colección de productos para cargar los datos necesarios para mostrar los precios, el enlace del producto y cualquier atributo configurado como "utilizado en la lista de productos", pero no más.


¿Cómo puedo limitar los resultados? ->limit(5)no funcionó
Pedram Behroozi

->setPageSize(5)
Fabian Schmengler

@fschmengler te pierdes ;después del $category = Mage::getModel('catalog/category')->load(123)código
Murtuza Zabuawala

5

El siguiente código le dará una colección de productos de la categoría ID 10.

$categoryId = 10;    
$products = Mage::getSingleton('catalog/category')->load($categoryId)
            ->getProductCollection()
            ->addAttributeToSelect('*');

3

Código para obtener la colección de productos de un ID de categoría particular:

$productCollection = Mage::getResourceModel('catalog/product_collection')
                       ->addCategoryFilter($category);

¡¡¡Perfecto!!! +1 :)
SagarPPanchal

donde $ category = $ categoryId?
lorakeen

2

El siguiente código es mucho más simple y eficiente que cargar la colección de productos y el filtrado utilizando sus atributos

$categoryId = 32; // Replace with your category

$category = Mage::getModel('catalog/category')
                 ->setStoreId(Mage::app()->getStore()->getId())
                 ->load($categoryId);

Mage::register('current_category', $category);

$products = Mage::getSingleton('catalog/layer')->getProductCollection();

echo $products->getSize();

0

En Magento 2, prueba esta colección de categorías olvidadas usando el ID de categoría

  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $subCategory =  $objectManager->create('Magento\Catalog\Model\Category')-> 
         load('categorey_id');
  foreach($subCategory as $subcat)
   { 
        print_r($subcat->getData();
  }

-2
<?php

$categoryid = 123; // Category Id

$category = new Mage_Catalog_Model_Category();
$category->load($categoryid);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*'); 

foreach ($_productCollection as $_product) { ?>
    <div class="pr_section">
        <div class="pr_desc">
            <a href="<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a>
            <?php echo $this->getReviewsSummaryHtml($_product, false, true); // Reviews ?>
                <?php echo $this->getPriceHtml($_product, true) ?>
                <?php echo $_product->getShortDescription();?>

                <?php if(!$_product->canConfigure() && $_product->isSaleable()): ?>
                    <p><button type="button" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Add to Cart')) ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
                <?php elseif($_product->getStockItem() && $_product->getStockItem()->getIsInStock()): ?>
                    <p><a title="<?php echo $this->__('View Details') ?>" class="button btn-cart" href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->__('View Details') ?></a></p>
                <?php else: ?>
                    <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                <?php endif; ?>
        </div>
        <div class="pr_img">
                <a href="<?php echo $_product->getProductUrl() ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(200); ?>" width="200" height="200" alt="" /></a> 
        </div>
<?php } ?>

Obtenga la colección de productos con detalle. Espero que sea de ayuda.


1
Creo que la necroposición no fue necesaria ya que hay suficientes respuestas a esta pregunta. Además, su uso de new Mage_Catalog_Model_Category()es cuestionable.
Julien Lachal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.