श्रेणी आईडी से उत्पाद संग्रह प्राप्त करें


18

मैं एक श्रेणी आईडी से उत्पादों का एक संग्रह प्राप्त करने की कोशिश कर रहा हूं। कुछ चीजें जो मैंने कोशिश की हैं, वे ब्लॉक में हैं:

 $category = Mage::getModel('catalog/category')->load(123)
        ->getProductCollection();

तथा

    $category = Mage::getModel('catalog/category')->load(123);
    $products = $category->getProductCollection()->addCategoryFilter($category)
                         ->addAttributeToFilter('type_id', 'simple')
                         ->addAttributeToSelect('*');

यह भी सिर्फ phtml से करने की कोशिश की

$oCatId = Mage::getModel('catalog/category')->load(769); 
        $products->addCategoryFilter($oCatId);

इसमें से कोई भी काम नहीं करता है, लेकिन मुझे कोई त्रुटि नहीं दिख रही है। मैंने एक और पोस्ट देखी जो कि एक ही प्रश्न की तरह प्रतीत होती है: मैगेंटो - विशिष्ट श्रेणी से उत्पाद प्राप्त करें लेकिन वह विधि मेरे लिए भी काम नहीं करती थी। किसी भी मदद के लिए धन्यवाद!

जवाबों:


32

इसे इस्तेमाल करे:

$products = Mage::getModel('catalog/category')->load($category_id)
 ->getProductCollection()
 ->addAttributeToSelect('*') // add all attributes - optional
 ->addAttributeToFilter('status', 1) // enabled
 ->addAttributeToFilter('visibility', 4) //visibility in catalog,search
 ->setOrder('price', 'ASC'); //sets the order by price

स्रोत: http://overlycaffeinated.com/blog/2011/02/get-all-sale-products-from-a-category-in-magento/

यह काम करना चाहिए क्योंकि यह आपके लिए श्रेणी फ़िल्टर पहले से लोड की गई श्रेणी के आधार पर जोड़ता है:

Mage_Catalog_Model_Category

public function getProductCollection()
{
    $collection = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId($this->getStoreId())
        ->addCategoryFilter($this);
    return $collection;
}

रुको, यह अभी भी काम नहीं करता है!

ठीक है, इसलिए आपके पास बड़े मुद्दे हो सकते हैं, संभवतः कुछ ओवरराइटिंग getProductCollection। तो आइये उस सुविधा विधि को दरकिनार करते हैं:

$category = Mage::getModel('catalog/category')->load($category_id);
$products = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->addCategoryFilter($category);

आपकी सहायताके लिए धन्यवाद! मैं करीब महसूस कर रहा हूं, लेकिन अभी भी भयावह है। आपकी अंतिम विधि का उपयोग करते हुए, मैंने जोड़ा foreach ($products as $product) { echo $product->getId(); }और मुझे आईडी की एक श्रृंखला मिलती है। हालांकि जब मैं echo $product->getName();कुछ भी नहीं की कोशिश करता हूं । मैं ->addAttributeToSelect('*')भी जोड़ने की कोशिश की, लेकिन नहीं। किसी भी अधिक मदद के लिए धन्यवाद।
ज़ैक

@philwinkle क्या किसी श्रेणी के लिए सभी उत्पाद प्राप्त करने का एक तरीका है? मुझे परेशानी हो रही है कि विकलांग हैं। मैं उपयोग कर रहा हूँMage::getResourceModel('catalog/product_collection')->setStoreId(Mage::app()->getStore()->getId())->addCategoryFilter($category)->addAttributeToSelect('sku');
निक रोलैंडो

9

किसी उत्पाद संग्रह को उन सभी डेटा के साथ लोड करने के लिए कैसे करें, जिनकी आपको आम तौर पर दृश्यपटल में उत्पाद सूची के लिए आवश्यकता होती है:

$_categoryId = 123;
$category = Mage::getModel('catalog/category')->load($_categoryId );
$productCollection = $category->getProductCollection();
$productCollection
        ->addStoreFilter()
        ->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds())
        ->addMinimalPrice()
        ->addFinalPrice()
        ->addTaxPercents()
        ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
        ->addUrlRewrite();

यह कीमतों, उत्पाद लिंक और "उत्पाद सूचीकरण में प्रयुक्त" के रूप में कॉन्फ़िगर किए गए किसी भी गुण को प्रदर्शित करने के लिए आवश्यक डेटा को लोड करने के लिए उत्पाद संग्रह तैयार करता है, लेकिन इससे अधिक नहीं।


मैं परिणामों को कैसे सीमित कर सकता हूं? ->limit(5)काम नहीं किया।
पेड्रम बेहारोजी


@fschmengler आपको कोड के ;बाद याद आती है$category = Mage::getModel('catalog/category')->load(123)
मुर्तुज़ा ज़ुबुवाला

5

यह नीचे कोड आपको श्रेणी आईडी 10 से उत्पाद संग्रह देगा।

$categoryId = 10;    
$products = Mage::getSingleton('catalog/category')->load($categoryId)
            ->getProductCollection()
            ->addAttributeToSelect('*');


2

कोड का टुकड़ा नीचे उत्पाद संग्रह लोड करने और फ़िल्टरिंग की तुलना में बहुत सरल और कुशल है, यह विशेषता है,

$categoryId = 32; // Replace with your category

$category = Mage::getModel('catalog/category')
                 ->setStoreId(Mage::app()->getStore()->getId())
                 ->load($categoryId);

Mage::register('current_category', $category);

$products = Mage::getSingleton('catalog/layer')->getProductCollection();

echo $products->getSize();

0

Magento 2 में श्रेणी आईडी का उपयोग करके इस श्रेणी के संग्रह को भूल जाएं

  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $subCategory =  $objectManager->create('Magento\Catalog\Model\Category')-> 
         load('categorey_id');
  foreach($subCategory as $subcat)
   { 
        print_r($subcat->getData();
  }

-2
<?php

$categoryid = 123; // Category Id

$category = new Mage_Catalog_Model_Category();
$category->load($categoryid);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*'); 

foreach ($_productCollection as $_product) { ?>
    <div class="pr_section">
        <div class="pr_desc">
            <a href="<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a>
            <?php echo $this->getReviewsSummaryHtml($_product, false, true); // Reviews ?>
                <?php echo $this->getPriceHtml($_product, true) ?>
                <?php echo $_product->getShortDescription();?>

                <?php if(!$_product->canConfigure() && $_product->isSaleable()): ?>
                    <p><button type="button" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Add to Cart')) ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
                <?php elseif($_product->getStockItem() && $_product->getStockItem()->getIsInStock()): ?>
                    <p><a title="<?php echo $this->__('View Details') ?>" class="button btn-cart" href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->__('View Details') ?></a></p>
                <?php else: ?>
                    <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                <?php endif; ?>
        </div>
        <div class="pr_img">
                <a href="<?php echo $_product->getProductUrl() ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(200); ?>" width="200" height="200" alt="" /></a> 
        </div>
<?php } ?>

विस्तार के साथ उत्पाद संग्रह प्राप्त करें। आशा है कि यह मददगार होगा।


1
मुझे लगता है कि नेक्रोपोस्टिंग आवश्यक नहीं था क्योंकि इस प्रश्न के पर्याप्त उत्तर हैं। इसके अलावा, आपका उपयोग new Mage_Catalog_Model_Category()संदिग्ध है।
जुलिएन लाछल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.