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.