Перейти к содержимому


Изменение Типа Выбора Модификации

модификация выб тип

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 28

#1 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 24 Январь 2013 - 10:11

Здравия

#2 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 24 Январь 2013 - 10:32

сделал по инструкции как описано здесь , но только эти действия

Просмотр сообщенияVaccina (15 Июнь 2011 - 15:13) писал:

Хм. для изменения модификации нужно сделать следующее

В шаблоне "Товар" найти и заменить следующий блок

<!-- Если это первый элемент в списке -->
{% 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 %}

заменить на

<!-- Если это первый элемент в списке -->
{% IF goods_modifications_properties.values.first %}
<strong>{goods_modifications_properties.NAME}:</strong><br />
{% ENDIF %}

<input type="radio" name="form[properties][]" value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}checked="checked"{% ENDIF %} /> {goods_modifications_properties.values.NAME} <br />


далее нужно изменить JS. Для этого в файле 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('_');
}

заменить на

// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
var reset_arr = new Array();
$(obj).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('_');
}

Попробовал поменять как там описано шаблон main.js и для нового  и для старого , но кнопки так и не работали , к тому же фотографии перестали открываться, вкладки перестали открываться, поэтому я решил вернуть все обратно пока совсем там не на куролесил .

Сейчас кнопки стоят но при переключении реакции нет никакой , помогите пожалуйста наладить


#3 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 24 Январь 2013 - 12:10

сейчас, вернул все как было, посетители заходят, а пользоваться не могут

:mellow:

#4 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 24 Январь 2013 - 16:14

Мы тут поискали немного чекбоксы , какие варианты существуют и нашли вот этот на видится подходящим,

Помогите пожалуйста с ним, будьте добры :mellow:

Архив здесь

#5 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 25 Январь 2013 - 01:35

Чтобы изменить тип отображения модификации с выпадающего списка на радио кнопку вам необходимо сделать все изменения описанные в теме о которой вы сообщаете выше, так же эту тему необходимо прочитать крайне внимательно. И только после того как модификации будут корректно работать в новом виде - можно уже изменять их визуальный вид.

Тот вид что вы указываете не подойдет, так как такой вид применим к типу поля чекбокс

<input type="checkbox">

а модификации делаются на основе радио кнопки

<input type="radio">


#6 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 25 Январь 2013 - 06:12

Просмотр сообщенияVaccina (15 Июнь 2011 - 15:13) писал:

Хм. для изменения модификации нужно сделать следующее

В шаблоне "Товар" найти и заменить следующий блок

<!-- Если это первый элемент в списке -->
{% 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 %}

заменить на

<!-- Если это первый элемент в списке -->
{% IF goods_modifications_properties.values.first %}
<strong>{goods_modifications_properties.NAME}:</strong><br />
{% ENDIF %}

<input type="radio" name="form[properties][]" value="{goods_modifications_properties.values.ID}" {% IF goods_modifications_properties.values.SELECTED %}checked="checked"{% ENDIF %} /> {goods_modifications_properties.values.NAME} <br />


далее нужно изменить JS. Для этого в файле 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('_');
}

заменить на

// Функция собирает свойства в строку, для определения модификации товара
function getSlugFromGoodsDataFormModificationsProperties(obj) {
var properties = new Array();
var reset_arr = new Array();
$(obj).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('_');
}

Благодарю , сделал , все описанное Я так понимаю для одной группы модификаций , они встали отлично , но не работают(
Дальше продолжать не стал, т.к уж много изменений требует  и хотябы для одной группы запустить пока , чтоб работать можно было спокойно,

#7 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 25 Январь 2013 - 09:08

откликнитесь пожалуйста кто нибудь, нет возможности менять модификацию, как работать?! :blink:

#8 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 25 Январь 2013 - 09:29

ввел изменения в JS в ручную , вот такой код получил:


//Адаптивное меню
$(document).ready(function(){
var mainMenu = $('.menu_main .menu_main');
$("body").addClass("js");  
mainMenu.find("li:has(ul)").addClass("menu_parent");  

mainMenu.find("li").unbind('mouseout', mouseOut);
mainMenu.find("li").unbind('mouseover', mouseOver);


if ( $(window).width() > 767) {  

if (mainMenu.find('li').hasClass('open')){
mainMenu.find('li.open > ul').addClass("desctop_open");}
mainMenu.find("li").bind('mouseover', mouseOver);
mainMenu.find("li").bind('mouseout', mouseOut);
}
if ( $(window).width() <= 767) {

  if ($('li').hasClass('open')){
$('.menu_main .menu_main:first').find("> ul").addClass("mobile_open");
$('.menu_main .menu_main:first').find("a.link_nav").addClass("menu_parent_exp");

   mainMenu.find("li.open > ul").addClass("mobile_open");
mainMenu.find("li.open > span").addClass("menu_parent_exp");   
   $('.menu_main  ul:first').addClass("mobile_open");
$('.menu_main:first').find("a.link_nav:first").addClass("menu_parent_exp");
  }

   $(".link_nav").click(
function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.is(":visible")) {
   parent.removeClass("mobile_open");
   } else {
   parent.addClass("mobile_open");
   }
$(this).toggleClass("menu_parent_exp");
  return false;
}
   );  
   $(".menu_parent > span").click(
   function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.hasClass("mobile_open")) {
   parent.removeClass("mobile_open");
  $(this).removeClass("menu_parent_exp");
   } else {
   parent.addClass("mobile_open");
  $(this).addClass("menu_parent_exp");
   }
}
   );
}

  });
