2009-11-10 26 views
25

ben 'basit' ama ait ürünler yankı DEĞİL nasıl,denetleme

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

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

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

Sorum şu Ürünlerin listesini kapmak için aşağıdaki kodu var bir 'yapılandırılabilir' ürüne. (örneğin, "Kırmızı Gömlek Ortamı", "Kırmızı Gömlek" olarak gösterilmiyor)

Bu ilişkinin 'catalog_product_super_link' adresinde çalıştığını öğrendim ama sadece Magento ile yeni başladım ve maalesef filtreleme :)

Şerefe çocuklar,

Chris nasıl yapılacağını biliyorum.

cevap

28

Bu durumu koleksiyona eklemenin doğrudan bir yolunu bilmiyorum, ben de böyle bir çözümle ilgilenirim. Ama her zaman her ürün için döngü içinde kontrol edebilirsiniz: ürün sınıfında isConfigurable adında bir işlevi yoktur

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

Basit bir şekilde ebeveyn kimliklerini bulmak için mükemmel bir çözüm. Çok teşekkürler –

+2

_ "Bu koşulu toplama için doğrudan bir yol bilmiyorum" _ "$ collection-> getSelect()" ve [Zend_Db_Select] (http: //framework.zend) .com/manual/1.12/tr/zend.db.select.html) özel seçim yapmak için. '$ Collection-> getTable (' catalog/product_super_link '); 'birleştirmeler için yararlı olabilir. –

5

bu.

Bu size yardımcı olabilir.

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

Bence bu işe yaramaz, eğer ürün basit bir ürün ise, bu her zaman yanlış geri döner, ancak ürün bir çocuk olabilir/olmayabilir. – JuLy

2

hızlı yolu ürünün görünürlük için "Değil Görünür Bireysel" ayarlanırsa yapılandırılabilir ürünleriyle ilişkili basit ürünler genellikle bu ayarlı olduğundan, kontrol etmek olabilir. Ne yazık ki kesin sözdizimini bilmiyorum ama umarım ki içinde ahmak istekli başka biri var!

5

Google beslememize benzer bir şey yaptım. Bu kod alıntı ben ürünlerin devralma kontrol için kullandığınız: yapılandırılabilir ürünlerin parçası olan basit ürünler yana

$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

genellikle Not Visible Individually bir görünürlük değeri, muhtemelen koleksiyonuna bir görünürlük filtresi eklemek için yeterli olması katalogda ürünlerin görünürlüğü denetler o: bir ürünün bir parçası olarak kullanılması halinde ortaya çıkan ürünler yapılandırılabilir ürünün bir parçası olduğunu olası durumda ise

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

, denetlemek yöntemini Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild kullanabilirsiniz yapılandırılabilir ürün.