Magento - Как отфильтровать коллекцию товаров, используя фильтры 2 категорий?

Кто-нибудь знает, есть ли способ дважды запустить коллекцию товаров через фильтр категорий? У меня есть категория «Избранные», которая скрыта, и к которой я добавляю товары, чтобы их можно было использовать в качестве рекомендуемых товаров. В настоящее время я получаю свою коллекцию продуктов следующим образом:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter('36');
    $_productCollection->load();

Это прекрасно работает на домашней странице, но на страницах категорий мне нужно сначала отфильтровать результаты по текущей категории, а затем по избранной категории:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter('15')
    ->addCategoryFilter('36');
    $_productCollection->load(); 

К сожалению, кажется, что вы не можете выполнять фильтры двух категорий, не редактируя основные файлы, что я не хочу делать.

Есть идеи, как обойти это?

Я подумал, что мог бы, возможно, взять 2 набора продуктов отдельно, один отфильтрованный по текущей категории, а другой по избранной категории, а затем с помощью PHP stristr найти продукты, находящиеся в обоих, и использовать их, например,

  if (stristr($featProductCollection, $currProductCollection))

У кого-нибудь есть идеи? Я думаю, что мне нужно вернуть, возможно, только SKU продуктов, возможно, в списке через запятую. Но я не уверен, что это лучший способ сделать это, и это кажется немного глупым.

7 голосов | спросил Marlon Creative 13 52009vEurope/Moscow11bEurope/MoscowFri, 13 Nov 2009 00:02:14 +0300 2009, 00:02:14

2 ответа


0

Ладно, на самом деле сам разбирался с небольшой помощью от кого-то еще:

    $_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter($_category)
    ->addAttributeToFilter('category_ids',array('finset'=>'36'))
    $_productCollection->load();

Где $ _category - текущая категория.

ответил Marlon Creative 13 52009vEurope/Moscow11bEurope/MoscowFri, 13 Nov 2009 01:33:23 +0300 2009, 01:33:23
0

Не знаю почему, но в 1.4 это не работает, мое решение было не очень красивым, но хорошо работало с большой базой данных:

$select  = $collection->getSelect();
$select->where('(SELECT COUNT(1) FROM `catalog_category_product_index` AS `cat_index`
WHERE cat_index.product_id=e.entity_id AND cat_index.category_id
IN('.implode(',',$categories).') AND cat_index.store_id='.$collection->getStoreId().') >= '.count($categories));
ответил Igor R. 19 52010vEurope/Moscow11bEurope/MoscowFri, 19 Nov 2010 15:38:42 +0300 2010, 15:38:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132