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

马根托韦尔。1.9.1.0:按数量和价格递减对产品进行分类

嵇昱
2023-03-14

我需要按数量和价格对产品进行分类,即所有类别的产品都应该按最大数量列出。最大数量的产品应该排在第一位,然后列出较低数量的产品。我通过在/app/code/core/mage/catalog/model/resource/product/collection.php中编写这段代码实现了这一点

public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
{
    if ($attribute == 'position') {
   /**** Sorting for quantity starts***************/         
        //join the stock status index table for the current website and check if the product is saleable and the qtu.
        $select = $this->getSelect();
        $select->joinLeft(
            array('stock_qty' => $this->getTable('cataloginventory/stock_status')),
            'e.entity_id = stock_qty.product_id AND stock_qty.website_id='.Mage::app()->getWebsite()->getId(),
            array(
                'salable' => 'stock_qty.stock_status',
                'qty' => 'stock_qty.qty'
            )
        );
        //get the reversed sorting
        //if by position ascending, then you need to sort by qty descending and the other way around
        $reverseDir = ($dir == 'ASC') ? 'DESC' : 'ASC';
        //this is optional - it shows the in stock products above the out of stock ones independent if sorting by position ascending or descending
        $this->getSelect()->order('salable DESC');
        //sort by qty
        $this->getSelect()->order('qty '.$reverseDir);
        return $this;      

/**** Sorting for quantity ends ***************/  

    } elseif($attribute == 'is_saleable'){
        $this->getSelect()->order("is_saleable " . $dir);
        return $this;
    }

    $storeId = $this->getStoreId();
    if ($attribute == 'price' && $storeId != 0) {
        $this->addPriceData();
        $this->getSelect()->order("price_index.min_price {$dir}");

        return $this;
    }

    if ($this->isEnabledFlat()) {
        $column = $this->getEntity()->getAttributeSortColumn($attribute);

        if ($column) {
            $this->getSelect()->order("e.{$column} {$dir}");
        }
        else if (isset($this->_joinFields[$attribute])) {
            $this->getSelect()->order($this->_getAttributeFieldName($attribute) . ' ' . $dir);
        }

        return $this;
    } else {
        $attrInstance = $this->getEntity()->getAttribute($attribute);
        if ($attrInstance && $attrInstance->usesSource()) {
            $attrInstance->getSource()
                ->addValueSortToCollection($this, $dir);
            return $this;
        }
    }

    return parent::addAttributeToSort($attribute, $dir);
}

现在我需要按价格递减来分类产品,即数量递减与价格递减

Product  Quantity Price
-------  -------- -------
  A         100   9000
  B         100   8000
  C         89    7000
  D         80    6000 

我还尝试转到系统>配置>目录>产品列表Sort by=Price。但这对我没有帮助。所以我在寻找解决方案,我认为解决方案是通过操纵这里的代码

$select = $this->getSelect();
        $select->joinLeft(
            array('stock_qty' => $this->getTable('cataloginventory/stock_status')),
            'e.entity_id = stock_qty.product_id AND stock_qty.website_id='.Mage::app()->getWebsite()->getId(),
            array(
                'salable' => 'stock_qty.stock_status',
                'qty' => 'stock_qty.qty'
            )
        );

请帮帮我。提前致谢

共有1个答案

万勇
2023-03-14

最后,我找到了解决方案:在按降序排序数量后添加这行代码==>$this->getselect()->order('price desc');

$select = $this->getSelect();
        $select->joinLeft(
            array('stock_qty' => $this->getTable('cataloginventory/stock_status')),
            'e.entity_id = stock_qty.product_id AND stock_qty.website_id='.Mage::app()->getWebsite()->getId(),
            array(
                'salable' => 'stock_qty.stock_status',
                'qty' => 'stock_qty.qty'
            )
        );
        //get the reversed sorting
        //if by position ascending, then you need to sort by qty descending and the other way around
        $reverseDir = ($dir == 'ASC') ? 'DESC' : 'ASC';
        //this is optional - it shows the in stock products above the out of stock ones independent if sorting by position ascending or descending
        $this->getSelect()->order('salable DESC');

        //sort by qty
        $this->getSelect()->order('qty '.$reverseDir);
        $this->getSelect()->order('price DESC');
        return $this;
 类似资料:
  • 我的elasticsearch索引中有几千个文档。文档有几个嵌套集合。其中之一是“变体”的嵌套集合。JSON结构文档之一是: 我的商店在一页上只显示了48种产品。我的索引总共有4800种产品,所以在我的商店里有100页。 我对按价格排序有一个问题。 我编写了一些elasticsearch查询(用于第一页): 我有第一个48个产品与他们的变体,但这种排序工作不是在我的索引中的所有产品变体。这种排序的

  • 在从可配置产品中获取一些数据时遇到了问题,基本上“标准”下拉选择菜单会在我的产品页面上正常地选择一些数据。 正如您所看到的,title中的attr是空白的,因为这是我需要拉入选项值的地方。magento为选项框提供的html如下所示: 我想我已经找到了我需要的价值所在的位置, App/code/core/mage/catalog/model/resource/product/type/config

  • 本文向大家介绍python根据京东商品url获取产品价格,包括了python根据京东商品url获取产品价格的使用技巧和注意事项,需要的朋友参考一下 京东商品详细的请求处理,是先显示html,然后再ajax请求处理显示价格。 1.可以运行js,并解析之后得到的html 2.模拟js请求,得到价格 再给大家分享一个京东价格的爬虫:

  • 我使用Woocommerce插件在wordpress中开发了购物车。我需要按产品价格在购物车订单中显示产品,请帮助我做到这一点 谢啦

  • 我需要找到产品的最低和最大价格,这样我就可以用它来设置我的价格过滤器的范围。我在catalog/model/layer/filter/price.php中使用了getMaxPriceInt()和getMinPriceInt()方法。但是返回的值基于'min_price'字段。 如何根据final_price找出集合中产品的最低和最高价格?也就是说,如果集合中有4个产品(我只登记需要的字段) get