마 젠토 2 : 카테고리 ID를 사용하여 제품 컬렉션 가져 오기


12

magento 2의 카테고리 ID를 사용하여 카테고리의 모든 제품을 얻는 방법은 무엇입니까?


이것을 블록이나 모델로 원하십니까?
Marius

홈페이지에 카테고리의 모든 제품이 필요합니다. 나는 이미 카테고리 ID를 얻었고 그것을 기반으로 카테고리의 모든 제품을 가져오고 싶다
Rakesh Jesadiya

카테고리 모음을 가져 오기위한 호출 블록이 있으므로 블록 클래스에 들어가는 것이 가장 좋습니다.
Rakesh Jesadiya

@RakeshJesadiya 죄송합니다 여기에 게시하지만, 나는이 문제에 대한 당신의 도움이 필요 magento.stackexchange.com/questions/293795/... 하십시오
Nagaraju K

답변:


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/...가 나는 다른 사람들이이 솔루션을 사용하는 방법에 대한 자세한 설명이 필요한 그렇다면이를 추가 해요, 그들은 원 스톱 쇼핑이있다.
동그라미 ixix

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

코드에서 객체 관리자를 사용하지 마십시오. 특히 phtmls에 포함되어 있지 않음
Kay Int Veen

코드에서 objectmanager를 사용하지 않는 이유는 무엇입니까?
Kowsigan Atsayam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.