마 젠토 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.