После взвешивания всех за и против решили все же остановиться на варианте с выводом через Select.
Asl, ОГРОМНОЕ СПАСИБО ЗА КОД! Все работает!
Однако мы решили его слегка модифицировать под свои нужды.
1. В данном коде не выводится доп. свойство родителя, а только модификаций. Для вывода доп. свойства в select добавили еще одну опцию:
<option value="{@id}" selected="selected"><xsl:value-of select="property_value[tag_name='vkus']/value"/> (<xsl:value-of disable-output-escaping="yes" select="rest"/> шт.)</option>
2. Кроме того, надо не забыть и о товарах без доп. свойств. Для этого добавили условие:
<xsl:choose>
<xsl:when test="property_value[tag_name='vkus']/value != 0 and rest != 0">
Вывод добавления в корзину из примера выше
</xsl:when>
<xsl:otherwise>
Стандартный вывод добавления в корзину </xsl:otherwise></xsl:choose>
3. Также необходимо в корзине отображать ссылку не на модификацию, а на родителя. Для этого также небольшое условие:
<xsl:choose>
<xsl:when test="shop_item/modification_id != 0">
<a href="{shop_item/shop_item/url}">
<xsl:value-of disable-output-escaping="yes" select="shop_item/shop_item/name"/>
</a>
</xsl:when>
<xsl:otherwise>
<a href="{shop_item/url}">
<xsl:value-of disable-output-escaping="yes" select="shop_item/name"/>
</a>
</xsl:otherwise>
</xsl:choose>
4. В корзине также крайне желательно отображать значение доп. свойства. Для этого необходимо в код ТДС Корзины (в самом начале) внести след. изменения:
$oShop = $Shop_Cart_Controller_Show
->itemsProperties(TRUE)
->itemsPropertiesList(FALSE)
->getEntity();
Это позволит вывести значения доп. свойств в XML Корзины. А дальше в XSL они выводятся аналогично карточке товара.
Кстати, вопрос по ходу - чем вызвано то, что по умолчанию значения свойств и список свойств имеют значения FALSE и TRUE? Обычно нужны как раз значения, а не весь список свойств, т. е. ровно наоборот.
Отключение вывода списка свойств позволило сократить размер XML на 10%. И это с учетом того, что у нас в список пока занесено всего несколько значений. Но это так, мысли вслух. Не обижайтесь, если что
5. Вместо смены цены (обычно она одинаковая для наших модицикаций), решили динамически изменять остаток товара на складе.
И вот тут проблема. Скрипт работает не полностью, поскольку в select добавлен option родителя. Соответственно при выборе сначала option модификации кол-во выводится корректно, однако потом, при выборе option родителя не выводится ничего.
Видимо, надо как-то подкорректировать скрипт изменения цены. Попробовал пару идей, но что-то не вышло.
Буду благодарен, если кто поможет!
P. S. Еще одна проблема в моем способе - если товар-родитель закончился, а товар-модификация - нет. Проблема и с карточкой товара будет, и с катологом. Самый простой способ: поменять местами значения доп. свойств родителя и модификации. Но тут есть ощущение, что могут возникнуть проблемы с уже оформленными заказами
Тогда возможно, лучше сделать по способу Asl. Но что тогда выводить в каталоге? Одну из модификаций? Как-то муторно в реализации. И то же много вопросов. Надо еще подумать сейчас...
P. P. S. Еще надо поправить шаблоны финального шага корзины, писем пользователю и администратору.
И как-то добавить вывод доп. свойства товара в заказе.