2017-02-13 4 views
0

У меня возникает эта странная проблема. Может кто-нибудь указать, что я делаю неправильно.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 по умолчанию. но запрос больше не будет отображаться

Любая идея?

ответ

0

Думаю, вам следует удалить -> getSelect() и снова проверить.