Опционные свойства в виде выпадающих списков с сохранением добавления товара в корзину без перезагрузки(demodizzy) — различия между версиями
Материал из Umicms
Williwaw (обсуждение | вклад)  | 
				Williwaw (обсуждение | вклад)   | 
				||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 14: | Строка 14: | ||
==Решение:==  | ==Решение:==  | ||
| − | :немного изменить basket.js(templates/demodizzy/js), а именно   | + | :немного изменить basket.js(templates/demodizzy/js), а именно откорректировать функцию добавления в корзину:  | 
<source lang="javascript">  | <source lang="javascript">  | ||
| Строка 33: | Строка 33: | ||
</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>