Есть несколько вариантов.
самый оптимальный - это выкинуть со списков все лишние кнопки купить и т.д. - они ни к чему т.к. все прут в саму карточку товара - 99.9% покупок сорвешается именно там.
что бы это понять достаточно отслеживать поведение пользователей в вебвизор.
другое дело опт - там люди уже знают что им нужно и тыкают всё в списках и в этом случаее карточки товара как на рознице это пустая трата пространства страницы. там всё должно быть иначе.
Т.е. таким образом карточка товара в списках становиться общей - объеденённой - ладно к ним выбор цвета , размера и т.д. вывели и цену.. ок - это инфа. КТ становиться максимально на сколько ей положено быть информативной. и так не нужно изобретать велосипеды..
Но. в любом случае вы все будете делать всё по своему.
А значит, нужно изобретать велосипеды...
.. я пощёл таким путем в одном из магазов - выкинул все лишние кнопки - и скрыл что то из товаров с использованием модуля так.
Возьмем шаблон Революшн (там решал этот момент) - там есть скрытие товаров которого 0 ( вернее оно такие товары перемещает в конец списка и внешне обесцвечивает карточки.
Т.к. у нас в одной карточке несколько товаров - если нет родителя то карточка вместе с содержимыми товарами улетает в конец списка...
Теперь заменяем часть кода где идет запрос к количеству на иное поле - допустим jan/
Проходимся скриптом по наличию в товарах и если есть хотя бы 1 товар в дочерних товарах то у родителя прописываем в выбранное поле 1
если всех нет в наличии прописываем 0.
ставим это дело на крон например дергать каждый час или по какому нить событию и забываем.
Но родитель это родитель товара и т.к. вы (я сейчас не только о вас а о большинстве ) всё равно выводите туда кнопку купить.
я пока не вижу решения.., незнаю, может @mpn2005 чего придумает..
мне в голову чет ничего не лезит по этому поводу..
Опять же нужно смотреть индивидуально... и дорабатывать.. каждому индивидуально..
т.к. всяких модулей и шаблонов ленинская библиотека.