2

私は Magento 1.7.0.2 を使用しており、 /app/code/core/Mage/Catalog/Block/Product/list.php で使用している次のコード行があります。

$this->_productCollection = $layer->getProductCollection()
                    ->joinField(
                        'inventory_in_stock', 
                        'cataloginventory_stock_item', 
                        'is_in_stock', 
                        'product_id=entity_id',
                        'is_in_stock>=0', 
                        'left')
                    ->setOrder('inventory_in_stock','desc');

位置と名前でソートすると、在庫切れの製品が最後になります。しかし、価格で並べ替えると、在庫切れの製品は通常の順序ではなくなります。

価格順でも品切れ商品を最後にするにはどうすればいいですか?

4

3 に答える 3

0

答えを見つけた

このコードを追加する必要があります:

$this->getSelect()->joinLeft(
            array('_inventory_table'=>$this->getTable('cataloginventory/stock_item')),
            "_inventory_table.product_id = e.entity_id",
            array('is_in_stock', 'manage_stock')
        );
        $this->addExpressionAttributeToSelect('on_top',
        '(CASE WHEN (((_inventory_table.use_config_manage_stock = 1) AND (_inventory_table.is_in_stock = 1)) OR  ((_inventory_table.use_config_manage_stock = 0) AND (1 - _inventory_table.manage_stock + _inventory_table.is_in_stock >= 1))) THEN 1 ELSE 0 END)',
         array());
        $this->getSelect()->order('on_top DESC');

直前

if ($attribute == 'price' && $storeId != 0) {

app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php 内

または、Magento 1.7.0.0 + を使用している場合は app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php で

于 2013-04-10T10:55:29.630 に答える