2014-02-21 3 views
1

Я почти закончил строительство амазонского филиала. В моем каталоге продукты Amazon используют набор атрибутов с именем AmazonAffiliate, все остальные обычные продукты в каталоге используют только то, что назначается для них. Люди могут добавлять как обычные товары в корзину, так и продукты амазонки в корзину.Magento Использование Observer для разделения коллекций Если лучший способ

Разделение обычных продуктов против продуктов amazon входит в экран тележки. То, что я хочу на странице корзины, - это две таблицы элементов. Один с продуктами Amazon и один с обычным.

С помощью наблюдателя на мероприятие core_collection_abstract_load_before, я смог отфильтровывать продукты Amazon из корзины, итоговые данные, все. Мне нравится, как он вытаскивает их с помощью одной функции.

Вот функция наблюдателя:

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;  
} 

Теперь проблема в том, что я хочу другую коллекцию, которая захватывает предметы, которые были исключены в функции наблюдателя выше. Таким образом, таблица корзины с амазонами будет иметь эти продукты, и в обычной корзине для продукта magento будут представлены мои обычные каталоги. Я просто не могу разбить коллекцию на две части.

И в случае, если он не может быть разбит на две части, у меня есть коллекция продуктов amazon, которую мне нужно создать как CommerceExtensions_AmazonAffiliate_Model_Mysql4_Quote_Collection. Я просто не могу настроить его на новый блок.

Вот скриншот того, что я пытаюсь сделать. Я знаю, что это можно сделать, потому что есть люди, продающие расширения с одинаковой функциональностью.

enter image description here

Заранее спасибо за любую помощь!

ответ

0

Для того чтобы получить значение в своей коллекции (CommerceExtensions_AmazonAffiliate_Model_Mysql4_Quote_Collection), вы должны использовать свой собственный шаблон и блокировать.

  1. Сделайте собственный шаблон при оформлении заказа, возможно, в торговом расширении/checkout.phtml. И Do like $ this-> amazonItemCollection()
  2. Вы можете передать переменную этому шаблону из своего блока (CommerceExtensions_AmazonAffiliate_Block_Checkout_Cart). Функция записи - получить amazonItemCollection(). В рамках этой функции вы должны быть в состоянии создать экземпляр вашей коллекции
  3. Добавить следующий XML в файл макета/checkout.xml, которые соединяют ваш блок и шаблон

Я не проверял этот код. Однако он должен работать с несколькими пробными ошибками.

+0

шаблон не является проблемой. Его данные передаются в шаблон, который я пытаюсь изменить. Я пытаюсь разделить коллекцию на две пригодные для использования части, которые я могу перекачивать в два отдельных блока. –

+0

Я хочу предложить вам написать пользовательскую функцию для получения коллекции продуктов amazon в вашем ресурсе, назовите это из своего блока и передайте этот продукт вашему представлению. Что вы сделали для фильтрации продукта Amazon, это хорошо. –

+0

Теперь я создал вторую коллекцию и просто отфильтровал все обычные продукты и сохранил продукты amazon.Тем не менее, чтобы дойти до блока, чтобы продолжить использовать тот же файл шаблона, он проходит через несколько моделей, прежде чем он попадет в блок. На этом этапе я стараюсь избегать дублирования всех моделей, через которые он проходит. Ошибки, которые я получаю сейчас, - isVisibleInSiteVisibility() для не-объекта. Я преследую эту вещь повсюду. –