Magento 2: Kategori kimliğini kullanarak ürün koleksiyonu alın


12

Kategorideki tüm ürünleri magento 2 kategorisinde id kullanarak nasıl edinebilirsiniz?


bunu bir blokta mı yoksa bir modelde mi istiyorsun?
Marius

kategorideki tüm ürünleri ana sayfada istiyorum. zaten kategori kimliği var ve bu kategorinin tüm ürününü almak istiyorum dayalı
Rakesh Jesadiya

böylece blok sınıf almak için en iyi kategori koleksiyonu almak için çağrı bloğu var.
Rakesh Jesadiya

@RakeshJesadiya Buraya gönderdiğiniz için üzgünüz, ancak bu konuda yardımınıza ihtiyacım var magento.stackexchange.com/questions/293795/… lütfen
Nagaraju K

Yanıtlar:


24

bloğunuza şöyle bir örnek enjekte edebilirsiniz \Magento\Catalog\Model\CategoryFactory:

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

Ardından bloğunuzda bu yöntemi oluşturun:

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

Sonra şablonda şunları kullanabilirsiniz:

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

Şimdi bunu sadece ana sayfa içeriğinize ekleyebilmeniz gerekir

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

Bu çözümü uygularken burada yayınlanan aynı sorunla karşılaştım: magento.stackexchange.com/questions/123374/… Ben bunu ekliyorum, böylece diğerleri bu çözümün nasıl kullanılacağı konusunda daha fazla açıklamaya ihtiyaç duyarlarsa, alışverişlerini durdururlar.
circlesix

@Marius, bunu depo modeli aracılığıyla, yani Magento tarafından sağlanan hizmet sözleşmeleri yoluyla yapmanın bir yolu var mı?
Mathanagopal S

1

Sen değiştirmeniz gerekiyor getProductsCollection()tarafından getProductCollection()(olmadan s)


0

Bunu kullanıyorum

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

Kodunuzda asla objectmanager kullanmayın. özellikle phtmls değil
Kay Int Veen

Kodumuzda objectmanager kullanmamanın nedeni nedir?
Kowsigan Atsayam

0

AddCategoriesFilter işlevini kullanabilirsiniz. Bu işlevle birkaç kategori kimliğine göre filtrelersiniz.

Öncelikle CollectionFactory'yi enjekte etmeniz gerekir:

protected $_productCollectionFactory;

public function __construct(
    ....
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
    ...
){
    ...
    $this->_productCollectionFactory = $productCollectionFactory;
    ...
}

Sonra kodun bir yerinde:

public function getCollectionByCategoryId($id)
{
    $ids = [$id];
    $collection = $this->_productCollectionFactory->create();
    $collection->addAttributeToSelect('*');
    $collection->addCategoriesFilter(['in' => ids]);

    return $collection;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.