var resizeTimer;
  $(window).resize(function() {
  clearTimeout(resizeTimer);
  resizeTimer = setTimeout(window_resize, 100);
  });  

  function mouseOut() {
if (!$(this).hasClass('open')){
$(this).find("> ul").css({'display': '',  'position':''});
}
  }
  function mouseOver() {
if (!$(this).hasClass('open')){
  $(this).find("> ul").css({'display': 'block',  'position':'absolute', 'top': '-1px','left':'228px', 'width': '228px',  'z-index': '10000'});
}
  }

  function window_resize() {
var mainMenu = $('.menu_main .menu_main');
$("body").addClass("js");  
mainMenu.find("li:has(ul)").addClass("menu_parent");  

mainMenu.find("li").unbind('mouseout', mouseOut);
mainMenu.find("li").unbind('mouseover', mouseOver);
$(".link_nav").unbind("click");
$(".link_nav > ul").unbind("click");
$(".menu_parent > span").unbind("click");

if ( $(window).width() > 767) {  

if (mainMenu.find('li').hasClass('open')){
mainMenu.find('li.open > ul').addClass("desctop_open");}
mainMenu.find("li").bind('mouseover', mouseOver);
mainMenu.find("li").bind('mouseout', mouseOut);
}
   if ( $(window).width() <= 767) {

mainMenu.find("li").unbind('mouseout', mouseOut);
mainMenu.find("li").unbind('mouseover', mouseOver);

   if ($('li').hasClass('open')){
$('.menu_main .menu_main:first').find("> ul").addClass("mobile_open");
$('.menu_main .menu_main:first').find("a.link_nav").addClass("menu_parent_exp");
   mainMenu.find("li.open > ul").addClass("mobile_open");
mainMenu.find("li.open > span").addClass("menu_parent_exp");   
   $('.menu_main  ul:first').addClass("mobile_open");
$('.menu_main:first').find("a.link_nav:first").addClass("menu_parent_exp");
  }


   $(".link_nav").click(
   function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.is(":visible")) {
   parent.removeClass("mobile_open");
   } else {
   parent.addClass("mobile_open");
   }
$(this).toggleClass("menu_parent_exp");
  return false;
}
   );  
   $(".menu_parent > span").click(
function(){
   var parent = $(this).parent().find(" > ul");
   if(parent.hasClass("mobile_open")) {
   parent.removeClass("mobile_open");
  $(this).removeClass("menu_parent_exp");
   } else {
   parent.addClass("mobile_open");
  $(this).addClass("menu_parent_exp");
   }
}
   );
}
  }

// Отправляет ошибку на сервер, для того чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее.
function sendError (desc, page, line) {
  var img=document.createElement('img');
  img.src = 'http://storeland.ru/...IComponent(desc)+'&page='+encodeURIComponent(window.location)+'&line=0';
  img.style.position = 'absolute';
  img.style.top = '-9999px';

  try { document.getElementsByTagName('head').appendChild(img) } catch (e){}
  return false;
}

// Форматирует цену
function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+
_[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);}
var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)<prec){s+=new Array(prec-(s.length-decPos-1)).join(0)+'0';}
else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';}
return s;}

// Превращает поле пароля в текстовое поле и обратно
// @LinkObject - ссылка по которой кликнули
// @InputObject - объект у которого нужно изменить тип поля
function ChangePasswordFieldType (LinkObject, InputObject) {
  var
// Ссылка по которой кликнули
LObject = $(LinkObject),
// Объект у которого изменяем тип с password на text
IObject = $(InputObject),
// Старый текст ссылки
txtOld = LObject.text(),
// Новый текст ссылки
txtNew = LObject.attr('rel');

  // Если объекты не получены, завершим работу функции
  if( LObject.length==0 || IObject.length==0 ) {
return false;
  }

  // Изменяем у ссылки текст со старого на новый
  LObject.html(txtNew);
  // Старый текст ссылки сохраняем в атрибуте rel
  LObject.attr('rel', txtOld);

  // Изменяем тип input поля
  if(IObject[0].type == 'text') {
IObject[0].type = 'password';
  } else {
IObject[0].type = 'text';
  }
}

// Крутит изображение при обновлении картинки защиты от роботов
function RefreshImageAction(img,num,cnt) {
  if(cnt>13) {
return false;
  }

  $(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif');
  num = (num==6)?0:num;
  setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50);
}

