Вопрос №2 в итоге реализовал так.
1) Список комплектующих, которые надо добавить в корзину вместе с основным товаром, передаются в виде строкового массива через запятую:
(function(jQuery){
// Функции без создания коллекции
jQuery.extend({
addIntoCart: function(path, shop_item_id, count){
var items = CheckB('group1');
$.clientRequest({path: path + '?add=' + shop_item_id + '&compl=' + items + '&count=' + count, 'callBack': $.addIntoCartCallback, context: $('#little_cart')});
return false;
},
addIntoCartCallback: function(data, status, jqXHR)
{
$.loadingScreen('hide');
jQuery(this).html(data);
},
addCompare: function(path, shop_item_id, object){
$(object).toggleClass('current');
$.clientRequest({path: path + '?compare=' + shop_item_id, 'callBack': function(){
$.loadingScreen('hide');
}, context: $('#little_cart')});
$('#compareButton').show();
return false;
}
});
})(jQuery);
function CheckB(CheckBox){
var value = [];
CheckBox = document.getElementsByName(CheckBox);
for (var i = 0; i < CheckBox.length; i++){
if (CheckBox[i].checked){
value.push(CheckBox[i].value);
}
}
return value;
}
2) В ТДС "корзина" функция добавления товара в корзину модифицируется следующим образом:
if (Core_Array::getRequest('add'))
{
$shop_item_id = intval(Core_Array::getRequest('add'));
$compl_array = Core_Array::getRequest('compl');
if ($shop_item_id)
{
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->shop_item_id($shop_item_id)
->quantity(Core_Array::getRequest('count', 1))
->add();
if ($compl_array)
{
$compl_array=explode(',',$compl_array);
foreach($compl_array as $item)
{
$oShop_Cart_Controller
->shop_item_id($item)
->quantity(Core_Array::getRequest('count', 1))
->add();
}
}
}
Остается вопрос, который пока никак не получается решить: как реализовать вывод связанных товаров с группировкой по категориям?