Magento 2: obtenga la colección de productos utilizando el ID de categoría

12

¿Cómo obtener todos los productos de categoría utilizando id de categoría en magento 2?

Rakesh Jesadiya
fuente
quieres esto en un bloque o en un modelo?
Marius
Quiero todo el producto de la categoría en la página de inicio. Ya obtuve la identificación de la categoría y, en función de eso, quiero obtener todos los productos de la categoría
Rakesh Jesadiya
Tengo bloque de llamadas para obtener la colección de categorías, por lo que es mejor entrar en la clase de bloque.
Rakesh Jesadiya
@RakeshJesadiya Perdón por publicar aquí, pero necesito tu ayuda sobre este tema magento.stackexchange.com/questions/293795/… por favor
Nagaraju K

Respuestas:

24

puedes inyectar en tu bloque una instancia \Magento\Catalog\Model\CategoryFactorycomo esta:

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

Luego crea este método en tu bloque:

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

Luego puede usar en la plantilla esto:

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

Ahora debería poder agregar esto al contenido de su página de inicio

{{block class="Block\Class\Name\Here" category_id="5" template="path/to/template.phtml"}}
Marius
fuente
Al implementar esta solución, me encontré con el mismo problema publicado aquí: magento.stackexchange.com/questions/123374/… Estoy agregando esto, por lo que si otros necesitan más aclaraciones sobre cómo usar esta solución, tienen una parada para comprar.
circlesix
1

Necesita reemplazar getProductsCollection()por getProductCollection()(sin s)

Arthur SPITZNAGEL
fuente
0

Estoy usando esto

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
fuente
Nunca use objectmanager en su código. especialmente no en tus phtmls
Kay Int Veen