У меня возникает эта странная проблема. Может кто-нибудь указать, что я делаю неправильно.Magento 2 Product Collection отображает запрос
Я хочу, чтобы отобразить продукты в категории связано с положением добавлено в другой таблице, со следующими столбцами
id, category_id, product_id, position
В моем модуле я продлевал \ Magento \ Каталог \ Block \ продукт \ ListProduct и \ Magento \ Каталог \ Block \ Продукт \ 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;
}
я получить правильный результат, но ПОЛНЫЙ запрос получает отображается на всех страницах каталога. Я проверил всюду в своем коде. Я ничего не печатаю в запросе. Лучшая часть, если я изменить
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 по умолчанию. но запрос больше не будет отображаться
Любая идея?