$(document).ready(function(){
  $(".link_nav").parent().find('[title="Разделы сайта"]').parent().css('margin-top','9px');
  // Кнопки на сайте если подгружен модуль Jquery.UI
  if(typeof($('input:submit, input.button').button) == "function" ) {
$('input:submit, input.button').button();
  }

// Отправка формы по Ctrl+Enter
  $('form').bind('keypress', function(e){
if((e.ctrlKey) && ((e.which==10)||(e.which==13))) {$(this).submit();}
  // Отправка данных формы по нажатию на Enter в случае если курсор находится в input полях (В некоторых браузерах при нажатии по enter срабатывает клик по первому submit полю, которое является кнопкой назад. Для этого написан этот фикс)
  }).find('input').bind('keypress', function(e){
if(((e.which==10)||(e.which==13))) { try{$(this.form).submit();} catch(e){} return false; }
  });
  // Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией
  $('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').submit(function(){
if($(this).valid()) {
  // Кнопка отправки формы
  SubmitButton = $(this).find('input:submit, button:submit');
  // Если кнопку уже нажали, видимо отправка формы производилась по нажатию на кнопку enter, не допускаем этого.
  if($(SubmitButton.get(0)).attr('disabled')) {
return false;
  }
  // Устанавливаем на кнопку отправки формы блокировку повторной оптравки
  SubmitButton.attr('disabled', true);
  // Через 10 секунд блокировка отправки формы снимается.
  setTimeout('SubmitButton.attr("disabled", false);', 10000);
}
  }).validate();

  // В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу
  $('.order form input:submit[name="toprev"]').click(function(){
var act = this.form.action;
this.form.action = act + ( act.indexOf( '\?' ) > -1 ? '&' : '?' ) + 'toprev=1';
this.form.submit();
return false;
  });

  // Настройки галереи изображений
  $.nyroModalSettings({
// из всех элементов с атрибут rel="gallery" будем создавать галерею
gallery: 'gallery',
// Включаем прокрутку с последнего изображения на первое
galleryLoop: true
  });

  // Увеличение изображение при клике на него и открытие галереи изображений
  $('.goodsDataMainImage a, .goodsDataMainImageZoom a').click(function(){

// Идентификатор главной картинки
var goodsImageId = $('.goodsDataMainImage input').val(),

// Маленькое изображение, по которому на самом деле будем кликать
goodsImageIconElement = $('.goodsDataMainImages input[value="'+goodsImageId+'"]').parent().find('a');

// Для иконки изображения запустим галерею  
goodsImageIconElement.nyroModalManual();
return false;
  });

  // Добавление товара в корзину через ajax
  $('.goodsListItemCatalogueAddToCartButton, .goodsToCartFromCompareForm').submit(function(){
// Если нужно быстро положить в корзину
if($(this).attr('rel') == 'quick') {
  return true;

// Если нужно просто добавить в корзину и продолжить покупки
} else {
  $(this).nyroModalManual({
formIndicator: 'ajax_q',  // Value added when a form is sent
minWidth: 420, // Minimum width
minHeight: 150, // Minimum height
gallery: null // Gallery name if provided
  });
  return false;
}
  });

  // Клик по ячейке с изображением означает клик по картинке
  $('table.product-image td').click(function(){document.location = $(this).find('a:first').attr('href');return false;});

  // Главное товарное изображение
  $('.goodsDataMainImages a')
// При наведении на маленькое изображение изменяем среднее
.mouseover(function(){
  var
// Путь к среднему изображению
MediumImageUrl = $(this).find('img').attr('rel')

// Объект в котором расположено среднее изображение товара
,MainImageObj = $('div.goodsDataMainImage')

// Главное изображение, в которое будем вставлять новое изображение
,MainImageImg = MainImageObj.find('img')

// Вариант главного изображения отображаемого через свойство background
,MainImageBlockWithBg = MainImageObj.find('a div')

// В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений
,MainImageIdObject = MainImageObj.find('input')

// Получаем идентификатор этого изображения из соседнего input поля
,GoodsImageIconId = $(this).parent().find('input').val()
  ;

  // Изменяем главное изображение
  if(0 < MainImageImg.length) {
MainImageImg.attr('src', MediumImageUrl);
  } else {
MainImageBlockWithBg.css({'background': 'url("' + MediumImageUrl + '") no-repeat center center', 'background-size' : 'contain'});
  }

  // Изменяем идентификатор главного изображения
  MainImageIdObject.val(GoodsImageIconId);
})
// Изменение главного изображения товара при нажатии на миниатюру
.click(function(){
  // Для иконки изображения запустим галерею
  $(this).nyroModalManual();
  return false;
});

  // Функция собирает свойства в строку, для определения модификации товара
  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 = $('div.goodsDataMainModificationsBlock 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);

  // Изменение цены товара при изменении у товара свойства для модификации
  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);
  } else {
// Отправим запись об ошибке на сервер
sendError('no modification by slug '+slug);
alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
  }

  // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
  updateVisibility(y);
});
  });

  // Кнопка добавления товара на сравнение сравнения товаров
  $('.goodsDataCompareButton').click(function(){
window.location.href = $(this).attr('rel') +
($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
'id='+
$('.goodsDataMainModificationId').val()+
'&from='+
$('input[name="form[goods_from]"]').val();
return false;
  });

  // Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара
  $('.CompareGoodsImageZoom').click(function(){

// Галлерея фотографий для данной модификации товаров
var galleryBlock = $('.galleryBlock' +  $(this).attr('rel')),

// Главное изображение товара, которое сейчас стоит у товара
galleryMainImage = $('.CompareGoodsImageMain' +  $(this).attr('rel')),

// Изображение по которому нужно кликнуть в галлерее изображений
ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel'));

// Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара
ImageIngallery.nyroModalManual({
  gallery: 'gallery' +  $(this).attr('rel')
});

return false;
  });

  // Сравнение товаров. Инвертирование свойств для сравнения товара
  $('.CompareCheckbox.invert').click(function(){
var checked = true,
checkboxes = $('.CompareCheckbox:not(.invert)');

checkboxes.each(function(){
  if($(this).attr('checked')) {
checked = false;
return false;
  }
});

checkboxes.each(function(){
  $(this).attr('checked', checked);
});

$(this).attr('checked', checked);
  });

  // Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь
  $('.CompareGoodsHideSelected').click(function(){

$('.CompareGoodsTableTbodyComparisonLine').each(function(){
  var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)');
  if(CheckedCheckbox.length>0) {
$(this).hide();
  }
});

// отменяем выделение характеристик товаров
$('.CompareCheckbox').attr('checked',false);

return false;
  });

  // Сравнение товаров. Отображение скрытых характеристик товара
  $('.CompareGoodsShowAll').click(function(){
$('.CompareGoodsTableTbodyComparisonLine:hidden').show();
return false;
  });

  // Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров
  $('.CompareGoodsTableFilterShowAll').click(function(){
$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:hidden').show();

$(this).addClass('CompareGoodsTableFilterSelected');
return false;
  });

  // Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара
  $('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){
$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:not(.same)').show();
$('.CompareGoodsTableTbodyComparisonLine.same').hide();

$(this).addClass('CompareGoodsTableFilterSelected');
return false;
  });

  // Сравнение товаров. При наведении на строку сравнения, она выделяется цветом
  $('.CompareGoodsTableTbodyComparisonLine').hover(
function () { $(this).addClass('hover'); },
function () { $(this).removeClass('hover'); }
  );

  // При клике по строке выделяем свойство
  $('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){
var CompareCheckbox = $(this).parent().find('.CompareCheckbox');

if(CompareCheckbox.attr('checked')) {
  CompareCheckbox.attr('checked', false);
} else {
  CompareCheckbox.attr('checked', true);
}
  });

  // Прокрутка списка сравнения вправо
  $('.CompareGoodsTablePrev').click(function(){

return false;
  });

  function compareGetVars () {
return new Array(
  $('.CompareGoodsTableTbody tr:first td').length - 1,
  parseInt($('.CompareGoodsTableTbody tr:first td:visible:not(.ceil1)').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')),
  parseInt($('.CompareGoodsTableTbody tr:first td:visible:last').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), ''))
);
  }
  // Прокрутка списка сравнения вправо
  $('.CompareGoodsTableNext').click(function(){

// Определяем используемые поля
var data = compareGetVars();

// Изменяем их если это возможно.
if(data[0] > data[2]) {
  $('.compare-td-' + data[1]).hide();
  $('.compare-td-' + (data[2] + 1)).show();
  if((data[2] + 1) >= data[0]) {
$(this).find('a').addClass('disable');
  }
  if(data[1] + 1 != 1) {
$('.CompareGoodsTablePrev a').removeClass('disable');
  }
}

return false;
  });

  // Прокрутка списка сравнения вправо
  $('.CompareGoodsTablePrev').click(function(){

// Определяем используемые поля
var data = compareGetVars();

// Изменяем их если это возможно.
if(1 < data[1]) {
  $('.compare-td-' + (data[1] - 1)).show();
  $('.compare-td-' + data[2]).hide();
  if((data[1] - 1) <= 1) {
$(this).find('a').addClass('disable');
  }
  if(data[2] - 1 != data[0]) {
$('.CompareGoodsTableNext a').removeClass('disable');
  }
}

return false;
  });


  // Форма регистрации нового пользователя, действие ссылки "показать пароль"
  $('.clientForm .showPass').click(function(){
ChangePasswordFieldType(this, $('#sites_client_pass'));
return false;
  });

  // Форма регистрации нового пользователя, при оформлении заказа
  $('.OrderShowPass').click(function(){
ChangePasswordFieldType(this, $('#contactPassWord'));
return false;
  });

  // При вводе пароля с caps lockом, покажет блок с сообщением для пользователя
  $('#sites_client_pass, #contactPassWord').capslock({
caps_lock_on:function(){$("#caps_lock").show();},
caps_lock_off:function(){$("#caps_lock").hide();}
  });

  // При оформлении заказа дадим возможность зарегистрироваться пользователю
  $('#contactWantRegister').click(function(){
if($(this).attr("checked")) {
  $('.contactRegisterNeedElement').show();
  $('#contactEmail, #contactPassWord').addClass('required');
} else {
  $('.contactRegisterNeedElement').hide();
  $('#contactEmail, #contactPassWord').removeClass('required');
}
  });

  // Добавление отзыва о товаре. Рейтинг
  if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) {
$('.goodsDataOpinionTableRating').stars({
  inputType: "input",
  split: 2,
  captionEl: $(".goodsDataOpinionMsg"),
  cancelShow: false
});
  }

  // Иконки оплаты, чтобы яша не думал что тут сидят говносайто дельцы, размещающие по 30 бесполезных ссылок с главной сделаем ссылку яваскриптной
  $('.payment-sistems a').click(function(){
document.location = '/order/stage/contacts';
return false;
  });


  // Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре
  $('.goodsDataOpinionShowAddForm').click(function(){
if(0 == $('#goodsDataOpinionAddBlock:visible').length) {
  $('#goodsDataOpinionAddBlock').show('blind');
} else {
  $('#goodsDataOpinionAddBlock').hide('blind');
}
return false;
  });

  // Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре
  $('.goodsDataOpinionFormReset').click(function(){
$('#goodsDataOpinionAddBlock').hide('blind');
return false;
  });

  // Иконка для обновления изображение капчи
  $('.goodsDataOpinionCaptchaRefresh').click(function(){
RefreshImageAction(this,1,1);
$('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000));
return false;
  });

  // Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров
  $('.contentTbodySearchFilterBlock input').click(function(){
$(this)[0].form.submit();
  });

  // Действия при выборе варианта доставки на этапе оформления заказа
  $('.deliveryRadio').click(function(){

// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
  $('.deliveryZoneRadio:checked').click().attr('checked', false);
}
  });

  // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
  $('.deliveryZoneRadio').click(function(){

var
  deliveryId = $(this).attr('deliveryid')
  ,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice')
  ,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]')
  ,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId)
  ,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice')
  ,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice')
