Здравствуйте.
Зайдите в раздел Сайт - Редактор шаблонов - Товар найдите:
{% FOR goods_modifications_properties %}
<div class="goodsDataMainModificationsBlockProperty">
<!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
{% FOR values %}
<!-- Если это первый элемент в списке -->
{% IF goods_modifications_properties.values.first %}
<strong>{goods_modifications_properties.NAME}:</strong><br />
<select name="form[properties][]">
{% ENDIF %}
<option value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}selected="selected"{% ENDIF %}>{goods_modifications_properties.values.NAME}</option>
<!-- Если это последний элемент в списке -->
{% IF goods_modifications_properties.values.last %}
</select>
{% ENDIF %}
{% ENDFOR %}
</div>
<div class="clear"></div>
{goods_modifications_properties.index | is_divided("2","","")}
{% ENDFOR %}
замените на:
{% FOR goods_modifications_properties %}
<td class="goodsDataMainModificationsBlockProperty">
<!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
{% FOR values %}
<!-- Если это первый элемент в списке -->
{% IF goods_modifications_properties.values.first %}
<span class="goodsDataMainModificationsRadio">
<strong>{goods_modifications_properties.NAME}:</strong>
{% ENDIF %}
<div><input type="radio" name="form[properties][{goods_modifications_properties.ID}]" value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}checked="checked"{% ENDIF %} /> {goods_modifications_properties.values.NAME}</div>
{% IF goods_modifications_properties.values.last %}
</span>
{% ENDIF %}
{% ENDFOR %}
</td>
{goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
{% ENDFOR %}
Далее зайдите в шаблон main.js - найдите:
// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
$(obj).each(function(i){
properties[i] = parseInt($(this).val());
});
return properties.sort(function(a,B){return a - b}).join('_');
}
var
// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'),
// Запоминаем блоки с информацией по модификациям, для ускорения работы
goodsDataModifications = $('div.goodsDataMainModificationsList');
// Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
function updateVisibility (y) {
// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
goodsDataProperties.each(function(j){
// Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
if( j != y ) {
// Проходим по всем значениям текущего свойства модификации товара
$(this).find('option').each(function(){
// Записываем временный массив свойств, которые будем использовать для проверки существования модификации
var checkProperties = new Array();
$(goodsDataProperties).each(function(i){
checkProperties[i] = parseInt($(this).val());
});
// Пытаемся найти модификацию соответствующую выбранным значениям свойств
checkProperties[j] = parseInt($(this).attr('value'));
// Собираем хэш определяющий модификацию по свойствам
slug = checkProperties.sort(function(a,B){return a - b}).join('_');
// Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет.
if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) {
$(this).attr('disabled', true);
// Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный.
} else {
$(this).attr('disabled', false);
}
});
}
});
}
// Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность.
// Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать
updateVisibility (0);
// Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций
updateVisibility (1);
//var goodsDataProperties = $('.goodsDataForm [name="form[properties][]"]');
// Изменение цены товара при изменении у товара свойства для модификации
goodsDataProperties.each(function(y){
$(this).change(function(){
var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
modificationBlock = $('.goodsDataMainModificationsList[rel="'+slug+'"]'),
modificationId = parseInt(modificationBlock.find('[name="id"]').val()),
modificationArtNumber = modificationBlock.find('[name="art_number"]').val(),
modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()),
modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(),
modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()),
modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(),
modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()),
modificationDescription = modificationBlock.find('.description').html(),
modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()),
modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(),
modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(),
modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(),
modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(),
goodsModificationId = $('.goodsDataMainModificationId'),
goodsPriceNow = $('.goodsDataMainModificationPriceNow'),
goodsPriceOld = $('.goodsDataMainModificationPriceOld'),
goodsAvailable = $('.goodsDataMainModificationAvailable'),
goodsAvailableTrue = goodsAvailable.find('.available-true'),
goodsAvailableFalse = goodsAvailable.find('.available-false'),
goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'),
goodsArtNumber = goodsArtNumberBlock.find('span');
goodsCompareAddButton = $('.goodsDataCompareButton.add');
goodsCompareDeleteButton = $('.goodsDataCompareButton.delete');
goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock');
// Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
if(modificationBlock.length) {
// Цена товара
goodsPriceNow.html(modificationPriceNowFormated);
// Старая цена товара
if(modificationPriceOld>modificationPriceNow) {
goodsPriceOld.html(modificationPriceOldFormated);
} else {
goodsPriceOld.html('');
}
// Есть ли товар есть в наличии
if(modificationRestValue>0) {
goodsAvailableTrue.show();
goodsAvailableFalse.hide();
// Если товара нет в наличии
} else {
goodsAvailableTrue.hide();
goodsAvailableFalse.show();
}
// Если товар есть в списке сравнения
if(modificationIsHasInCompareList>0) {
goodsCompareAddButton.hide();
goodsCompareDeleteButton.show();
// Если товара нет в списке сравнения
} else {
goodsCompareAddButton.show();
goodsCompareDeleteButton.hide();
}
// Покажем артикул модификации товара, если он указан
if(modificationArtNumber.length>0) {
goodsArtNumberBlock.show();
goodsArtNumber.html(modificationArtNumber);
// Скроем артикул модификации товара, если он не указан
} else {
goodsArtNumberBlock.hide();
goodsArtNumber.html('');
}
// Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
if(modificationDescription.length > 0) {
goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>');
} else {
goodsModDescriptionBlock.hide().html();
}
// Идентификатор товарной модификации
goodsModificationId.val(modificationId);
} else {
alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
}
// Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
updateVisibility(y);
});
});
замените на:
// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
var reset_arr = new Array();
$(obj).find('input[type="radio"]').each(function(i){
if($(this).is(':checked')){
properties[i] = parseInt($(this).val());}
});
for(var i in properties) {
if(properties[i]) {
reset_arr.push(properties[i]);
}
}
return reset_arr.sort(function(a,B){return a - b}).join('_');
}
var
// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
goodsDataProperties = $('.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio'),
// Запоминаем блоки с информацией по модификациям, для ускорения работы
goodsDataModifications = $('div.goodsDataMainModificationsList');
// Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
function updateVisibility (y) {
// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
goodsDataProperties.each(function(j){
// Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
if( j != y ) {
// Проходим по всем значениям текущего свойства модификации товара
$(this).find('input[type="radio"]').each(function(){
// Записываем временный массив свойств, которые будем использовать для проверки существования модификации
//var checkProperties = new Array();
/*$(goodsDataProperties).each(function(i){
if($(this).is(':checked'))
checkProperties[i] = parseInt($(this).val());
});*/
// Пытаемся найти модификацию соответствующую выбранным значениям свойств
//checkProperties[j] = parseInt($(this).attr('value'));
// Собираем хэш определяющий модификацию по свойствам
//slug = checkProperties.sort(function(a,B){return a - b}).join('_');
slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties);
// Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет.
if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) {
$(this).attr('disabled', 'disabled');
// Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный.
} else {
$(this).removeAttr('disabled');
}
});
}
});
}
// Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность.
updateVisibility (0);
// Изменение цены товара при изменении у товара свойства для модификации
goodsDataProperties.each(function(y){
$(this).find('input[type="radio"]').click(function(){
var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
modificationBlock = goodsDataModifications.filter('[rel="'+slug+'"]'),
modificationId = parseInt(modificationBlock.find('[name="id"]').val()),
modificationArtNumber = modificationBlock.find('[name="art_number"]').val(),
modificationPriceNow = parseFloat(modificationBlock.find('[name="price_now"]').val()),
modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(),
modificationPriceOld = parseFloat(modificationBlock.find('[name="price_old"]').val()),
modificationPriceOldFormated = modificationBlock.find('.price_old_formated').html(),
modificationRestValue = parseFloat(modificationBlock.find('[name="rest_value"]').val()),
modificationDescription = modificationBlock.find('.description').html(),
modificationMeasureId = parseInt(modificationBlock.find('[name="measure_id"]').val()),
modificationMeasureName = modificationBlock.find('[name="measure_name"]').val(),
modificationMeasureDesc = modificationBlock.find('[name="measure_desc"]').val(),
modificationMeasurePrecision = modificationBlock.find('[name="measure_precision"]').val(),
modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(),
goodsModificationId = $('.goodsDataMainModificationId'),
goodsPriceNow = $('.goodsDataMainModificationPriceNow'),
goodsPriceOld = $('.goodsDataMainModificationPriceOld'),
goodsAvailable = $('.goodsDataMainModificationAvailable'),
goodsAvailableTrue = goodsAvailable.find('.available-true'),
goodsAvailableFalse = goodsAvailable.find('.available-false'),
goodsArtNumberBlock = $('.goodsDataMainModificationArtNumber'),
goodsArtNumber = goodsArtNumberBlock.find('span');
goodsCompareAddButton = $('.goodsDataCompareButton.add');
goodsCompareDeleteButton = $('.goodsDataCompareButton.delete');
goodsModDescriptionBlock = $('.goodsDataMainModificationsDescriptionBlock');
// Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
if(modificationBlock.length) {
// Цена товара
goodsPriceNow.html(modificationPriceNowFormated);
// Старая цена товара
if(modificationPriceOld>modificationPriceNow) {
goodsPriceOld.html(modificationPriceOldFormated);
} else {
goodsPriceOld.html('');
}
// Есть ли товар есть в наличии
if(modificationRestValue>0) {
goodsAvailableTrue.show();
goodsAvailableFalse.hide();
// Если товара нет в наличии
} else {
goodsAvailableTrue.hide();
goodsAvailableFalse.show();
}
// Если товар есть в списке сравнения
if(modificationIsHasInCompareList>0) {
goodsCompareAddButton.hide();
goodsCompareDeleteButton.show();
// Если товара нет в списке сравнения
} else {
goodsCompareAddButton.show();
goodsCompareDeleteButton.hide();
}
// Покажем артикул модификации товара, если он указан
if(modificationArtNumber.length>0) {
goodsArtNumberBlock.show();
goodsArtNumber.html(modificationArtNumber);
// Скроем артикул модификации товара, если он не указан
} else {
goodsArtNumberBlock.hide();
goodsArtNumber.html('');
}
// Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
if(modificationDescription.length > 0) {
goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>');
} else {
goodsModDescriptionBlock.hide().html();
}
// Идентификатор товарной модификации
goodsModificationId.val(modificationId);
window.location.hash = '?modification='+modificationId;
} else {
// Отправим запись об ошибке на сервер
sendError('no modification by slug '+slug);
alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
}
// Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
updateVisibility(y);
});
});
Далее зайдите в style.css - найдите:
.goodsDataMainModificationsBlock{background: #f3f1e6;padding: 10px;margin-top: 1em;}
после него пропишите:
.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio div{display: inline-block;}
.goodsDataMainModificationsBlock .goodsDataMainModificationsRadio div input{float:none;}