2011-02-15 11 views
32

में किसी उत्पाद के लिए श्रेणियां कैसे प्राप्त करें मैं उत्पाद की श्रेणियों के आधार पर अपने Magento Google Base आउटपुट में product_type जोड़ने की कोशिश कर रहा हूं, लेकिन मुझे लगता है कि ऐसा करने में असमर्थ है। ।मैगेंटो

// Get categories from product to include as product_type 
$categoryIds = $object->getCategoryIds(); 
foreach($categoryIds as $categoryId) { 
    $category = Mage::getModel('catalog/category')->load($categoryId); 
    $this->_setAttribute('product_type', $category->getName(), 'text'); 
} 

मुद्दा यह है कि यह रिटर्न सभी श्रेणियों की, न कि केवल वे उत्पाद में है किसी को भी एक समाधान है है: मैं निम्नलिखित कोड है?

+0

यह सवाल स्टैक ओवरफ़्लो में अधिक उचित रूप से पूछा जाता है। – Christopher

उत्तर

40

यह पूरी तरह से परीक्षण नहीं किया है ..

//load the product 

$product = Mage::getModel('catalog/product')->load($productId); 

//load the categories of this product 

$categoryCollection = $product->getCategoryCollection(); 

आप कर सकते हैं तो एक सरणी के माध्यम से की तरह $categoryCollection के माध्यम से लूप।

source

+1

यह सही समाधान होना चाहिए - संग्रह का उपयोग करके, आप प्रति श्रेणी (कम से कम) 1 क्वेरी के बजाय एक जॉइन का उपयोग करते हैं। (देखें: 'Mage_Catalog_Model_Resource_Product :: getCategoryCollection') –

+0

' getCategoryCollection() 'में इसके चयन के हिस्से के रूप में श्रेणी का नाम नहीं है। – dchayka

+1

यह कर सकता है, हालांकि, संग्रह एक्स्टेंसिबल हैं। 'GetCategoryCollection() -> addAttributeToSelect (' name ')' (नोट: untested) –

55

स्रोत लिंक राव की गिरावट का उपयोग करते हुए ऊपर मैं वास्तव में एक बेहतर जवाब मिला:

$product = Mage::getModel('catalog/product')->load($productId); 

$cats = $product->getCategoryIds(); 
foreach ($cats as $category_id) { 
    $_cat = Mage::getModel('catalog/category')->load($category_id) ; 
    echo $_cat->getName(); 
} 
+0

का हकदार है, यह सही उत्तर है, लेकिन इसे सही के रूप में चिह्नित नहीं किया गया है। – ShaunOReilly

+0

मैं इसकी तलाश में हूं .. लेकिन मुझे यह कोड कहाँ रखना है .. मैं कौन सा फ़ोल्डर .. क्या आप मुझे रास्ता दे सकते हैं ?? मैं जेसन प्रारूप में श्रेणियों की सूची चाहता हूँ। मैं यह कैसे प्राप्त कर सकता हूं? –

+14

ऐसा मत करो, राव द्वारा समाधान का उपयोग करें, यह बहुत सारे SQL प्रश्नों को बचाता है! –

5

जाओ सभी उत्पाद की श्रेणियाँ

<?php 
    $_Product = Mage::getModel("catalog/product")->load(PRODUCT_ID); 
    $categoryIds = $_Product->getCategoryIds();//array of product categories 

    foreach($categoryIds as $categoryId) { 
     $category = Mage::getModel('catalog/category')->load($categoryId); 
     $this->_setAttribute('product_type', $category->getName(), 'text'); 
    } 
?> 
5

का कहना चाहते हैं कि @Rao द्वारा समाधान सबसे अच्छा है यदि आपके पास श्रेणी आईडी प्राप्त करने के लिए कोई उत्पाद ऑब्जेक्ट है क्योंकि यह केवल एक SQL कैल बनाता है एल।

तुम सिर्फ है, तो श्रेणी आईडी के लिए, आपको निम्न कर सकते हैं:

$categories = Mage::getModel('catalog/category') 
    ->getCollection() 
    ->addAttributeToSelect('name') //you can add more attributes using this 
    ->addAttributeToFilter('entity_id', array('in'=>array(1,2,3))); 

foreach($categories as $_cat){ 
    $holder[]= $_cat->getName(); 
} 

कहाँ सरणी (1,2,3) अपने श्रेणियां हैं। ध्यान दें कि सरणी में पूर्णांक हैं, स्ट्रिंग मान नहीं, मैंने पाया कि SQL इसके बारे में picky हो सकता है।

यह भी कहना है करने के लिए एक समय में एक वर्ग खींच समाधान बहुत अक्षम हैं कि के रूप में यह पाश जैसे के हर यात्रा के लिए एक एसक्यूएल कॉल करता है चाहता था:

foreach(..){ 
    Mage::getModel('catalog/category')->load($categoryId); 
} 
0

राव के समाधान की कोशिश करता है सभी विशेषताओं लोड करने के लिए जो इसका मतलब है कि बहुत सारे प्रश्न और जुड़ते हैं लेकिन आपको इसकी श्रेणियों को लोड करने के लिए केवल product_id की आवश्यकता है। तो आप यह कर सकते हैं:

$product = Mage::getModel("catalog/product")->setId($productId); 
    $categories = $product->getCategoryCollection(); 

यह उत्पाद लोड नहीं करेगा और आपको श्रेणियां देगा।

संबंधित मुद्दे