2016-03-30 15 views
0

Lets sagen, ich habe ein Produkt, das in drei verschiedenen Kategorien gefunden werden kann, z. ID 104, 115 und 126.Magento: Produkt Sammlung von gemeinsamen mehrere Kategorien

Jetzt möchte ich eine Produktkollektion erhalten, die aus Produkten besteht, die auch in allen drei Kategorien gefunden werden sollten. Dies bedeutet, dass ein Produkt mit der Cat-ID 104 und 115 nicht in der Sammlung sein sollte, da 126 fehlt.

Wie mache ich das? :-)

Antwort Ape Antwort:

Versucht Ihr Ansatz. Der erste Teil meines Codes ist wie folgt:

 $_year = $_product->getBbYear(); 
     $_yearInterval = $this->getYearInterval(); 
     $_minYear = $_year - $_yearInterval; 
     $_maxYear = $_year + $_yearInterval; 

     $_minPopularityScore = $this->getMinPopularityScore(); 

     $categories = $_product->getCategoryIds(); 

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

     // EXCLUDE PRODUCT FROM COLLECTION 
     $collection->addAttributeToFilter('entity_id', array('nin' => $_product->getId())); 

     // BUILD PRIMARY COLLECTION 
     if (!$_fallback) { 
      foreach ($categories as $catid) { 
       $collection->addAttributeToFilter('category_id', array('finset' => $catid)); 
      } 

      // FILTER COLLECTION BASED ON RELEASE YEAR 
      $collection->addAttributeToFilter('bb_year', array('gt' => $_minYear)); 
      $collection->addAttributeToFilter('bb_year', array('lt' => $_maxYear)); 

      // FILTER COLLECTION BASED ON POPULARITY SCORE 
      $collection->addAttributeToFilter('bb_popularity_score', array('gt' => $_minPopularityScore)); 

     // BUILD SECONDARY COLLECTION ON FALLBACK 
     } 

jedoch, sobald ich die Schleife hinzufügen und mehrere Filter auf category_id fügt hinzu, wird die Seite nicht machen. Allerdings bekomme ich keine excecptions und auch Systemprotokoll ist für keine Hilfe ...

Antwort

0

Sie können über die Kategorie des Produkt-IDs durchlaufen und ein Filter für jede Kategorie hinzufügen:

foreach ($product->getCategoryIds() as $id) { 
    $collection->addAttributeToFilter('category_id', array('finset' => $id)); 
} 

von addAttributeToFilter() Aufruf mehrere Male, erstellen Sie eine AND Bedingung

+0

Bitte siehe aktualisierte Antwort :) – EibergDK