2010-08-04 5 views
4

내 가게에 일부 필터를 추가하려고 시도하고 있지만 불쾌한 부작용이 있습니다.Magento : addAttributeToFilter하지만이 속성이없는 제품은 무시합니까?

상품 유형 A와 B가 있다고 가정 해 보겠습니다. 이제는 A 색상 = 파란색/빨간색 만 표시하고 싶습니다.

$collection = Mage::getResourceModel('catalog/product_collection') 
    ->setStoreId($this->getStoreId()) 
    ->addCategoryFilter($this) 
    ->addAttributeToFilter(array(
      array('attribute' => 'color', 'in' => array(4, 6)), 
    ) 
    ); 

이 트릭 않습니다,하지만 지금은 제품 유형 B는 (이 속성이 임명되지 않기 때문에) 색에 할당 된 값이 유형 쇼까지 FO 어떤 제품이 없기 때문.

나는 포럼 http://www.magentocommerce.com/boards/viewthread/178309에이 코드를 발견했지만, 그것은 작동하지 않습니다

array('attribute' => 'color', 'is' => new Zend_Db_Expr('null')) 

을 둘 다 수행합니다 실제로 제품 속성이 지정되지하지만에있는 느릅 나무 보여줍니다

array('attribute' => 'color', 'null' => true), 

값이 선언 됨 ...

나는이 문장은 'OR'로 연결되어 생각하기 때문에

(설명서에 따라)하지만, 심지어는

참고이 값은 드롭 다운 목록에서 오는 것을 ... 제품 유형 속성이 할당이 이십 기가 바이트 추가 , 비록 그것이 중요하다라고 확신하지 않는.

+0

가 어디에서 이것을 요구하고있다? (메서드 호출에서 "$ this"는 무엇입니까?) –

+0

나는 app/code/core/mage/catalog/model/category.php의 getProductCollection()에서 이것을 호출합니다. – Rakward

답변

7

어쩌면 너무 늦었어요,하지만 나를 위해 작동합니다

$collection = Mage::getResourceModel('catalog/product_collection') 
    ->setStoreId($this->getStoreId()) 
    ->addCategoryFilter($this) 
    ->addAttributeToFilter(
     array(
      array('attribute' => 'color', 'null' => true), 
      array('attribute' => 'color', 'in' => array(4, 6)), 
     ), 
     '', 
     'left' 
); 
+0

1 년이 넘었지만 너무 늦었습니다 나는 다른 사람들이 여전히 그것을 사용할 수 있기를 바랬다. – Rakward

+0

이 코드는 inner 대신 left join을 트리거하기 때문에 문제가 해결됩니다. –

0

즉석,이 주사를 :

$collection = Mage::getResourceModel('catalog/product_collection') 
    ->setStoreId($this->getStoreId()) 
    ->addCategoryFilter($this) 
    ->addAttributeToFilter(array(array('attribute' => 'color', 'in' => array(4, 6)),'left') 
); 
+0

이렇게하면 "잘못된 속성 이름"이라는 오류가 발생했습니다 ... – Rakward

+0

덧붙여 말하면 나는 덧붙여 야했습니다. 덧붙여서 내가 어디에 추가했는지에 따라 그 오류가 있거나 단순히 원하는 결과가 아닙니다. – Rakward

관련 문제