Если когда-то вы один раз ввели сопутствующие товары для определенного товара VirtueMart 2.0.18a, и хотите чтобы на страницах сопутствующих автоматически появлялись все остальные товары, которые вы когда-то связали, то для этого необходимо подправить код функции getProductCustomsFieldRelatedProducts, находящейся в файле \administrator\components\com_virtuemart\models\customfields.php. Нужно подменить тело else единственной управляющей конструкции if на следующий код:
$query2='SELECT cf.virtuemart_product_id
FROM #__virtuemart_product_customfields cf
JOIN #__virtuemart_customs c USING(virtuemart_custom_id) '.
'WHERE cf.custom_value ='.(int)$product->virtuemart_product_id.' AND c.field_type = "R" AND c.is_cart_attribute = 0';
$this->_db->setQuery ($query2);
if($productCustoms2 = $this->_db->loadObjectList ()){
$query3 = 'SELECT C.custom_value AS value,
CASE WHEN field.custom_value<>'.(int)$product->virtuemart_product_id.' THEN field.custom_value ELSE '.(int)$productCustoms2[0]->virtuemart_product_id.' END AS custom_value,
field.custom_price,
is_cart_attribute,
is_list,
field_type
FROM `#__virtuemart_customs` AS C
JOIN `#__virtuemart_product_customfields` AS field
ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
WHERE
field.virtuemart_product_id = '.(int)$productCustoms2[0]->virtuemart_product_id.'
AND C.field_type = "R"
AND is_cart_attribute = 0
ORDER BY virtuemart_customfield_id';
$this->_db->setQuery ($query3);
if( ! $productCustoms3 = $this->_db->loadObjectList ()) return array();
//иначе
$row = 0;
foreach ($productCustoms3 as & $field) {
$field->display = $this->displayProductCustomfieldFE ($product, $field, $row);
$row++;
}
return $productCustoms3;
}
//иначе
return array();
Единственно что теперь еще надо доработать для удобства использования функционала сопутствующих товаров, так это сделать так, чтобы зайдя из админки в любой товар редактировать группу сопутствующих товаров вне зависимости от того, в карточке какого товара она изначально создавалась. Если у вас есть идея как это можно сделать, предлагайте.