当前位置: 首页 > 知识库问答 >
问题:

Magento:在类别页面中最后显示的缺货产品

徐昊焜
2023-03-14

我使用的是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');

在进行位置和名称排序时,缺货产品排在最后。但在进行价格排序时,缺货产品处于正常的顺序而不是持久的。

我怎样才能使缺货的产品在排序后的价格上保持持久呢?

共有1个答案

曹凯泽
2023-03-14

很好找到亚历克斯!提示:如果希望避免更改核心文件(并可能将其变成模块),可以将其添加到事件侦听器中,如下所示(在1.8.1.0上测试):

/**
 * Fires before a product collection is loaded
 *
 * @param Varien_Event_Observer $observer
 */
public function catalog_product_collection_load_before($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->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()
    );
    $collection->getSelect()->order('on_top DESC');
    // Make sure on_top is the first order directive
    $order = $collection->getSelect()->getPart('order');
    array_unshift($order, array_pop($order));
    $collection->getSelect()->setPart('order', $order);
}

编辑:从catalog_product_collection_apply_limitations_before改回catalog_product_collection_load_before,并固定订单部件优先级。

 类似资料:
  • 我有一个问题与Magento(CE1.9.0.1)和缺货产品显示在类别页面。配置看起来很好,我已经刷新了缓存,索引也是最新的。有一个配置,其中有一个简单的产品分配。可配置产品设置为管理库存,简单产品也设置为管理库存,数量为0,缺货。我有同样的设置在另一个Magento网站,当一个简单的产品被设置为0和缺货,可配置的产品将成为缺货,并不显示在类别上。 null null 简单产品(截图) 所有内容都

  • 与随机显示产品的客户网站存在问题 “此产品目前缺货且不可用。” 问题是我们没有打开库存跟踪,所有的产品都应该一直有库存。 当我进入WordPress管理员并单击产品的更新按钮(不做任何更改)时,消息就会消失,“添加到购物车”按钮会按原样显示。不幸的是,这个问题在将来会在这些项目上重复出现,为了解决这个问题,我必须再次更新产品(同时在WooCommerce设置中单击update可以暂时解决这个问题)

  • 我想在magento静态块中显示子类别。 例如,该页面上有女性类别。我想展示女性的所有子类别,以及这个子类别。 女性页面上的结构将是 我已经实现了一些代码,但它没有显示子类别: 以上代码的输出http://prntscr.com/6wcfov

  • 我有一个问题与WooCommerce/WordPress模板。我以前什么都有。 我的文件中有以下代码: 这段代码为产品类别选择了我的自定义归档模板,并在主页上购物。突然,它不再起作用了。似乎WordPress不能使用自定义文件从了。单个产品页面和产品类别出于某种原因使用。我通过在我的主题文件夹上创建文件single-product.php来修复单个产品页面的问题。这个工作正常,但是我不能对WooC

  • 我正在尝试创建一个页面与木商产品类别在标签。 我的选项卡菜单正在工作,但我需要在每个选项卡内容区域中运行一个查询到相应的类别。 但当我单击每个选项卡时,选项卡内容显示了类别中不属于当前选项卡的所有帖子。我没有得到正在出现的问题,请帮助我解决问题 下面是我的代码: 问题是它显示每个类别的所有post。我粘在上面了..请帮帮我

  • [编辑:它实际上是在functions.php中添加代码并省略代码WC文件中的更改时工作的。重要提示:它只在ONE属性存在时起作用。然而,当有2个属性(大小 由于2.0 WooCommerce要么隐藏缺货的产品变体(一个明显的问题,因为客户没有办法知道它们的存在),要么将它们显示为库存变体(也是一个问题,因为客户会系统地失望地发现变体是缺货的-点击购买后的股票)。 该线程包括一个灰色解决方案,以消