Magento 2: श्रेणी आईडी का उपयोग करके उत्पाद संग्रह प्राप्त करें


12

Magento 2 में श्रेणी आईडी का उपयोग करके श्रेणी के सभी उत्पाद कैसे प्राप्त करें?


आप इसे किसी ब्लॉक या मॉडल में चाहते हैं?
— मेरियस

मुझे मुखपृष्ठ में श्रेणी का सभी उत्पाद चाहिए। मुझे पहले ही श्रेणी आईडी मिल गई है और उसके आधार पर मुझे श्रेणी का सभी उत्पाद प्राप्त करना है
— राकेश जेसादिया

मेरे पास श्रेणी संग्रह प्राप्त करने के लिए कॉल ब्लॉक है ताकि ब्लॉक वर्ग में इसे प्राप्त करना सबसे अच्छा हो।
— राकेश जेसादिया

@RakeshJesadiya यहाँ पोस्ट करने के लिए क्षमा करें, लेकिन मुझे इस मुद्दे पर आपकी सहायता की आवश्यकता है magento.stackexchange.com/questions/293795/… कृपया
— के

जवाबों:


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/… मैं इसे इसलिए जोड़ रहा हूं कि अगर दूसरों को इस समाधान का उपयोग करने के बारे में और स्पष्टीकरण की आवश्यकता है, तो उनके पास एक स्टॉप शॉपिंग है।
— 17

@ मार्स रिपोजिटरी पैटर्न के माध्यम से इसे करने का कोई तरीका है यानी मैगेंटो द्वारा प्रदान किए गए सेवा अनुबंधों के माध्यम से?
— मथनागोपाल एस

1

आप प्रतिस्थापित करने की आवश्यकता getProductsCollection()द्वारा getProductCollection()(बिना 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

हमारे कोड में ऑब्जेक्टमैनेजर का उपयोग न करने का क्या कारण है?
— कोविसेंत्स आटेयम

0

आप addCategoriesFilter फ़ंक्शन का उपयोग कर सकते हैं। इस फ़ंक्शन के साथ आप कई श्रेणी आईडी द्वारा फ़िल्टर करते हैं।

पहले आपको इंजेक्शन की जरूरत है

protected $_productCollectionFactory;

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

फिर कोड में कहीं:

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

    return $collection;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.