;

// Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки
if('true' == $(this).attr('rel')) {
  $(this).attr('checked', false);
  $(this).attr('rel', 'false');

  // Показываем цену по умолчанию
  deliveryDefaultPriceBlock.show();
  // Скрываем цену образованную от зоны
  deliveryZonePriceBlock.hide();

// Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены
} else {
  $('.deliveryZoneRadio').attr('rel', 'false');
  $(this).attr('rel', 'true');

  // Показываем цену по умолчанию
  deliveryDefaultPriceBlock.hide();
  // Скрываем цену образованную от зоны
  deliveryZonePriceBlock.show().html(deliveryZonePrice.html());

  // Выделяем вариант доставки к которому относится зона доставки
  deliveryBlock.attr('checked', true);
}

  });

  $("#deliveryConvenientDate").datepicker({
dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
dayNamesMin   : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
closeText : 'Готово',
currentText   : 'Сегодня' ,
duration : '',
monthNames   : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'],
monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
yearRange : "-6:+6",
dateFormat   : 'dd.mm.yy',
minDate : new Date(),
firstDay : 1
});
});


/* Отличия от других шаблонов */

// Прелоадер картинок, чтобы при наведении юзер не ждал пока подгрузятся эти картинки
function preloadImages(imgs){
  var picArr = [];
for (i = 0; i<imgs.length; i++){
picArr[i]= new Image(100,100);
picArr[i].src=imgs[i];
}
}


