Magento 2: dapatkan koleksi produk menggunakan id kategori

12

Bagaimana cara mendapatkan semua produk dari kategori menggunakan id kategori di magento 2?

Rakesh Jesadiya
sumber
Anda ingin ini di blok atau model?
Marius
Saya ingin semua produk dari kategori di homepage. saya sudah mendapatkan id kategori dan berdasarkan itu saya ingin mengambil semua produk dari kategori
Rakesh Jesadiya
Saya memiliki panggilan blok untuk mendapatkan koleksi kategori sehingga yang terbaik untuk masuk kelas blok.
Rakesh Jesadiya
@RakeshJesadiya Maaf untuk posting di sini tapi saya butuh bantuan Anda tentang masalah ini magento.stackexchange.com/questions/293795/... please
Nagaraju K

Jawaban:

24

Anda dapat menyuntikkan di blok Anda contoh \Magento\Catalog\Model\CategoryFactoryseperti ini:

protected $categoryFactory;
public function __construct(
    ....
    \Magento\Catalog\Model\CategoryFactory $categoryFactory,
    ...
){
    ...
    $this->categoryFactory = $categoryFactory;
    ...
}

Kemudian buat metode ini di blok Anda:

public function getCategory()
{
    $categoryId = $this->getCategoryId();
    $category = $this->categoryFactory->create()->load($categoryId);
    return $category;
}
public function getProductCollection()
{
     return $this->getCategory()->getProductCollection()->addAttributeToSelect('*'); 
}

Maka Anda bisa menggunakan dalam template ini:

<?php foreach ($block->getProductCollection() as $product) : ?>
    <!-- do something with $product -->
<?php endforeach;?>

Anda seharusnya sekarang bisa menambahkan ini ke konten beranda Anda

{{block class="Block\Class\Name\Here" category_id="5" template="path/to/template.phtml"}}
Marius
sumber
Dalam menerapkan solusi ini saya mengalami masalah yang sama diposting di sini: magento.stackexchange.com/questions/123374/... Saya menambahkan ini jadi jika orang lain memerlukan klarifikasi lebih lanjut tentang cara menggunakan solusi ini, mereka memiliki one stop shopping.
circleix
1

Anda harus mengganti getProductsCollection()dengan getProductCollection()(tanpa s)

Arthur SPITZNAGEL
sumber
0

Saya menggunakan ini

echo '('.$subcat->getProductCollection()->count().')';

foreach ($subcats as $subcat) { 
    if ($subcat->getIsActive()) {
        $_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId());
        $_imgUrl = $_category->getImageUrl(); 
        $subcat_url = $subcat->getUrl();
        // echo $qty = $subcat->getQty(); exit;
        $subcat_img = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . 'catalog/category/' . $subcat->getImage(); 
        $placeholder_img = "pub/media/placeholder.png";
        if($_imgUrl ==''){
            $_imgUrl = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)."catalog/category/placeholder.png";
        }
        ?>
        <div class="col-sm-2 item-two">
            <a href="<?php echo $subcat_url; ?>">
                <div class="item-two-img">
                    <img src="<?php echo $_imgUrl; ?>" class="img-responsive"/>
                </div>
                <p><?php echo $subcat->getName(); 
                    $subcat->getProductCollection()->count(); ?>
                    <span class="pro_quantity">
                        <?php echo '('.$subcat->getProductCollection()->count().')';?>
                    </span>
                </p>
            </a>
        </div>
        <?php
    }
}
venkata prasad
sumber
Jangan pernah gunakan objectmanager dalam kode Anda. terutama tidak di dalam phtml Anda
Kay Int Veen