2

Magento チェックアウト/カートで、6 つの特定の属性セットの製品が Magento カートに追加されているかどうかを確認したいと思います。

以下の関数を作成して、これらの属性セット名の製品ビュー ページをチェックしましたが、チェックアウト/カート内のアイテムに対して同じチェックを行うにはどうすればよいですか?

$attribute_set = Mage::getModel('eav/entity_attribute_set')->load( $_product->getAttributeSetId() ); 
$attributeset_name = $attribute_set->getAttributeSetName();
if ($attributeset_name =="Sko" or $attributeset_name =="beklaedning" or $attributeset_name =="Banz_solhat" or $attributeset_name =="Soltoj" or $attributeset_name =="solhat" or $attributeset_name =="fodtoj") { 
    echo "<b>Fragt</b>: <span style='color:red'>Fri Fragt p&aring; varen samt resten af ordren</span><br>"; 
}

よろしく、ジェスパー

4

1 に答える 1

4
$attributeSetNames = array('Sko', 'beklaedning', 'Banz_solhat', 'Soltoj', 'solhat', 'fodtoj');

$quote = Mage::getSingleton('checkout/session')->getQuote();
$itemCollection = Mage::getModel('sales/quote_item')->getCollection();
$itemCollection->getSelect()
    ->joinLeft( 
        array('cp' => Mage::getSingleton('core/resource')->getTableName('catalog/product')), 
        'cp.entity_id = main_table.product_id', 
        array('cp.attribute_set_id'))
    ->joinLeft( 
        array('eas' => Mage::getSingleton('core/resource')->getTableName('eav/attribute_set')), 
        'cp.attribute_set_id = eas.attribute_set_id', 
        array('eas.attribute_set_name'))
;
$itemCollection->setQuote($quote);

foreach($itemCollection as $item) {
    if (in_array($item->getData('attribute_set_name'), $attributeSetNames)) {
       //... Match
    }
}

Alternatively

Use the attribute set ids instead of names. This would avoid any potential issues with wording and also clean the code up a little…

$attributeSetIds = array(1, 2, 3, 4, 5, 6);

$quote = Mage::getSingleton('checkout/session')->getQuote();
$itemCollection = Mage::getModel('sales/quote_item')->getCollection();
$itemCollection->getSelect()
    ->joinLeft( 
        array('cp' => Mage::getSingleton('core/resource')->getTableName('catalog/product')), 
        'cp.entity_id = main_table.product_id', 
        array('cp.attribute_set_id'))
;
$itemCollection->setQuote($quote);

foreach($itemCollection as $item) {
    if (in_array($item->getData('attribute_set_id'), $attributeSetIds)) {
       //... Match
    }
}
于 2012-09-09T16:01:37.847 に答える