Magento 2:使用类别ID获取产品集合


12

如何使用magento 2中的类别ID获取所有类别的产品?


您要在块中还是在模型中?
马吕斯

我想要主页中所有类别的产品。我已经有了类别ID,并且基于此,我想获取类别的所有产品
Rakesh Jesadiya,2016年

我有调用块以获取类别集合,因此最好进入块类。
Rakesh Jesadiya '16

@RakeshJesadiya很抱歉在这里发布,但我需要您在此问题上的帮助magento.stackexchange.com/questions/293795/…
Nagaraju K

Answers:


24

您可以在您的区块中插入如下实例\Magento\Catalog\Model\CategoryFactory

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

然后在您的代码块中创建此方法:

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

然后,您可以在模板中使用以下代码:

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

您现在应该可以将其添加到首页内容中

{{block class="Block\Class\Name\Here" category_id="5" template="path/to/template.phtml"}}

在实施该解决方案时,我遇到了此处发布的相同问题: magento.stackexchange.com/questions/123374/…我正在添加此解决方案,因此,如果其他人需要进一步说明如何使用此解决方案,他们可以一站式购物。
circleix 2013年

@Marius是否可以通过存储库模式(即通过Magento提供的服务合同)来执行此操作?
Mathanagopal S


0

我正在用这个

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

切勿在代码中使用objectmanager。特别是不在您的phtml中
凯·

不在我们的代码中使用objectmanager的原因是什么?
Kowsigan Atsayam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.