2009-11-10 36 views
25

Tôi có đoạn code sau để lấy một danh sách các sản phẩmKiểm tra nếu một sản phẩm Magento là con của một sản phẩm cấu hình

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

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

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

Câu hỏi của tôi là, làm thế nào tôi có thể KHÔNG vang sản phẩm mà là 'đơn giản' nhưng thuộc với sản phẩm 'có thể định cấu hình' của cha mẹ. (ví dụ: không hiển thị "Áo sơ mi màu đỏ trung bình" vì nó thuộc về "Áo sơ mi màu đỏ")

Tôi đã phát hiện ra rằng hiệp hội này sống trong 'catalog_product_super_link' nhưng tôi chỉ mới bắt đầu với Magento và không may biết cách thực hiện lọc :)

Chúc mừng các bạn,

Chris.

Trả lời

28

Tôi không biết cách trực tiếp để thêm điều kiện này vào bộ sưu tập, tôi cũng muốn được giải thích như vậy. Nhưng bạn luôn có thể kiểm tra bên trong vòng lặp cho mỗi sản phẩm:

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

Giải pháp hoàn hảo để tìm id mẹ đơn giản. Cảm ơn rất nhiều –

+2

_ "Tôi không biết cách trực tiếp để thêm điều kiện này vào bộ sưu tập" _ '$ collection-> getSelect()' và chúng tôi có thể sử dụng [Zend_Db_Select] (http: //framework.zend .com/manual/1.12/en/zend.db.select.html) để tạo tùy chọn. Một '$ collection-> getTable ('catalog/product_super_link');' có thể hữu ích cho các phép nối. –

5

Có chức năng được gọi là isConfigurable trong lớp sản phẩm.

Điều đó có thể giúp bạn.

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

Tôi nghĩ rằng điều này sẽ không hoạt động, nếu sản phẩm là một sản phẩm đơn giản, điều này sẽ luôn trả về false, nhưng sản phẩm có thể là/không phải là một đứa trẻ. – JuLy

2

Cách nhanh nhất có thể là kiểm tra xem chế độ hiển thị của sản phẩm có được đặt thành "Không nhìn thấy được cá nhân" hay không. Thật không may tôi không biết cú pháp chính xác nhưng hy vọng một người khác sẵn sàng kêu vang trong đó!

5

Tôi đã thực hiện điều gì đó tương tự cho nguồn cấp dữ liệu của Google. trích đoạn mã này là những gì tôi sử dụng để kiểm tra các sản phẩm thừa kế:

$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

Kể từ sản phẩm đơn giản là một phần của các sản phẩm cấu hình thường có một giá trị tầm nhìn của Not Visible Individually, nó có lẽ cũng đủ để thêm một bộ lọc tầm nhìn đến bộ sưu tập rằng séc cho tầm nhìn của các sản phẩm trong danh mục:

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

trong bối cảnh không chắc rằng các sản phẩm thu được là một phần của một sản phẩm cấu hình, bạn có thể sử dụng phương pháp Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild để kiểm tra nếu một sản phẩm được sử dụng như một phần của một sản phẩm có thể định cấu hình.

Các vấn đề liên quan