$(document).ready(function(){

  /* Действие при наведении на товар - появление кнопки быстрой покупки
  $(".products-grid li.item .product-box, .products-list li.item .product-box").hover(
function () {
$(this).find('.quick-shop').show();
},
function () {
  $(this).find('.quick-shop').hide();
}
  );
  */

  // Действие при наведении на товар на главной
  $(".header .links li a").hover(
function () {
  deff_class = $.trim($(this).attr('class'));
  $(this).attr('class', deff_class.replace(new RegExp("-act"), '') + '-act').addClass('hover');
},
function () {
  $(this).attr('class',deff_class).removeClass('hover');
}
  );

  // Действие при наведении на меню категорий, для возможности отображения вложенного подменю
  $('ul.nav li').hover(
function () {
  $(this).addClass('over');
},
function () {
  $(this).removeClass('over');
}
  );

  // Действие при наведении на логотипы платёжных систем
  $(".footer .payment-sistems img").hover(
function () {
  path = $(this).attr('src');
  $(this).attr('src', path.replace(new RegExp(".png"), '_act.png'));
},
function () {
  $(this).attr('src', path);
}
  );

  // Навигация стрелочками по страницам со списками
  document.onkeyup = NavigateThrough;  
  function NavigateThrough (event)
  {
if (!document.getElementById) return;
if (window.event) event = window.event;
if (event.ctrlKey) {
  var link = null;
  switch (event.keyCode ? event.keyCode : event.which ? event.which : null) {
case 0x25:
  link = $('.previous_page')[0];
  break;
case 0x27:
  link = $('.next_page')[0];
  break;
  }
  if (link && link.href) document.location = link.href;
}
  }
});
$(function(){
$("#tabs").tabs();
})

в шаблоне товар, код такой :


<!-- Блок выбора модификаций для текущей товарной позиции -->
<div class="span12">
  <div class="goodsDataMainModificationsBlock product-options" {% IF GOODS_NO_CHOISE_IN_PROPERTIES_FOR_MODIFICATIONS %}style="display:none;"{% ENDIF %}>
{% FOR goods_modifications_properties %}
<td class="goodsDataMainModificationsBlockProperty">
  <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
  {% FOR values %}

  <!-- Если это первый элемент в списке -->
  {% IF goods_modifications_properties.values.first %}
<span class="goodsDataMainModificationsRadio">
<strong>{goods_modifications_properties.NAME}:</strong><br />
  {% ENDIF %}

   <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} <br />

   {% IF goods_modifications_properties.values.last %}
</span>
  {% ENDIF %}

  {% ENDFOR %}

</td>

{goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
  {% ENDFOR %}

#9 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 25 Январь 2013 - 10:13

:mellow:

#10 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 25 Январь 2013 - 12:12

опять , Мы все вернули обратно , :wacko:

#11 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 25 Январь 2013 - 23:06

как же нам быть с радио кнопками все же :huh:

#12 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 26 Январь 2013 - 02:33

Пожалуйста, сообщите вы делали изменения описанные в сообщении http://forum.storela...ции/#entry20396
Если не сделать данное изменение, то возможна ошибка при которой не будут работать модификации. Проблема связанна с странностью форума увеличивать регистр буквы b в данном контексте.

#13 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 26 Январь 2013 - 07:23

да, делал изменения, коды выше выложил , b тоже менял, но все равно не работает(
сейчас пришлось все вернул обратно , магазин посещается, а функция не работает

Знать бы когда Вы в сети будите , мы могли бы установить все коды, а у Вас возможность была бы проверить правильность наших действий, :)

#14 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 29 Январь 2013 - 01:21

Сделайте данные изменения в ночь 29-30 января, я попробую разобраться с данной проблемой.

#15 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 29 Январь 2013 - 16:41

Вот код main.js

//Адаптивное меню
$(document).ready(function(){
var mainMenu = $('.menu_main .menu_main');
$("body").addClass("js");
mainMenu.find("li:has(ul)").addClass("menu_parent");

mainMenu.find("li").unbind('mouseout', mouseOut);
mainMenu.find("li").unbind('mouseover', mouseOver);


if ( $(window).width() > 767) {

if (mainMenu.find('li').hasClass('open')){
mainMenu.find('li.open > ul').addClass("desctop_open");}
mainMenu.find("li").bind('mouseover', mouseOver);
mainMenu.find("li").bind('mouseout', mouseOut);
}
if ( $(window).width() <= 767) {

if ($('li').hasClass('open')){
$('.menu_main .menu_main:first').find("> ul").addClass("mobile_open");
$('.menu_main .menu_main:first').find("a.link_nav").addClass("menu_parent_exp");

mainMenu.find("li.open > ul").addClass("mobile_open");
mainMenu.find("li.open > span").addClass("menu_parent_exp");
$('.menu_main ul:first').addClass("mobile_open");
$('.menu_main:first').find("a.link_nav:first").addClass("menu_parent_exp");
}

$(".link_nav").click(
function(){
var parent = $(this).parent().find(" > ul");
if(parent.is(":visible")) {
parent.removeClass("mobile_open");
} else {
parent.addClass("mobile_open");
}
$(this).toggleClass("menu_parent_exp");
return false;
}
);
$(".menu_parent > span").click(
function(){
var parent = $(this).parent().find(" > ul");
if(parent.hasClass("mobile_open")) {
parent.removeClass("mobile_open");
$(this).removeClass("menu_parent_exp");
} else {
parent.addClass("mobile_open");
$(this).addClass("menu_parent_exp");
}
}
);
}

});
var resizeTimer;
$(window).resize(function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(window_resize, 100);
});

function mouseOut() {
if (!$(this).hasClass('open')){
$(this).find("> ul").css({'display': '', 'position':''});
}
}
function mouseOver() {
if (!$(this).hasClass('open')){
$(this).find("> ul").css({'display': 'block', 'position':'absolute', 'top': '-1px','left':'228px', 'width': '228px', 'z-index': '10000'});
}
}

