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?


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

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


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

Nunca use objectmanager en su código. especialmente no en tus phtmls
Kay Int Veen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.