Как программно исключить из коллекции товары, не подлежащие публикации на витрине?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
  • Тема закрыта
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

03.11.2010 16:28

$collection
	->addAttributeToFilter(
		'status'
		,
		array ('in' => Mage::getSingleton('catalog/product_status')->getVisibleStatusIds())
	)
;


#2 hell_dude
  • Группа: Заблокирован
  • Сообщений: 11
  • Регистрация: 05.09.2012

17.09.2012 15:40

подскажите пожалуйста
появилась необходимость показать все товары невидимые на витрине
при наследовании Grid которая показывает все товары, добавил условие, как у вас показано, только для вывода невидимых товаров
$collection->addAttributeToFilter('entity_id',array ('nin'=>$NotId));

до этого момента, все фильтры работали, а после этого изменения все записи выводятся на одну страницу(без лимита по 20, 50, 100 и т.д.) и не работают фильтры

подскажите пожалуйста в чем проблема

protected function _prepareCollection()
    {
		$collection = Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('sku')
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('attribute_set_id')
            ->addAttributeToSelect('type_id');
			
        parent::_prepareCollection();
        $this->getCollection();
		
		$ids = Mage::getModel('core/resource')->getConnection('core_read')->fetchAll(
				'SELECT e.entity_id
				FROM `catalog_product_flat_1` AS `e`
				JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.visibility IN(2, 4) AND cat_index.category_id IN 
				(
					SELECT entity_id FROM catalog_category_entity WHERE entity_id NOT IN(806,807,2288) AND path NOT LIKE "%/806/%" AND path NOT LIKE "%/807/%" AND path NOT LIKE "%/2288/%"
				)
				JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = "1" AND price_index.customer_group_id = 0
				GROUP BY e.entity_id'
				);
		$i=0;
		foreach($ids as $id)
		{
			$NotId[$i++] = $id['entity_id'];
		}
		
		$collection->addAttributeToFilter('entity_id',array ('nin'=>$NotId));

		$this->setCollection($collection);
        return $this;
    }


#3 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

17.09.2012 15:42

Одна тема — один вопрос.

Поделиться темой: