Magento使用观察器分割集合,除非更好的方法

lymgl2op  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(150)

我几乎完成了Amazon Affiliate扩展的构建。在我的目录中,Amazon产品使用名为AmazonAffiliate的属性集,目录中的所有其他普通产品只使用分配给它们的任何属性集。用户可以将普通产品添加到购物车中,也可以将Amazon产品添加到购物车中。
普通产品vs.亚马逊产品的分离出现在购物车屏幕上。我想在购物车页面上有2个项目表。一个有亚马逊产品,一个有普通产品。
通过使用事件core_collection_abstract_load_before的观察者,我能够从购物车中过滤出亚马逊的产品,总数,所有的东西。我喜欢它只用一个功能就把它们拉出来的方式。
下面是观察者函数:

public function excludeAmazonProductsFromMainCart($observer)
{
  $collection = $observer->getEvent()->getCollection();
  if($collection instanceof Mage_Sales_Model_Resource_Quote_Item_Collection) {
    $attributeSetId = Mage::getModel('eav/entity_setup','core_setup')
                        ->getAttributeSetId(Mage_Catalog_Model_Product::ENTITY,CommerceExtensions_AmazonAffiliate_Model_Module::ATTRIBUTE_SET_NAME);
    $productTable = Mage::getSingleton('core/resource')->getTableName('catalog/product');
    $collection->getSelect()->joinLeft(array('product_table'=>$productTable),'`main_table`.`product_id`=`product_table`.`entity_id`',array('attribute_set_id'));
    $collection->getSelect()->where('`product_table`.`attribute_set_id` != '.$attributeSetId);                   
  }
  return $collection;       
}

现在,问题是我需要另一个集合来获取上面observer函数中排除的项目,这样,amazon cart表将包含这些产品,而普通magento产品cart表将包含我的普通catalog产品,我似乎无法将集合一分为二。
如果它不能被分成两个,我有我需要的亚马逊产品集合创建为CommerceExtensions_AmazonAffiliate_Model_Mysql4_Quote_Collection。
这里是我正在尝试做的事情的截图。我知道这是可以做到的,因为有人在卖具有相同类型功能的扩展。

提前感谢您的任何帮助!

hpcdzsge

hpcdzsge1#

为了能够从您的集合(CommerceExtensions_AmazonAffiliate_Model_Myql4_Quote_Collection)中获得价值,您必须使用自己的模板和区块。
1.在结帐时制作自己的模板,可以是commerceextension/checkout. phtml。并像这样做-〉amazonItemCollection()
1.您可以将变量从块(CommerceExtensions_AmazonAffiliate_Block_Checkout_Cart)传递到该模板。编写函数- get amazonItemCollection()。在此函数中,您应该能够示例化您的集合
1.在连接块和模板的layout/checkout.xml文件中添加以下xml
我还没有测试过这个代码。但是它应该工作很少的试验/错误。

相关问题