2009-11-10 9 views
25

Tengo el siguiente código para tomar una lista de los productosComprobación de si un producto Magento es un niño de un producto configurable

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

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

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

Mi pregunta es, ¿cómo no voy a repetir los productos que son 'simples', sino que pertenecen a un producto 'configurable' para padres. (por ejemplo, no muestre "Red Shirt Medium" ya que pertenece a "Red Shirt")

He descubierto que esta asociación vive en 'catalog_product_super_link' pero acabo de comenzar con Magento y desafortunadamente no lo hago saber cómo hacer el filtrado :)

Saludos muchachos,

Chris.

Respuesta

28

No conozco una forma directa de agregar esta condición a la colección, estaría interesado en tal solución también. Pero siempre se puede comprobar en el interior del bucle para cada producto:

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

Solución perfecta para encontrar identificadores principales de forma sencilla. Muchas gracias –

+2

_ "No conozco una forma directa de agregar esta condición a la colección" _ '$ collection-> getSelect()' y podemos usar [Zend_Db_Select] (http: //framework.zend .com/manual/1.12/en/zend.db.select.html) para crear una selección personalizada. Un '$ collection-> getTable ('catalog/product_super_link');' puede ser útil para las uniones. –

5

Hay una función llamada isConfigurable en la clase de producto.

Eso puede ser de ayuda para usted.

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

Creo que esto no funcionará, si el producto es simple, siempre será falso, pero el producto puede ser/no ser un niño. – JuLy

2

La forma más rápida podría ser la de comprobar si la visibilidad del producto se ajusta a "no visible individualmente", ya que los productos simples asociados con los productos configurables se fijan normalmente a esto. Desafortunadamente, no conozco la sintaxis exacta, pero espero que alguien más esté dispuesto a tocarlo.

5

He hecho algo similar para nuestro feed de google. Este fragmento de código es lo que uso para comprobar los productos de la herencia:

$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

Dado que los productos simples que forman parte de productos configurables por lo general tiene un valor de visibilidad de Not Visible Individually, probablemente lo suficiente añadir un filtro de visibilidad a la colección que comprueba la visibilidad de los productos en el catálogo:

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

en el caso poco probable de que los productos resultantes son parte de un producto configurable, se puede utilizar el método Mage_Catalog_Model_Product_Type_Configurable::getParentIdsByChild para comprobar si un producto se utiliza como parte de una producto configurable.

Cuestiones relacionadas