У меня есть требование отображать товары категории в двух списках - один для товаров на складе, другой для товаров на складе.
я использую
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection()
чтобы отфильтровать мою коллекцию товаров по товарам, имеющимся в наличии, но, по-видимому, не существует эквивалентного метода для фильтрации товаров, которых нет в наличии, - я посмотрел на Mage_CatalogInventory_Model_Stock
модель, в которой определен вышеупомянутый метод.
Я видел следующий пример для извлечения товаров со склада:
$collection->joinField(
'is_in_stock',
'cataloginventory/stock_item',
'is_in_stock',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
)
->addAttributeToFilter('is_in_stock', array('eq' => 0));
... но, конечно, это не единственный или лучший способ добиться этого?
В вашем примере не учитывается значение «use config».
Давайте посмотрим, как
addInStockFilterToCollection
работает:Хорошо, это делегирование другому методу:
Это объединяет таблицу инвентаризации со следующими условиями:
Продукт не использует глобальную конфигурацию И имеет «управлять складом», установленным на «да», И есть в наличии
ИЛИ
Продукт не использует глобальную конфигурацию, и для параметра « Управление запасами» установлено значение «Нет».
ИЛИ
Вы должны инвертировать условия следующим образом:
Продукт не использует глобальную конфигурацию И имеет «управлять складом», установленным на «да», И отсутствует на складе
ИЛИ
Продукт использует глобальную конфигурацию И глобальная конфигурация "управлять складом = да" И отсутствует на складе
Объяснение: Вы берете только те условия, когда in_stock фактически проверен, и меняете сравнение на 0. Условия, в которых in_stock не проверяется ("manage stock" = "no"), означают, что товар всегда есть в наличии, независимо от состояния запаса. поэтому мы не включаем их в наш запрос "нет в наличии".
Тогда это ваш код:
источник
Mage_CatalogInventory_Model_Stock
модель?$this
. Это также может быть простой функцией. Я хотел бы создать отдельный модуль и сделать его вспомогательным методом (или, если вам нужно это для другого модуля, добавить его к вспомогательному модулю)Следующий фрагмент кода вернет вам продукты категории, которые имеют статус «Включить», «Видимость», «Каталог», «Поиск» и Наличие на складе «Нет в наличии».
источник
Вы можете попробовать это.
Или вы можете попробовать это
Не уверен 100%.
источник