我已使用以下代码获取制造商的完整列表。
$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 :(得分: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
答案 1 :(得分: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和value,以便我可以使用它进行链接。
再次感谢。