Фильтр по доп. свойствам = родительские товары вместо модификаций

#
Фильтр по доп. свойствам = родительские товары вместо модификаций
Часто бывает, что дополнительные свойства устанавляиваються не для товаров а для их модификаций ("размер", "цвет" итд), и в связи с этим встает задача организовать фильтр по доп. свойствам. В шестерке модификации успешно фильтруются и выводяться в списке товаров, но в нашем примере (а мне кажеться это типовой расклад) такое решение не подходит, тк в каталоге должны отображаться только родительские товары.
Все что я пока смог придумать - это подгружать родителей в xml отдельно:


$parents = array();
$oXmlParents = Core::factory('Core_Xml_Entity')->name('parent_items');
//$child_groups - массив который содержит id конкретной группы и всех ее подгрупп
//Делаю выборку товаров с учетом переданного фильтра (он устанавливается выше в ТДС)
$res = $Shop_Controller_Show->shopItems()->findAll();

foreach($res as $item){
   if($item->modification_id AND $item->modification_id != 0){
      //поскольку мне не нужно дублировать товары-родители, я их id складываю в массив и проверяю его каждый раз
      if(!in_array($item->modification_id, $parents)){
         $parents[] = $item->modification_id;
         $parent_item = Core_Entity::factory('Shop_Item', $item->modification_id);
         if(in_array($parent_item->shop_group_id, $child_groups)){
            $oXmlParents->addEntity($parent_item->clearEntities());
            $parents[] = $parent_item->id;
         }
      }
   }
}

//добавляю родителей в отдельную xml-ноду, потом в шаблоне вывожу их на ряду с остальными товарами
$Shop_Controller_Show->addEntity($oXmlParents);

//Убираю модификации из выборки
$Shop_Controller_Show->shopItems()
->queryBuilder()
->where('modification_id', '=', 0);

Странный алгоритм, и к тому же ломает всю постраничную навигацию.
Вобщем мой вопрос к уважаемым форумчанам: как можно такую задачу решить по-человечески?
Модератор
#
Re: Фильтр по доп. свойствам = родительские товары вместо модификаций
d-ze,
Чтобы для модификации вывести родительский товар вы можете добавить хук на getXml() для  товара, там проверять если модификация, то грузить в модификацию в отдельный тег.

А так, конечно, нужно менять контроллер показа под ваши нужды, чтобы фильтровать только по модификациям, а выводить родительские товары модификаций.
#
Re: Фильтр по доп. свойствам = родительские товары вместо модификаций
Первое что я сделал - это повесил обработчик на событие shop_item.onBeforeGetXml но это не метод:
- появляется множество дублирующихся товаров в xml (каждая модификация тащит с сабой своего родителя, не смотря на то что он уже есть в xml). эту проблему я решил путем пристранных манипуляций в шаблоне.
- постраничная навигация сразу отменяется
- нагрузка на систему очень большая, у меня несколько раз вообще превышался timeout

А что контроллер ковырять, что ТДС -  я разницы не вижу. все равно пока непонятно как вписывать результаты в limit товаров на страницу.
Авторизация