web-dev-qa-db-ja.com

Magento製品が構成可能な製品の子であるかどうかの確認

製品のリストを取得するために次のコードがあります

$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」は「RedShirt」に属しているため、表示しないでください)

この関連付けは「catalog_product_super_link」にあることがわかりましたが、Magentoを使い始めたばかりで、残念ながらフィルタリングの方法がわかりません:)

乾杯みんな、

クリス。

26
chris.rickard

この条件をコレクションに追加する直接的な方法がわかりません。そのようなソリューションにも興味があります。ただし、各製品のループ内はいつでも確認できます。

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

私は私たちのグーグルフィードのために同様のことをしました。このコードの抜粋は、製品の継承を確認するために使用するものです。

$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());
}
6
deepmark

製品クラスにはisConfigurableという関数があります。

それはあなたの助けになるかもしれません。

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

構成可能な製品に関連付けられた単純な製品は通常これに設定されているため、最も簡単な方法は、製品の可視性が「個別に表示されない」に設定されているかどうかを確認することです。残念ながら、正確な構文はわかりませんが、チャイムを鳴らしてくれる人がいることを願っています。

2
cfx

構成可能な製品の一部である単純な製品の可視性の値は通常Not Visible Individuallyであるため、カタログ内の製品の可視性をチェックする可視性フィルターをコレクションに追加するだけで十分です。

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

結果の製品が構成可能な製品の一部であるというまれな状況では、メソッドMage_Catalog_Model_Product_Type_Configurable::getParentIdsByChildを使用して、製品が構成可能な製品の一部として使用されているかどうかを確認できます。

1
Aad Mathijssen