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?


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"}}

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


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.