2010-09-01 81 views
0

我已使用以下代碼來獲取製造商的整個列表。Magento:如何過濾Mage :: getResourceModel('eav/entity_attribute_collection')的結果按類別

$currentCategory = Mage::registry('current_category'); 
    $product = Mage::getModel('catalog/product');  
    $attributes = Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($product->getResource()->getTypeId())->addFieldToFilter('attribute_code', 'brand_name');  
    $attribute = $attributes->getFirstItem()->setEntity($product->getResource());  
    $manufacturers = $attribute->getSource()->getAllOptions(false);  

現在,我該如何獲得屬於特定類別的製造商列表?我一直在挖掘一段時間,找出一種方法來限制結果的類別,但沒有運氣。 ResourceModel是否可以按類別過濾?

謝謝。

回答

0

我認爲你最好從類別中的產品集合開始,然後獲取與這些產品匹配的屬性。喜歡的東西:

$currentCategory = Mage::registry('current_category'); 
$products = $currentCategory->getProductCollection(); 
foreach($products as $product): 
    $product = Mage::getModel('catalog/product')->load($product->getId()); 
    $manufacturers[] = $product->getBrandName();  
endforeach; 

您將需要重複數據刪除陣列,但array_unique()應該可以幫助你在那裏。

HTH, JD

編輯

這將防止需要加載的每個產品,應提高性能:

$currentCategory = Mage::registry('current_category'); 
$products = $currentCategory->getProductCollection(); 
$products->addAttributeToSelect('brand_name'); 
$products->load(); //execute the query 
$manufacturers = $products->toArray(array('brand_name')); 

請記住,通過使用緩存,性能損失只花你一次。

JD

+0

我這樣做,但表現與以前的方法不匹配。 任何其他thoght? 謝謝 – Young 2010-09-02 09:18:47

+0

修正了上面的答案。 – 2010-09-02 10:51:52

+0

謝謝!我會嘗試一下,讓你知道它是如何提高性能的。 – Young 2010-09-03 03:14:58

0

感謝您獲得屬性選項ID的好方法。它真的幫了我很多! 以下是我最後做,獲得選項ID和它的文本值:

$currentCategory = Mage::registry('current_category'); 
$products = $currentCategory->getProductCollection(); 
$products->addAttributeToSelect('brand_name'); 
$products->load(); //execute the query 
$manufacturers = $products->toArray(array('brand_name')); 
$temp = array(); 
foreach($manufacturers as $v) { 
    $temp[] = $v['brand_name']; 
} 
$brands = implode(",",array_unique($temp)); 
$write = Mage::getSingleton('core/resource')->getConnection('core_write'); 
$readresult=$write->query("SELECT eav_attribute_option_value.option_id, eav_attribute_option_value.value FROM eav_attribute_option_value INNER JOIN eav_attribute_option ON eav_attribute_option_value.option_id=eav_attribute_option.option_id WHERE eav_attribute_option.attribute_id=505 AND eav_attribute_option_value.option_id IN (".$brands.")"); 

while ($row = $readresult->fetch()) { 
    $brandlist[] = array('value'=>$row['option_id'], 'label'=>$row['value']); 
} 

的brandlist陣列將可以選擇ID和值,這樣我可以用它來連接。

再次感謝。

相關問題