Вот решение которое работает для меня (в Observer модуля):
$collection = $observer->getCollection(); $collection->getSelect() ->joinLeft( array('_inventory_table'=>$collection->getTable('cataloginventory/stock_item')), '_inventory_table.product_id = e.entity_id', array('is_in_stock', 'manage_stock') ); $collection->joinField( 'inventory_qty', 'cataloginventory_stock_item', 'qty', 'product_id=entity_id' )->setOrder('inventory_qty', 'desc');
По умолчанию при сортировке по «позиции» все товары с нулевым количеством перемещаются в конец списка. Но с другими вариантами сортировки (по имени, цене) этот код не работает и все продукты отображаются вместе. Кто-нибудь может помочь с этим вопросом?