Выдано 134538 лицензий

При использовании фильтра слетает группировка

При использовании фильтра слетает группировка
#
DmitryOpalev
20
В ТДС магазина добавил группировку товаров по доп свойствам (чтобы не выводить лишнюю номенклатуру; модификации не используются)
Цитата:
if ($Shop_Controller_Show->item == 0) {
   $Shop_Controller_Show->itemsForbiddenTags(array('text'));

   // Producers
   if (Core_Array::getGet('producer_id')) {
      $iProducerId = intval(Core_Array::getGet('producer_id'));
      $Shop_Controller_Show->producer($iProducerId);
   }

   if (Core_Array::getGet('filter') || Core_Array::getGet('sorting')) {

      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('filter')->value(1)
      );

      // Sorting
      $sorting = intval(Core_Array::getGet('sorting'));

      ($sorting == 1 || $sorting == 2)
         && $Shop_Controller_Show->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');

      $sorting == 3 && $Shop_Controller_Show->orderBy('shop_items.name', 'ASC');

      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('sorting')->value($sorting)
      );

      // Prices
      $Shop_Controller_Show->setFilterPricesConditions($_GET);

      // Additional properties
      $Shop_Controller_Show->setFilterPropertiesConditions($_GET);
   }

   $Shop_Controller_Show
    ->shopItems()
    ->queryBuilder()
    ->clearGroupBy()
    ->groupBy('shop_filter5.property370')
    ->groupBy('shop_filter5.property371');

}

Код с группировкой по двум доп. свойствам в последней строчке.
Если просто открывать каталог, все работает как надо. Если же применить фильтры, то группировка слетает.
Непосредственном перед вызовом $Shop_Controller_Show->show() смотрел содержимое $Shop_Controller_Show->shopItems()->queryBuilder()getGroupBy(); – группировка присутствует (даже при использовании фильтра).
Как понять в чем может быть проблема?
Re: При использовании фильтра слетает группировка
#
hostcms
Модератор
16594
DmitryOpalev,
Включаете запросы и смотрите итоговый запрос https://www.hostcms.ru/documentation/step-by-step/top-panel/sql/
Также в контроллере показа для обработки фильтров могут очищаться условия группировки и добавляться свои группировки, необходимые для обработки фильтра.
Re: При использовании фильтра слетает группировка
#
DmitryOpalev
20
Рассказываю как решил проблему.
Сравнив два запроса (при котором все работает и при котором не работает) обнаружил, что группировка идет по полю GROUP BY dataTmpId.
Анализ стека вызовов ничего не дал. Тогда поиском по серверу нашел, где происходит изменение группировки:
modules/shop/controller/show.php
Цитата:
if ($this->modificationsGroup)
{
$this->_Shop_Items
->queryBuilder()
->select(array(Core_QueryBuilder::expression('IF(`shop_items`.`modification_id` > 0, `shop_items`.`modification_id`, `shop_items`.`id`)'), 'dataTmpId'))
->clearGroupBy()
->groupBy('dataTmpId');
}

В ТДС магазина же присутствовал блок, который как раз при использовании фильтра и вызывал срабатывание условия:
Цитата:
// При фильтрации модификации выводятся на уровне товаров
if (count($Shop_Controller_Show->getFilterProperties()) || count($Shop_Controller_Show->getFilterPrices()) || $Shop_Controller_Show->producer)
{
   $Shop_Controller_Show->modificationsList(TRUE)->modificationsGroup(TRUE);
}

Комментирование этого блока решила проблему.
Re: При использовании фильтра слетает группировка
#
hostcms
Модератор
16594
DmitryOpalev,
это не решение проблемы, это глупость. Нельзя править контроллер, во первых сломается заложенная в него логика, во вторых обновление затрёт эти изменения.
Re: При использовании фильтра слетает группировка
#
DmitryOpalev
20
hostcms,
правится ТДС только магазина. Про внесение изменений в контроллер речи нет.
Авторизация