function window_resize() {
var mainMenu = $('.menu_main .menu_main');
$("body").addClass("js");
mainMenu.find("li:has(ul)").addClass("menu_parent");

mainMenu.find("li").unbind('mouseout', mouseOut);
mainMenu.find("li").unbind('mouseover', mouseOver);
$(".link_nav").unbind("click");
$(".link_nav > ul").unbind("click");
$(".menu_parent > span").unbind("click");

if ( $(window).width() > 767) {

if (mainMenu.find('li').hasClass('open')){
mainMenu.find('li.open > ul').addClass("desctop_open");}
mainMenu.find("li").bind('mouseover', mouseOver);
mainMenu.find("li").bind('mouseout', mouseOut);
}
if ( $(window).width() <= 767) {

mainMenu.find("li").unbind('mouseout', mouseOut);
mainMenu.find("li").unbind('mouseover', mouseOver);

if ($('li').hasClass('open')){
$('.menu_main .menu_main:first').find("> ul").addClass("mobile_open");
$('.menu_main .menu_main:first').find("a.link_nav").addClass("menu_parent_exp");
mainMenu.find("li.open > ul").addClass("mobile_open");
mainMenu.find("li.open > span").addClass("menu_parent_exp");
$('.menu_main ul:first').addClass("mobile_open");
$('.menu_main:first').find("a.link_nav:first").addClass("menu_parent_exp");
}


$(".link_nav").click(
function(){
var parent = $(this).parent().find(" > ul");
if(parent.is(":visible")) {
parent.removeClass("mobile_open");
} else {
parent.addClass("mobile_open");
}
$(this).toggleClass("menu_parent_exp");
return false;
}
);
$(".menu_parent > span").click(
function(){
var parent = $(this).parent().find(" > ul");
if(parent.hasClass("mobile_open")) {
parent.removeClass("mobile_open");
$(this).removeClass("menu_parent_exp");
} else {
parent.addClass("mobile_open");
$(this).addClass("menu_parent_exp");
}
}
);
}
}

// Отправляет ошибку на сервер, для того чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее.
function sendError (desc, page, line) {
var img=document.createElement('img');
img.src = 'http://storeland.ru/...IComponent(desc)+'&page='+encodeURIComponent(window.location)+'&line=0';
img.style.position = 'absolute';
img.style.top = '-9999px';

try { document.getElementsByTagName('head').appendChild(img) } catch (e){}
return false;
}

// Форматирует цену
function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+
_[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);}
var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';}
return s;}

// Превращает поле пароля в текстовое поле и обратно
// @LinkObject - ссылка по которой кликнули
// @InputObject - объект у которого нужно изменить тип поля
function ChangePasswordFieldType (LinkObject, InputObject) {
var
// Ссылка по которой кликнули
LObject = $(LinkObject),
// Объект у которого изменяем тип с password на text
IObject = $(InputObject),
// Старый текст ссылки
txtOld = LObject.text(),
// Новый текст ссылки
txtNew = LObject.attr('rel');

// Если объекты не получены, завершим работу функции
if( LObject.length==0 || IObject.length==0 ) {
return false;
}

// Изменяем у ссылки текст со старого на новый
LObject.html(txtNew);
// Старый текст ссылки сохраняем в атрибуте rel
LObject.attr('rel', txtOld);

// Изменяем тип input поля
if(IObject[0].type == 'text') {
IObject[0].type = 'password';
} else {
IObject[0].type = 'text';
}
}

// Крутит изображение при обновлении картинки защиты от роботов
function RefreshImageAction(img,num,cnt) {
if(cnt>13) {
return false;
}

$(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif');
num = (num==6)?0:num;
setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50);
}

$(document).ready(function(){

// Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией
$('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').submit(function(){
if($(this).valid()) {
SubmitButton = $(this).find('input:submit, button:submit').attr('disabled', true);
setTimeout('SubmitButton.attr("disabled", false);', 10000);
}
}).validate();

// В форме оформления заказа при клике на кнопку назад просто переходим на предыдущую страницу
$('.order form input:submit[name="toprev"]').click(function(){
var act = this.form.action;
this.form.action = act + ( act.indexOf( '\?' ) > -1 ? '&' : '?' ) + 'toprev=1';
this.form.submit();
return false;
});

// Настройки галереи изображений
$.nyroModalSettings({
// из всех элементов с атрибут rel="gallery" будем создавать галерею
gallery: 'gallery',
// Включаем прокрутку с последнего изображения на первое
galleryLoop: true
});

// Увеличение изображение при клике на него и открытие галереи изображений
$('.goodsDataMainImage a, .goodsDataMainImageZoom a').click(function(){

// Идентификатор главной картинки
var goodsImageId = $('.goodsDataMainImage input').val(),

// Маленькое изображение, по которому на самом деле будем кликать
goodsImageIconElement = $('.goodsDataMainImages input[value="'+goodsImageId+'"]').parent().find('a');

// Для иконки изображения запустим галерею
goodsImageIconElement.nyroModalManual();
return false;
});

// Добавление товара в корзину через ajax
$('.goodsListItemCatalogueAddToCartButton, .goodsToCartFromCompareForm').submit(function(){
// Если нужно быстро положить в корзину
if($(this).attr('rel') == 'quick') {
return true;

// Добавление товара в корзину через ajax
$('.goodsDataForm, .goodsToCartFromCompareForm, .goodsListForm').submit(function(){

$(this).nyroModalManual({
formIndicator: 'ajax_q', // Value added when a form is sent
minWidth: 450, // Minimum width
minHeight: 140, // Minimum height
gallery: null // Gallery name if provided
});
return false;
});

// Изменение главного изображения товара при нажатии на миниатюру
$('.goodsDataMainImagesIcon a').click(function(){
// Путь к среднему изображению
var MediumImageUrl = $(this).find('img').attr('rel'),

// Главное изображение, в которое будем вставлять новое изображение
MainImage = $('.goodsDataMainImage img'),

// В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений
MainImageIdObject = $('.goodsDataMainImage input'),

// Получаем идентификатор этого изображения из соседнего input поля
GoodsImageIconId = $(this).parent().find('input').attr("rel");

// Изменяем главное изображение
MainImage.attr('src',MediumImageUrl);

// Изменяем идентификатор главного изображения
MainImageIdObject.attr("rel",GoodsImageIconId);

return false;
});

// Функция собирает свойства в строку, для определения модификации товара
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('
' + modificationDescription + '');
} else {
goodsModDescriptionBlock.hide().html();
}


// Идентификатор товарной модификации
goodsModificationId.val(modificationId);
window.location.hash = '?modification='+modificationId;
} else {
// Отправим запись об ошибке на сервер
sendError('no modification by slug '+slug);
alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
}

// Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара.
updateVisibility(y);
});
});

