Magento使用Observer分割集合,除非使用更好的方法

Magento使用Observer分割集合,除非使用更好的方法,magento,collections,block,amazon,affiliate,Magento,Collections,Block,Amazon,Affiliate,我几乎完成了建立亚马逊附属扩展。在我的目录中,amazon产品使用名为AmazonaAffiliate的属性集,目录中的所有其他普通产品只使用碰巧分配给它们的任何属性集。人们可以向购物车添加常规产品,也可以向购物车添加亚马逊产品 购物车屏幕上出现了常规产品与亚马逊产品的分离。我在购物车页面上想要的是两个项目表。一个是亚马逊的产品,一个是普通的 通过使用事件的观察者,我能够从购物车中过滤出亚马逊的产品、总数和一切。我喜欢它用一个功能把它们拉出来的方式 以下是观察者函数: public functi

我几乎完成了建立亚马逊附属扩展。在我的目录中,amazon产品使用名为AmazonaAffiliate的属性集,目录中的所有其他普通产品只使用碰巧分配给它们的任何属性集。人们可以向购物车添加常规产品,也可以向购物车添加亚马逊产品

购物车屏幕上出现了常规产品与亚马逊产品的分离。我在购物车页面上想要的是两个项目表。一个是亚马逊的产品,一个是普通的

通过使用事件的观察者,我能够从购物车中过滤出亚马逊的产品、总数和一切。我喜欢它用一个功能把它们拉出来的方式

以下是观察者函数:

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购物车表将包含这些产品,而普通magento购物车表将包含我的普通目录产品。我似乎不能把这些收藏品一分为二

如果不能一分为二,我需要创建一个亚马逊产品集合,名为CommerceExtensions\u AmazonaAffiliate\u Model\u Mysql4\u Quote\u collection。我就是不能把它放在我的新街区

这是我试图做的一个截图。我知道这是可以做到的,因为有人销售具有相同功能的扩展


提前感谢您的帮助

能够从您的收藏中获得价值 (CommerceExtensions\u AmazonaAffiliate\u Model\u Mysql4\u Quote\u Collection),您必须使用自己的模板和块

  • 签出时制作自己的模板,可以是commerceextension/checkout.phtml。你喜欢$this->amazonimcollection()吗
  • 您可以将变量从块(CommerceExtensions\u AmazonaAffiliate\u块\u Checkout\u Cart)传递到该模板。Write函数-get amazonimcollection()。在这个函数中,您应该能够实例化您的集合
  • 在layout/checkout.xml文件中添加以下xml,用于连接块和模板


  • 我还没有测试过这段代码。但是,它应该很少尝试/出错。

    模板不是问题所在。我正试图更改输入模板的数据。我试图将集合分成两个可用部分,我可以将其分为两个独立的块。我的意思是建议您编写一个自定义函数,在资源中获取亚马逊产品的集合,从您的块调用该函数,并将这些产品传递给您的视图。你为过滤掉亚马逊产品所做的很好。我现在所做的是创建第二个集合,然后过滤掉所有常规产品并保留亚马逊产品。但是,为了继续使用同一模板文件,要将其一直传递到块,它必须在到达块之前通过多个模型。在这一点上,我试图避免复制它通过的所有模型。我现在遇到的错误是非对象上的isVisibleInSiteVisibility()。我到处都在关注这件事,最后我留下了观察家,以确保亚马逊产品完全远离magento购物车,并最终创建了一个全新的区块添加到结帐屏幕中。它实际上只需要显示亚马逊的产品,因为购买这些产品的人将直接在亚马逊上结账。