확인

2009-11-10 5 views
25

나는 '단순'하지만 속하는 제품을 표시하지 수있는 방법,확인

$collection = Mage::getModel('catalog/product')->getCollection(); 

$collection->addAttributeToSelect('name') 
    ->addAttributeToFilter("category_ids", array('finset'=>$this->category_id)); 

foreach($collection as $product) { 
    echo $product->getName(); 
} 

내 질문은 제품의 목록을 잡기 위해 다음과 같은 코드를 부모 '구성 가능한'제품. (예를 들어, "Red Shirt Medium"은 "Red Shirt"에 포함되어 있지 않습니다.)

나는이 협회가 'catalog_product_super_link'에 거주한다는 사실을 깨달았지만, Magento만으로 시작 했으므로 불행히도하지 않습니다. 필터링하는 방법을 알고 :

건배 남자,

크리스.

답변

28

나는이 조건을 컬렉션에 추가하는 직접적인 방법을 모른다. 그런 솔루션에도 관심이있다. 그러나 각 제품의 루프 내부를 항상 확인할 수 있습니다.

if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId()))) 
{ 
    echo $product->getName(); 
} 
+1

단순한 학부모 ID를 찾는 완벽한 솔루션입니다. 대단히 고마워요 –

+2

_ "이 컨디션을 컬렉션에 추가하는 방법을 모른다"_$ collection-> getSelect()'[Zend_Db_Select] (http : //framework.zend .com/manual/1.12/ko/zend.db.select.html)을 사용하여 사용자 정의 선택을 작성하십시오. $ collection-> getTable ('catalog/product_super_link');는 조인에 도움이 될 수 있습니다. –

5

제품 클래스에 isConfigurable이라는 기능이 있습니다.

도움이 될 수 있습니다.

$product->isConfigurable(); 
// if its the parent object it'll be true, if its the child it'll be false. 
+6

나는 이것이 작동하지 않을 것이라고 생각한다. 제품이 단순한 제품이라면, 항상 false를 리턴 할 것이지만 제품은 어린이 일 수있다. – JuLy

2

가장 빠른 방법은 제품의 가시성이 "보이지 개별적으로"설정되어있는 경우 구성 제품과 관련된 간단한 제품은 일반적으로이 설정되기 때문에, 확인 될 수 있습니다. 불행히도 나는 정확한 문법을 ​​알지 못한다. 그러나 희망적으로 차임을 할 의사가있는 누군가는 그렇지 않다!

5

나는 Google 피드와 비슷한 것을했습니다. 이 코드 발췌 내가 제품 상속 확인하는 데 사용하는 것입니다 : 구성 제품의 일부 간단한 제품부터

$products = Mage::getModel('catalog/product')->getCollection(); 
$products->addAttributeToSelect('*'); 
$products->addAttributeToFilter('status', 1);//enabled 
$products->addAttributeToFilter('price', array('gt' => 0));//price not 0 
//$products->addAttributeToFilter('visibility', 4); //catalog, search - comment out to show all items (configurable products simple product breakdowns) 

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); 

$prodIds=$products->getAllIds(); 
try { 
foreach($prodIds as $productId) { 
    $product = Mage::getModel('catalog/product'); 
    $product->load($productId); 

    // SIMPLE PRODUCTS 
    if($product->getTypeId() == 'simple') { 
     $prodName = trim($product->getName()); 

     $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($productId); 
     if(!$parentIds) 
      $parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($productId); 

     if($parentIds) {  
      $parentProd = Mage::getModel('catalog/product')->load($parentIds[0]);   
      /* 
      * do something if this product has a parent or do some checks against $parentProd 
      */ 
     } // end parent check 
    }//if SIMPLE 
} // foreach 

} catch(Exception $e) { 
    die($e->getMessage()); 
} 
1

을 일반적으로 Not Visible Individually의 가시성 값이 아마 컬렉션에 대한 가시성 필터를 추가하기에 충분해야 카탈로그에 제품의 가시성을 검사하는 것이 : 제품이의 일부로서 사용되는 경우 그 결과 제품 구성 제품의 일부 있다는 가능성이 상황에서

$collection->setVisibility(Mage::getModel('catalog/product_visibility')->getVisibleInCatalogIds()); 

, 당신은 확인하는 방법 Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild을 사용할 수 있습니다 구성 가능한 제품.