Опционные свойства в виде выпадающих списков с сохранением добавления товара в корзину без перезагрузки(demodizzy)
Материал из Umicms
Версия от 15:33, 31 января 2014; Williwaw (обсуждение | вклад)
Актуально для версии 2.9.5
- Данное решение рассмотрено на примере интернет-магазина "Современный", шаблон demodizzy.
Задача:
- Необходимо, чтобы опционные свойства выводились в виде выпадающих списков и сохранилось добавление товара в корзину без перезагрузки.
Дело было в том, что js файл, который отвечает за добавление товара в корзину без перезагрузки обращается к элементам radiobutton, которые изначально описаны в шаблоне дизайна. Если изменить radiobutton на выпадающие списки, страница будет перезагружаться.
Решение:
- немного изменить basket.js(templates/demodizzy/js), а именно откорректировать функцию добавления в корзину:
site.basket.add = function(id, form, popup) {
var e_name, options = {};
if (form) {
var elements = jQuery('option:selected', form);
for (var i = 0; i < elements.length; i++) {
e_name = elements[i].id.replace(/^options\[/, '').replace(/\]$/, '');
options[e_name] = elements[i].value;
}
}
basket.putElement(id, options, this.replace(id));
if (popup) jQuery('#add_options_' + id).remove();
};
Были внесены следующие изменения:
- radio:checked было изменено на option:selected
- elements[i].name.replace заменено на elements[i].id.replace
- Внесем в него изменения:
<xsl:template match="price" mode="discounted-price">
<xsl:if test="original!=' ' ">
<span style="text-decoration: line-through">
<xsl:value-of select="concat(@prefix, ' ', original,' ', @suffix)" />
</span>
</xsl:if>
<xsl:value-of select="concat(@prefix, ' ', actual,' ', @suffix)" />
</xsl:template>
- Старая цена зачеркивается, если срабатывает условие, что original(старая цена) не пустой.
- Если не прописать данное условие, то, при отключении активности скидки, рядом с обычной ценой отобразится лишний зачеркнутый суффикс "руб".