// Кнопка добавления товара на сравнение сравнения товаров
$('.goodsDataCompareButton').click(function(){
window.location.href = $(this).attr('rel') +
($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
'id='+
$('.goodsDataMainModificationId').val()+
'&from='+
$('input[name="form[goods_from]"]').val();
return false;
});

// Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара
$('.CompareGoodsImageZoom').click(function(){

// Галлерея фотографий для данной модификации товаров
var galleryBlock = $('.galleryBlock' + $(this).attr('rel')),

// Главное изображение товара, которое сейчас стоит у товара
galleryMainImage = $('.CompareGoodsImageMain' + $(this).attr('rel')),

// Изображение по которому нужно кликнуть в галлерее изображений
ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel'));

// Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара
ImageIngallery.nyroModalManual({
gallery: 'gallery' + $(this).attr('rel')
});

return false;
});

// Сравнение товаров. Инвертирование свойств для сравнения товара
$('.CompareCheckbox.invert').click(function(){
var checked = true,
checkboxes = $('.CompareCheckbox:not(.invert)');

checkboxes.each(function(){
if($(this).attr('checked')) {
checked = false;
return false;
}
});

checkboxes.each(function(){
$(this).attr('checked', checked);
});

$(this).attr('checked', checked);
});

// Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь
$('.CompareGoodsHideSelected').click(function(){

$('.CompareGoodsTableTbodyComparisonLine').each(function(){
var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)');
if(CheckedCheckbox.length>0) {
$(this).hide();
}
});

// отменяем выделение характеристик товаров
$('.CompareCheckbox').attr('checked',false);

return false;
});

// Сравнение товаров. Отображение скрытых характеристик товара
$('.CompareGoodsShowAll').click(function(){
$('.CompareGoodsTableTbodyComparisonLine:hidden').show();
return false;
});

// Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров
$('.CompareGoodsTableFilterShowAll').click(function(){
$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:hidden').show();

$(this).addClass('CompareGoodsTableFilterSelected');
return false;
});

// Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара
$('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){
$('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
$('.CompareGoodsTableTbodyComparisonLine:not(.same)').show();
$('.CompareGoodsTableTbodyComparisonLine.same').hide();

$(this).addClass('CompareGoodsTableFilterSelected');
return false;
});

// Сравнение товаров. При наведении на строку сравнения, она выделяется цветом
$('.CompareGoodsTableTbodyComparisonLine').hover(
function () { $(this).addClass('hover'); },
function () { $(this).removeClass('hover'); }
);

// При клике по строке выделяем свойство
$('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){
var CompareCheckbox = $(this).parent().find('.CompareCheckbox');

if(CompareCheckbox.attr('checked')) {
CompareCheckbox.attr('checked', false);
} else {
CompareCheckbox.attr('checked', true);
}
});

// Прокрутка списка сравнения вправо
$('.CompareGoodsTablePrev').click(function(){

return false;
});

function compareGetVars () {
return new Array(
$('.CompareGoodsTableTbody tr:first td').length - 1,
parseInt($('.CompareGoodsTableTbody tr:first td:visible:not(.ceil1)').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), '')),
parseInt($('.CompareGoodsTableTbody tr:first td:visible:last').attr('class').replace(new RegExp('noBorderBottom compare\-td compare\-td\-'), ''))
);
}
// Прокрутка списка сравнения вправо
$('.CompareGoodsTableNext').click(function(){

// Определяем используемые поля
var data = compareGetVars();

// Изменяем их если это возможно.
if(data[0] > data[2]) {
$('.compare-td-' + data[1]).hide();
$('.compare-td-' + (data[2] + 1)).show();
if((data[2] + 1) >= data[0]) {
$(this).find('a').addClass('disable');
}
if(data[1] + 1 != 1) {
$('.CompareGoodsTablePrev a').removeClass('disable');
}
}

return false;
});

// Прокрутка списка сравнения вправо
$('.CompareGoodsTablePrev').click(function(){

// Определяем используемые поля
var data = compareGetVars();

// Изменяем их если это возможно.
if(1 < data[1]) {
$('.compare-td-' + (data[1] - 1)).show();
$('.compare-td-' + data[2]).hide();
if((data[1] - 1) <= 1) {
$(this).find('a').addClass('disable');
}
if(data[2] - 1 != data[0]) {
$('.CompareGoodsTableNext a').removeClass('disable');
}
}

return false;
});


// Форма регистрации нового пользователя, действие ссылки "показать пароль"
$('.clientForm .showPass').click(function(){
ChangePasswordFieldType(this, $('#sites_client_pass'));
return false;
});

// Форма регистрации нового пользователя, при оформлении заказа
$('.OrderShowPass').click(function(){
ChangePasswordFieldType(this, $('#contactPassWord'));
return false;
});

// При вводе пароля с caps lockом, покажет блок с сообщением для пользователя
$('#sites_client_pass, #contactPassWord').capslock({
caps_lock_on:function(){$("#caps_lock").show();},
caps_lock_off:function(){$("#caps_lock").hide();}
});

// При оформлении заказа дадим возможность зарегистрироваться пользователю
$('#contactWantRegister').click(function(){
if($(this).attr("checked")) {
$('.contactRegisterNeedElement').show();
$('#contactEmail, #contactPassWord').addClass('required');
} else {
$('.contactRegisterNeedElement').hide();
$('#contactEmail, #contactPassWord').removeClass('required');
}
});

// Добавление отзыва о товаре. Рейтинг
if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) {
$('.goodsDataOpinionTableRating').stars({
inputType: "input",
split: 2,
captionEl: $(".goodsDataOpinionMsg"),
cancelShow: false
});
}

// Иконки оплаты, чтобы яша не думал что тут сидят говносайто дельцы, размещающие по 30 бесполезных ссылок с главной сделаем ссылку яваскриптной
$('.payment-sistems a').click(function(){
document.location = '/order/stage/contacts';
return false;
});


// Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре
$('.goodsDataOpinionShowAddForm').click(function(){
if(0 == $('#goodsDataOpinionAddBlock:visible').length) {
$('#goodsDataOpinionAddBlock').show('blind');
} else {
$('#goodsDataOpinionAddBlock').hide('blind');
}
return false;
});

// Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре
$('.goodsDataOpinionFormReset').click(function(){
$('#goodsDataOpinionAddBlock').hide('blind');
return false;
});

// Иконка для обновления изображение капчи
$('.goodsDataOpinionCaptchaRefresh').click(function(){
RefreshImageAction(this,1,1);
$('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000));
return false;
});

// Фильтры по товарам. При нажании на какую либо характеристику или свойство товара происходит фильтрация товаров
$('.contentTbodySearchFilterBlock input').click(function(){
$(this)[0].form.submit();
});

// Действия при выборе варианта доставки на этапе оформления заказа
$('.deliveryRadio').click(function(){

// Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
$('.deliveryZoneRadio:checked').click().attr('checked', false);
}
});

// Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
$('.deliveryZoneRadio').click(function(){

var
deliveryId = $(this).attr('deliveryid')
,deliveryZonePrice = $(this).parent().find('.deliveryZonePrice')
,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]')
,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId)
,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice')
,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice')
;

// Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки
if('true' == $(this).attr('rel')) {
$(this).attr('checked', false);
$(this).attr('rel', 'false');

// Показываем цену по умолчанию
deliveryDefaultPriceBlock.show();
// Скрываем цену образованную от зоны
deliveryZonePriceBlock.hide();

// Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены
} else {
$('.deliveryZoneRadio').attr('rel', 'false');
$(this).attr('rel', 'true');

// Показываем цену по умолчанию
deliveryDefaultPriceBlock.hide();
// Скрываем цену образованную от зоны
deliveryZonePriceBlock.show().html(deliveryZonePrice.html());

// Выделяем вариант доставки к которому относится зона доставки
deliveryBlock.attr('checked', true);
}

});

$("#deliveryConvenientDate").datepicker({
dayNames : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
dayNamesMin : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
closeText : 'Готово',
currentText : 'Сегодня' ,
duration : '',
monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Окрябрь','Ноябрь','Декабрь'],
monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
yearRange : "-6:+6",
dateFormat : 'dd.mm.yy',
minDate : new Date(),
firstDay : 1
});
});


/* Отличия от других шаблонов */

// Прелоадер картинок, чтобы при наведении юзер не ждал пока подгрузятся эти картинки
function preloadImages(imgs){
var picArr = [];
for (i = 0; i picArr[i]= new Image(100,100);
picArr[i].src=imgs[i];
}
}


$(document).ready(function(){

/* Действие при наведении на товар - появление кнопки быстрой покупки
$(".products-grid li.item .product-box, .products-list li.item .product-box").hover(
function () {
$(this).find('.quick-shop').show();
},
function () {
$(this).find('.quick-shop').hide();
}
);
*/

// Действие при наведении на товар на главной
$(".header .links li a").hover(
function () {
deff_class = $.trim($(this).attr('class'));
$(this).attr('class', deff_class.replace(new RegExp("-act"), '') + '-act').addClass('hover');
},
function () {
$(this).attr('class',deff_class).removeClass('hover');
}
);

// Действие при наведении на меню категорий, для возможности отображения вложенного подменю
$('ul.nav li').hover(
function () {
$(this).addClass('over');
},
function () {
$(this).removeClass('over');
}
);

// Действие при наведении на логотипы платёжных систем
$(".footer .payment-sistems img").hover(
function () {
path = $(this).attr('src');
$(this).attr('src', path.replace(new RegExp(".png"), '_act.png'));
},
function () {
$(this).attr('src', path);
}
);

// Навигация стрелочками по страницам со списками
document.onkeyup = NavigateThrough;
function NavigateThrough (event)
{
if (!document.getElementById) return;
if (window.event) event = window.event;
if (event.ctrlKey) {
var link = null;
switch (event.keyCode ? event.keyCode : event.which ? event.which : null) {
case 0x25:
link = $('.previous_page')[0];
break;
case 0x27:
link = $('.next_page')[0];
break;
}
if (link && link.href) document.location = link.href;
}
}
});

$(function(){
$("#tabs").tabs();
})

Так же заменил в шаблоне "товар" блок:

<!-- Блок выбора модификаций для текущей товарной позиции -->

#16 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 29 Январь 2013 - 16:53

Сделал бэкап, включу в 23:00 :)

#17 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 29 Январь 2013 - 22:24

ой, заметил что внес изменения в JS и в браузерах FF, IR, Яндекс и др   функция выпадающего меню перестала работать

#18 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 30 Январь 2013 - 00:35

У вас присутствует синтаксическая ошибка в файле main.js
Вам необходимо в данном файле найти

// Добавление товара в корзину через ajax
  $('.goodsListItemCatalogueAddToCartButton, .goodsToCartFromCompareForm').submit(function(){
	// Если нужно быстро положить в корзину
	if($(this).attr('rel') == 'quick') {
	  return true;

и заменить на

// Добавление товара в корзину через ajax
  $('.goodsListItemCatalogueAddToCartButton, .goodsToCartFromCompareForm').submit(function(){
	// Если нужно быстро положить в корзину
	if($(this).attr('rel') == 'quick') {
	  return true;
   
	// Если нужно просто добавить в корзину и продолжить покупки
	} else {
	  $(this).nyroModalManual({
		formIndicator: 'ajax_q',  // Value added when a form is sent
		minWidth: 420, // Minimum width
		minHeight: 150, // Minimum height
		gallery: null // Gallery name if provided
	  });
	  return false;
	 }
  });


#19 emin808

emin808

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 538 сообщений

Отправлено 30 Январь 2013 - 06:30

уррра :) , все получилось , благодарю ВАС и всех кто помогал нам по этой теме <_<

#20 Владимир Москва

Владимир Москва

    Пользователь

  • Пользователи
  • PipPip
  • 46 сообщений

Отправлено 03 Октябрь 2013 - 15:32

Всем доброе время суток!
Вроде выполнил все как по теме, но при выборе Модификации цена не меняется, а остается минимальной, в корзину добавляется только первая модификация несмотря на выбор остальных!  Подскажите, что делать? В чем ошибка?





Темы с аналогичным тегами модификация, выб, тип

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных