associatedItems(TRUE|FALSE) показывать сопутствующие товары для выбранных товаров, по умолчанию FALSE
Выведет в XML все сопутствующие у товаров которые в корзине. К примеру один и тот же товар может быть как сопутствующие ко многим товарам. И в XML попадает этот товар несколько раз.
nikolajgromkov писал(а):
select с [not(.=preceding::*)] - чтобы не повторялись, ибо у товаров сопутствующие могут пересекаться
Рабочее решение хорошее на стороне XSL, но по сути сам XSL процессор заедает на генерацию достаточно ресурсов. Всегда хочется как можно мало нагрузки отдавать процессору XSL, по этому решил одним из вариантов вытащить сопутствующие в корзине отдельным запросом и положить в контроллер корзины:
/* Начало сопутствующие товары*/
$aShop_Cart = Shop_Cart_Controller::instance()->getAll($oShop);
$items=[];
foreach ($aShop_Cart as $oShop_Cart)
{
$items[] = $oShop_Cart->shop_item_id;
}
if (count($items))
{
$oAssociatedXmlEntity = Core::factory('Core_Xml_Entity')->name('associated');
$Shop_Cart_Controller_Show->addEntity($oAssociatedXmlEntity);
$oShop_Items = $oShop->Shop_Items;
$oShop_Items
->queryBuilder()
->clearSelect()
->select('shop_items.*')
->join('shop_item_associated', 'shop_item_associated.shop_item_associated_id', '=', 'shop_items.id')
->where('shop_item_associated.shop_item_id', 'IN', $items)
->groupBy('shop_item_associated.shop_item_associated_id');
$oAssociates = $oShop_Items->findAll(FALSE);
foreach ($oAssociates as $oEntry)
{
$oAssociatedXmlEntity->addEntity(
$oEntry->clearEntities()
// Тут можно еще ограничить не нужные данные в XML ->addForbiddenTag('shop_producer')
);
}
}
/* Конец сопутствующие товары */