Magento 2: obtenez la collection de produits en utilisant l'ID de catégorie

12

Comment obtenir tous les produits de la catégorie en utilisant l'ID de catégorie dans Magento 2?

Rakesh Jesadiya
la source
vous voulez cela dans un bloc ou dans un modèle?
Marius
je veux tous les produits de la catégorie dans la page d'accueil. j'ai déjà l'identifiant de la catégorie et sur cette base, je veux récupérer tous les produits de la catégorie
Rakesh Jesadiya
J'ai un bloc d'appel pour obtenir la collection de catégories, donc il vaut mieux entrer dans la classe de bloc.
Rakesh Jesadiya
@RakeshJesadiya Désolé de poster ici mais j'ai besoin de votre aide sur ce problème magento.stackexchange.com/questions/293795/… s'il vous plaît
Nagaraju K

Réponses:

24

vous pouvez injecter dans votre bloc une instance \Magento\Catalog\Model\CategoryFactorycomme celle-ci:

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

Créez ensuite cette méthode dans votre bloc:

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

Ensuite, vous pouvez utiliser dans le modèle ceci:

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

Vous devriez maintenant pouvoir simplement l'ajouter au contenu de votre page d'accueil

{{block class="Block\Class\Name\Here" category_id="5" template="path/to/template.phtml"}}
Marius
la source
Lors de la mise en œuvre de cette solution, j'ai rencontré le même problème que celui publié ici: magento.stackexchange.com/questions/123374/… J'ajoute cela, donc si d'autres ont besoin de précisions sur la façon d'utiliser cette solution, ils ont un guichet unique.
circlesix
@Marius existe-t-il un moyen de le faire via le modèle de référentiel, c'est-à-dire via les contrats de service fournis par Magento?
Mathanagopal S
1

Vous devez remplacer getProductsCollection()par getProductCollection()(sans s)

Arthur SPITZNAGEL
la source
0

J'utilise ceci

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
la source
N'utilisez jamais objectmanager dans votre code. surtout pas dans vos phtml
Kay Int Veen
Quelle est la raison de ne pas utiliser objectmanager dans notre code?
Kowsigan Atsayam