Magento 2产品系列显示查询

时间:2017-02-13 17:43:49

标签: php mysql magento product magento2

我有这个奇怪的问题,有人可以指出我做错了什么。

我希望在与另一个表中添加的位置相关的类别中显示产品,并使用以下列

id, category_id, product_id, position

在我的模块中,我扩展了\ Magento \ Catalog \ Block \ Product \ ListProduct 和\ Magento \ Catalog \ Block \ Product \ ProductList \ Toolbar

在ListProduct文件中,我重写_getProductCollection方法并添加以下内容

$joinConditions = array();
            $joinConditions[] = 'e.entity_id = rs.product_id';
            $joinConditions[] = 'rs.category_id = ' . $category->getId();
            $this->_productCollection->getSelect()->joinLeft(
                    ['rs' => 'my_new_table'], implode(' AND ', $joinConditions), ['position']
            );

在工具栏中我覆盖了setCollection方法

switch ($this->getCurrentOrder())
        {
            case 'position':
                if ($this->getCurrentDirection() == 'desc')
                {
                    $this->_collection
                            ->getSelect()
                            ->order('rs.position DESC');
                } elseif ($this->getCurrentDirection() == 'asc')
                {
                    $this->_collection
                            ->getSelect()
                            ->order('rs.position ASC');
                }
                break;

            default:

                if ($this->getCurrentOrder())
                {
                    $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
                }
                break;
        }

我得到了正确的结果,但是所有目录页面都显示了FULL查询。我在我的代码中检查过各处。我不打算在任何地方打印查询。最好的部分是如果我改变

case 'position':
                    if ($this->getCurrentDirection() == 'desc')
                    {
                        $this->_collection
                                ->getSelect()
                                ->order('rs.position DESC');
                    } elseif ($this->getCurrentDirection() == 'asc')
                    {
                        $this->_collection
                                ->getSelect()
                                ->order('rs.position ASC');
                    }
                    break;

case 'position':
                    if ($this->getCurrentDirection() == 'desc')
                    {
                        $this->_collection
                                ->getSelect()
                                ->order('position DESC');
                    } elseif ($this->getCurrentDirection() == 'asc')
                    {
                        $this->_collection
                                ->getSelect()
                                ->order('position ASC');
                    }
                    break;

在工具栏类中,删除' rs'来自订单功能。订单将恢复为magento默认位置。但查询不再显示

任何想法?

1 个答案:

答案 0 :(得分:0)

我认为,您应该从中删除 - > getSelect()并再次检查。