Опционные свойства в виде выпадающих списков с сохранением добавления товара в корзину без перезагрузки(demodizzy) — различия между версиями
Материал из Umicms
Williwaw (обсуждение | вклад) (Новая страница: «category:Верстка в XSLTКатегория:Модуль Интернет магазинКатегория:Модуль Каталог '''Акту…») |
Williwaw (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 14: | Строка 14: | ||
==Решение:== | ==Решение:== | ||
− | :немного изменить basket.js(templates/demodizzy/js), а именно | + | :немного изменить basket.js(templates/demodizzy/js), а именно откорректировать функцию добавления в корзину: |
− | <source lang=" | + | <source lang="javascript"> |
+ | |||
+ | 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(); | ||
+ | }; | ||
</source> | </source> | ||
− | : | + | Были внесены следующие изменения: |
+ | |||
+ | *radio:checked было изменено на option:selected | ||
+ | *elements[i].name.replace заменено на elements[i].id.replace | ||
+ | |||
+ | |||
+ | :Шаблоны вывода опционных свойств изменим следующим образом(templates/demodizzy/xslt/modules/catalog/object-view.xsl): | ||
<source lang="xml"> | <source lang="xml"> | ||
− | <xsl:template match=" | + | <xsl:template match="property" mode="table_options"> |
− | <xsl: | + | <table class="object"> |
+ | <tr> | ||
+ | <th> | ||
+ | <xsl:value-of select="concat(title, ':')" /> | ||
+ | </th> | ||
+ | <td> | ||
+ | <select id="options[{@name}]" name="options[{@name}]"> | ||
+ | <xsl:apply-templates select="value/option" mode="table_options" /> | ||
+ | </select> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | </xsl:template> | ||
− | |||
− | |||
− | + | <xsl:template match="option" mode="table_options"> | |
− | + | <option value="{object/@id}" name="options[{../../@name}]" id="options[{../../@name}]"> | |
− | + | <xsl:value-of select="object/@name" /> | |
− | + | </option> | |
</xsl:template> | </xsl:template> | ||
</source> | </source> | ||
− | |||
− | |||
− |
Текущая версия на 15:38, 31 января 2014
Актуально для версии 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
- Шаблоны вывода опционных свойств изменим следующим образом(templates/demodizzy/xslt/modules/catalog/object-view.xsl):
<xsl:template match="property" mode="table_options">
<table class="object">
<tr>
<th>
<xsl:value-of select="concat(title, ':')" />
</th>
<td>
<select id="options[{@name}]" name="options[{@name}]">
<xsl:apply-templates select="value/option" mode="table_options" />
</select>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="option" mode="table_options">
<option value="{object/@id}" name="options[{../../@name}]" id="options[{../../@name}]">
<xsl:value-of select="object/@name" />
</option>
</xsl:template>