Dapatkan koleksi produk dari id kategori

18

Saya mencoba mendapatkan koleksi produk dari id kategori. Beberapa hal yang saya coba adalah di blok:

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

dan

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

juga mencoba melakukannya dari phtml

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

Tidak satu pun dari ini bekerja tetapi saya tidak melihat kesalahan juga. Saya melihat posting lain yang sepertinya pertanyaan yang sama: Magento - Dapatkan Produk dari Kategori Tertentu tetapi metode itu tidak berhasil untuk saya juga. Terima kasih atas bantuannya!

Zac
sumber

Jawaban:

32

Coba ini:

$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

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

Ini harus berfungsi karena ia menambahkan filter kategori untuk Anda karena sudah memuat kategori:

Mage_Catalog_Model_Category

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

Tunggu, itu masih tidak berhasil!

Ok, jadi Anda mungkin memiliki masalah yang lebih besar, mungkin sesuatu menimpa getProductCollection. Jadi mari kita coba menghindari metode kenyamanan itu:

$category = Mage::getModel('catalog/category')->load($category_id);
$products = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->addCategoryFilter($category);
Philwinkle
sumber
Terima kasih atas bantuan Anda! Saya merasa lebih dekat tetapi masih bingung. Menggunakan metode terakhir Anda, saya menambahkan foreach ($products as $product) { echo $product->getId(); }dan saya mendapatkan serangkaian id. Namun ketika saya echo $product->getName();tidak mencoba apa pun. Saya mencoba menambahkan ->addAttributeToSelect('*')juga tetapi tidak. Terima kasih atas bantuan lebih lanjut.
Zac
@ philwinkle Apakah ada cara untuk mendapatkan semua produk untuk suatu kategori? Saya kesulitan mendapatkan yang dinonaktifkan. Saya menggunakanMage::getResourceModel('catalog/product_collection')->setStoreId(Mage::app()->getStore()->getId())->addCategoryFilter($category)->addAttributeToSelect('sku');
Nick Rolando
9

Cara memuat koleksi produk dengan semua data yang biasanya Anda butuhkan untuk daftar produk di frontend:

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

Ini mempersiapkan pengumpulan produk untuk memuat data yang diperlukan untuk menampilkan harga, tautan produk dan atribut apa pun yang dikonfigurasi sebagai "digunakan dalam daftar produk", tetapi tidak lebih.

Fabian Schmengler
sumber
Bagaimana saya bisa membatasi hasilnya? ->limit(5)tidak bekerja
Pedram Behroozi
->setPageSize(5)
Fabian Schmengler
@fschmengler Anda kehilangan ;setelah $category = Mage::getModel('catalog/category')->load(123)kode
Murtuza Zabuawala
5

Kode di bawah ini akan memberi Anda koleksi produk dari kategori id 10.

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

Kode untuk mendapatkan koleksi produk dari id kategori tertentu:

$productCollection = Mage::getResourceModel('catalog/product_collection')
                       ->addCategoryFilter($category);
Deepak Kumar
sumber
sempurna!!! +1 :)
SagarPPanchal
di mana $ category = $ categoryId?
lorakeen
2

Sepotong kode di bawah ini jauh lebih sederhana dan efisien daripada memuat koleksi produk dan pemfilteran menggunakan atributnya,

$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();
Vinoth
sumber
0

Di Magento 2 coba ini lupakan koleksi kategori menggunakan ID kategori

  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $subCategory =  $objectManager->create('Magento\Catalog\Model\Category')-> 
         load('categorey_id');
  foreach($subCategory as $subcat)
   { 
        print_r($subcat->getData();
  }
nirali
sumber
-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 } ?>

Dapatkan koleksi produk dengan detail. Semoga bermanfaat.

Vinod Kumar
sumber
1
Saya pikir necroposting tidak diperlukan karena ada cukup jawaban untuk pertanyaan ini. Selanjutnya, penggunaan Anda new Mage_Catalog_Model_Category()adalah kuesioner.
Julien Lachal