

Ниже описан пример реализации в карточке товара выбора модификации товара по каким-либо дополнительным полям из выпадающего списка. Например, есть товар "Куртка", с различными модификациями по свойствам: "Цвет", "Размер".

Добавляем 2 дополнительных поля с xml-именам color и size, создаем необходимые модификации (в редакциях, в которых отсутствует модуль списков, доступно только ручное создание модификаций).
В XSL-шаблоне карточки товара добавляем:
<!-- Модификации -->
<xsl:if test="count(modifications/item) > 0">
<table border="0" style="">
<xsl:if test="count(modifications/item/property[@xml_name='color'])>0">
<tr>
<td>Цвет:</td><td><select id="pcolor" style="width: 100px;">
<xsl:for-each select="modifications/item/property[@xml_name='color']">
<xsl:variable name="val" select="value"/>
<xsl:if test="not(parent::*/following-sibling::item/property[@xml_name='color']/value[text() = $val])">
<option value="{value}"><xsl:value-of select="value" /></option>
</xsl:if>
</xsl:for-each>
</select></td>
</tr>
</xsl:if>
<xsl:if test="count(modifications/item/property[@xml_name='size'])>0">
<tr>
<td>Размер:</td><td><select id="psize" style="width: 100px;">
<xsl:for-each select="modifications/item/property[@xml_name='size']">
<xsl:variable name="val" select="value"/>
<xsl:if test="not(parent::*/following-sibling::item/property[@xml_name='size']/value[text() = $val])">
<option value="{value}"><xsl:value-of select="value" /></option>
</xsl:if>
</xsl:for-each>
</select></td>
</tr>
</xsl:if>
</table>
</xsl:if>
<!-- Модификации -->
<xsl:if test="count(modifications/item) > 0">
<xsl:for-each select="modifications/item">
<input type="hidden" id="mod{@id}" value="{property[@xml_name='size']/value}{property[@xml_name='color']/value}"/>
</xsl:for-each>
</xsl:if>
В условии test="not(parent::*/following-sibling::item/property[@xml_name='color']/value[text() = $val])" проверка на наличие дублей.
Далее добавляем js-код для поиска и замены id товара на id модификации, соответствующей выбранным свойствам:
<script type="text/javascript">
<![CDATA[
function getMod() {
var m=$('#psize').val()+$('#pcolor').val();
var newid = 0;
$('input.modif').each(
function() {
if ($(this).val() == m) {
newid = $(this).attr('id').replace('mod','');
$('a.cart_ln').each(
function() {
h = $(this).attr('href');
$(this).attr('href',h.replace(/item_id=([0-9]+)/i,'')+'item_id='+newid);
}
);
}
}
);
}
]]>
</script>
Модифицируем строку:
<a href="{/shop/path}cart/?action=add&item_id={@id}" onclick="getMod();">Купить</a>
От 08 декабря 2010, 1105 просмотров.
Ниже описан пример реализации в карточке товара выбора модификации товара по каким-либо дополнительным полям из выпадающего списка.