如何在Prestashop中将数量设定为缺货

时间:2015-03-05 08:52:57

标签: prestashop prestashop-1.6

我希望当我的产品数量等于1时,产品缺货(而不是数量等于0时)。 可能吗 ? 怎么样?

2 个答案:

答案 0 :(得分:0)

在PrestaShop 1.6中(经过测试并确认在v1.6.0.14中工作),您可以通过以下方法完成此操作,其中网站将始终显示可用库存数量,即实际数量最小值。如果您有6个库存,此修改将更改您的网站以向您的客户报告5个库存,当您只有1个库存时,客户将看到该产品的数量为0并标记为缺货。

  1. 将文件/classes/stock/StockAvailable.php复制/override/classes/stock/StockAvailable.php

  2. 编辑文件/override/classes/stock/StockAvailable.php,如下所示。

  3. 第357-380行是函数AvailableStock::getQuantityAvailableByProduct(),它通常会像这样读取(格式可能略有不同):

    public static function getQuantityAvailableByProduct( $id_product, 
                             $id_product_attribute = null, $id_shop = null ) {
      if( $id_product_attribute === null ) $id_product_attribute = 0;
      $skey = 'StockAvailable::getQuantityAvailableByProduct_' . (int)$id_product . '-' .
        (int)$id_product_attribute . '-' . (int)$id_shop;
      if( !Cache::isStored( $key )) {
        $query = new DbQuery();
        $query->select( 'SUM(quantity)' );
        $query->from( 'stock_available' );
        if( $id_product !== null ) $query->where( 'id_product = ' . (int)$id_product );
        $query->where( 'id_product_attribute = ' . (int)$id_product_attribute );
        $query = StockAvailable::addSqlShopRestriction( $query, $id_shop );
        Cache::store( $key, (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( $query ));
      }
      return Cache::retrieve( $key );
    }
    

    将以关键字return开头的函数的最后一行替换为以下内容:

      $iStockQty = Cache::retrieve( $key );
      if( $iStockQty > 0 ) $iStockQty--;
      return $iStockQty;
    
    1. 删除文件/cache/class_index.php,以便Prestashop自动重新创建此文件,同时考虑新的覆盖文件。

答案 1 :(得分:0)

我还在StockAvailable.php中找到方法self::removeProductFromStockAvailable($id_product)来做类似的事情。