Как сделать сортировку товара в My_Shop_Controller_Show

#
Как сделать сортировку товара в My_Shop_Controller_Show
Здравствуйте! Есть решение в "How to" чтобы выводились товары групп и подгрупп ИМ. http://www.hostcms.ru/documentation/modules/shop/frontend/show-subitems/
Как сделать сортировку товара по новизне.

Добавляю сортировку,но ничего не меняется:
->clearOrderBy()
->orderBy('shop_items.datetime', ''DESC');


Модератор
#
Re: Как сделать сортировку товара в My_Shop_Controller_Show
pd-art,
1. куда именно добавляете?
2. если отредактировать магазин, то в сортировке есть стандартная возможность выбрать сортировку по дате и направление сортировки.
#
Re: Как сделать сортировку товара в My_Shop_Controller_Show
HostCMS, вот так сработало:
->orderBy('shop_items.id', 'DESC');



class My_Shop_Controller_Show extends Shop_Controller_Show
{
    protected function _groupCondition()
    {
       $oShop = $this->getEntity();
    
       if ($this->group)
       {
          // если ID группы не 0, т.е. не корневая группа
          // получаем подгруппы
          $aSubGroupsID = $this->fillShopGroup($oShop->id, $this->group); // добавляем текущую группу в массив
          $aSubGroupsID[] = $this->group;

          $this->shopItems()
             ->queryBuilder()
             ->where('shop_items.shop_group_id', 'IN', $aSubGroupsID) // получаем все товары из подгрупп
                 ->clearOrderBy()
                   ->orderBy('shop_items.id', 'DESC');
       }
       else
       {
          $this->shopItems()
             ->queryBuilder()
             ->where('shop_items.shop_group_id', '=', 0)
                   ->clearOrderBy()
                     ->orderBy('shop_items.id', 'DESC');
       }

       return $this;
    }

    protected $_aGroupTree = array();

    public function fillShopGroup($iShopId, $iShopGroupParentId = 0, $iLevel = 0)
    {
       $iShopId = intval($iShopId);
       $iShopGroupParentId = intval($iShopGroupParentId);
       $iLevel = intval($iLevel);

       if ($iLevel == 0)
       {
          $aTmp = Core_QueryBuilder::select('id', 'parent_id')
             ->from('shop_groups')
             ->where('shop_id', '=', $iShopId)
             ->where('deleted', '=', 0)
             ->execute()->asAssoc()->result();

          foreach ($aTmp as $aGroup)
          {
             $this->_aGroupTree[$aGroup['parent_id']][] = $aGroup;
          }
       }

       $aReturn = array();

       if (isset($this->_aGroupTree[$iShopGroupParentId]))
       {
          foreach ($this->_aGroupTree[$iShopGroupParentId] as $childrenGroup)
          {
             $aReturn[] = $childrenGroup['id'];
             $aReturn = array_merge($aReturn, $this->fillShopGroup($iShopId, $childrenGroup['id'], $iLevel + 1));
          }
       }

       $iLevel == 0 && $this->_aGroupTree = array();

       return $aReturn;
    }
}

$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));

$Shop_Controller_Show = new My_Shop_Controller_Show($oShop);


Не знаю почему не срабатывало на
->orderBy('shop_items.datetime', 'DESC');
Модератор
#
Re: Как сделать сортировку товара в My_Shop_Controller_Show
pd-art,
боюсь вы делаете не то и не там.

Установка сортировки для инфоэлементов идет в _setShopItems(), попробуйте добавить в переопределенный класс

   /**
    * Set item's conditions
    * @return self
    */
   protected function _setShopItems()
   {
      parent::_setShopItems();
      
      $this->_Shop_Items
         ->queryBuilder()
         ->clearOrderBy()
         ->orderBy('shop_items.datetime', 'DESC');

      return $this;
   }
#
Re: Как сделать сортировку товара в My_Shop_Controller_Show
HostCMS, куда это добавлять? В код который я выше оставил?
Модератор
#
Re: Как сделать сортировку товара в My_Shop_Controller_Show
Внутрь
class My_Shop_Controller_Show extends Shop_Controller_Show
{
// ...
}
#
Re: Как сделать сортировку товара в My_Shop_Controller_Show
HostCMS, Извиняюсь...ступил. Когда из всех групп и подгрупп выводятся товары, они сортируются относительно сортировки групп. И на выходе кажется,что между собой они не совпадают. Я просто подумал,что у меня внутренняя сортировка не работает. А оказывается при данном подходе нужно следить еще и за сортировкой групп и подгрупп из которых товары выходят. В общем я думаю,что все правильно понял.

Жаль что нельзя сделать сортировку между ними.
Авторизация