Produktkollektion von einer Kategorie-ID abrufen


18

Ich versuche, eine Sammlung von Produkten aus einer Kategorie-ID zu erhalten. Ein paar Dinge, die ich ausprobiert habe, sind im Block:

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

und

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

habe auch versucht es einfach aus dem phtml zu machen

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

Nichts davon funktioniert, aber ich sehe auch keine Fehler. Ich habe einen weiteren Beitrag gesehen, der der gleichen Frage zu entsprechen scheint: Magento - Produkte aus einer bestimmten Kategorie abrufen, aber diese Methode hat auch bei mir nicht funktioniert. Danke für jede Hilfe!

Antworten:


32

Versuche dies:

$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

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

Dies sollte funktionieren, da der Kategoriefilter hinzugefügt wird, da die Kategorie bereits geladen ist:

Mage_Catalog_Model_Category

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

Warten Sie, es funktioniert immer noch nicht!

Ok, vielleicht haben Sie größere Probleme, vermutlich etwas Überschreibendes getProductCollection. Versuchen wir also, diese Bequemlichkeitsmethode zu umgehen:

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

Danke für Ihre Hilfe! Ich fühle mich näher, aber immer noch stockend. Mit Ihrer letzten Methode habe ich hinzugefügt foreach ($products as $product) { echo $product->getId(); }und ich bekomme eine Reihe von IDs. Wenn ich aber echo $product->getName();nichts probiere . Ich habe auch versucht hinzuzufügen, ->addAttributeToSelect('*')aber nein. Vielen Dank für weitere Hilfe.
Zac

@philwinkle Gibt es eine Möglichkeit, alle Produkte für eine Kategorie zu erhalten? Ich habe Probleme, behinderte zu finden. Ich benutzeMage::getResourceModel('catalog/product_collection')->setStoreId(Mage::app()->getStore()->getId())->addCategoryFilter($category)->addAttributeToSelect('sku');
Nick Rolando

9

So laden Sie eine Produktkollektion mit allen Daten, die Sie normalerweise für Produktlisten im Frontend benötigen:

$_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();

Auf diese Weise wird die Produktsammlung vorbereitet, um die erforderlichen Daten zum Anzeigen von Preisen, des Produktlinks und aller Attribute zu laden, die als "In der Produktliste verwendet" konfiguriert sind, jedoch nicht mehr.


Wie kann ich die Ergebnisse begrenzen? ->limit(5)hat nicht funktioniert.
Pedram Behroozi

->setPageSize(5)
Fabian Schmengler

@fschmengler Sie vermissen ;nach $category = Mage::getModel('catalog/category')->load(123)Code
Murtuza Zabuawala

5

Mit dem folgenden Code erhalten Sie eine Produktkollektion der Kategorie ID 10.

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

3

Code zum Abrufen der Produktsammlung von einer bestimmten Kategorie-ID:

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

perfekt!!! +1 :)
SagarPPanchal

wo $ category = $ categoryId?
Lorakeen

2

Der folgende Code ist viel einfacher und effizienter als das Laden der Produktsammlung und das Filtern anhand seiner Attribute.

$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

Versuchen Sie in Magento 2, diese Kategoriesammlung mit der Kategorie-ID zu vergessen

  $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 } ?>

Holen Sie sich die Produktkollektion mit Details. Hoffe es wird hilfreich sein.


1
Ich denke, Nekroposting war nicht notwendig, da es genügend Antworten auf diese Frage gibt. Darüber hinaus ist Ihre Verwendung von new Mage_Catalog_Model_Category()fraglich.
Julien Lachal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.