Часто бывает, что дополнительные свойства устанавляиваються не для товаров а для их модификаций ("размер", "цвет" итд), и в связи с этим встает задача организовать фильтр по доп. свойствам. В шестерке модификации успешно фильтруются и выводяться в списке товаров, но в нашем примере (а мне кажеться это типовой расклад) такое решение не подходит, тк в каталоге должны отображаться только родительские товары.
Все что я пока смог придумать - это подгружать родителей в 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);
Странный алгоритм, и к тому же ломает всю постраничную навигацию.
Вобщем мой вопрос к уважаемым форумчанам: как можно такую задачу решить по-человечески?