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


bartjohn

Регистрация: 22 мая 2015
Offline Активность: 06 дек. 2021 09:43
-----

#285878 Модификации

Отправлено Vaccina на 12 Февраль 2020 - 06:50

Здравствуйте.

Зайдите в раздел Сайт - Редактор шаблонов - Товар - найдите:
	 {% FOR goods_modifications_properties %}
		 <div class="goodsDataMainModificationsBlockProperty">
		 <!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
		 {% FOR values %}
			 <!-- Если это первый элемент в списке -->
			 {% IF goods_modifications_properties.values.first %}
			 <span>{goods_modifications_properties.NAME}:</span>
			 <select name="form[properties][]" class="selectBox">
			 {% 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>				
		 {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><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 %}

далее зайдите в 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);

// Изменение цены товара при изменении у товара свойства для модификации
goodsDataProperties.each(function(){
$(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		 = parseInt(modificationBlock.find('[name="price_now"]').val()),
	 modificationPriceNowFormated = modificationBlock.find('.price_now_formated').html(),
	 modificationPriceOld		 = parseInt(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'),
	 goodsAvailableAddCart		 = $('.add-to-form .add-to-cart'),
	 goodsAvailableQty			 = $('.add-to-form .wrap-qty'),
	 goodsArtNumberBlock		 = $('.goodsDataMainModificationArtNumber'),
	 goodsArtNumber			 = goodsArtNumberBlock.find('span');
	 goodsCompareAddButton		 = $('.goodsDataCompareButton.add');
	 goodsCompareDeleteButton	 = $('.goodsDataCompareButton.delete');
	 goodsModDescriptionBlock	 = $('.goodsDataMainModificationsDescriptionBlock');
	
	 // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
	 if(modificationBlock.length) {
	 // Цена товара
	 goodsPriceNow.html('<span class="price">' + modificationPriceNowFormated + '</span>');
	 // Старая цена товара
	 if(modificationPriceOld>modificationPriceNow) {
		 goodsPriceOld.html('<span class="price">' + modificationPriceOldFormated + '</span>');
	 } else {
		 goodsPriceOld.html('');
	 }
	 // Есть ли товар есть в наличии
	 if(modificationRestValue>0) {
		 goodsAvailableTrue.show();
		 goodsAvailableFalse.hide();
		 goodsAvailableAddCart.show();
		 goodsAvailableQty.show();
	 // Если товара нет в наличии
	 } else {
		 goodsAvailableTrue.hide();
		 goodsAvailableFalse.show();
		 goodsAvailableAddCart.hide();
		 goodsAvailableQty.hide();
	 }
	 // Если товар есть в списке сравнения
	 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('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
	 }
});
});


замените на:
// Функция собирает свойства в строку, для определения модификации товара
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,с){return a - с}).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);
							 });
});



#285284 Турбо-Страницы - Новая Фишка Яндекс.

Отправлено bartjohn на 25 Ноябрь 2019 - 10:55

Зачем наезжать на админов, если вы не верно ставите вопрос.
YML - турбо подключить 30 минут, читайте инструкцию, она как раз для интернет-магазинов.

Зачем вам RSS? Вы постоянно пишите новости и статьи?

Заходим в источники подгружаем YML фаил, надеюсь знаете где его сделать.

https://prnt.sc/q1mctf%20 - срин шот.
Справа тыкаем включить. Ждем.

Переходим в настройки и настраиваем, лого. и прочее.

https://prnt.sc/q1meg7

и вот вам готовая турбо страница с карточками товаров по вашему YML.
ПРОСТО ЗАГРУЗИТЕ YML и все готово.
Далее настраивайте как хотите через код.
Цвет фон и прочее. Но чем проще тем лучше, как по мне )

Если хотите заморачиваться с RSS, CSS.
Вперед, вас ни кто не держит.

P.S

Вот итог:

http://prntscr.com/q1xdmk


#250224 Нововведения Нужна Помощь

Отправлено Razon на 13 Октябрь 2016 - 13:22

Просмотр сообщенияbartjohn (13 Октябрь 2016 - 13:19) писал:

Спасибо, без картинок лучше)...
Поиск сдвинулся немного влево, не могу поставить наместо.

Здравствуйте,  в файле main.css найдите строки:
#search{position: relative;top:0px;left:-10px;
width: 210px;
}

Замените на:
#search{position: relative;top:0px;
width: 210px;
}



#250106 Нововведения Нужна Помощь

Отправлено Vaccina на 12 Октябрь 2016 - 04:02

В шаблоне HTML найдите:
<ul>
					{%IFNOT catalog_empty %}
					  {% FOR catalog %}
						{% IFNOT catalog.HIDE %}
						  <li class="cat-item" >
							<a  href="{catalog.URL}"
							  {% IF catalog.LEVEL>0%}style="width:175px;margin:0 40px 0 10px;background-color:#ccd2e0;color:#50555c; padding-left:{catalog.LEVEL | multiply("20")}px"{% ENDIF %}
							  {% IF catalog.CURRENT %}class="selected"{% ENDIF %}
							>{catalog.NAME}</a>
						  </li>
						{% ENDIF %}
					  {% ENDFOR %}
					{% ENDIF %}
					</ul><br />

замените на:
<ul>
					{%IFNOT catalog_empty %}
					  {% FOR catalog %}
						{% IFNOT catalog.HIDE %}
						  <li class="cat-item" >
							<a  href="{catalog.URL}"
							  {% IF catalog.LEVEL>0%}style="width:175px;margin:0 40px 0 10px;background-color:#ccd2e0;color:#50555c; padding-left:{catalog.LEVEL | multiply("20")}px"{% ENDIF %}
							  {% IF catalog.CURRENT %}class="selected"{% ENDIF %}
							>
	   {% IF catalog.LEVEL = 0 && catalog.EMPTY = 0 %}<img style="width:40px;height:40px;margin-right: 0.5em;vertical-align:middle;position:relative;top:-3px;" src="{catalog.IMAGE_OTHER}" />{% ENDIF %}
	   {catalog.NAME}
	   <!-- Отображение количества товаров в категории -->
{% IF catalog.GOODS_COUNT>0 %}
({catalog.GOODS_COUNT})
<!-- Если есть товары в подкатегориях, укажем количество во вложенных категориях -->
{% ELSEIF catalog.BRANCH_GOODS_COUNT>0 %}
({catalog.BRANCH_GOODS_COUNT})
{% ENDIF %}
	   </a>
						  </li>
						{% ENDIF %}
					  {% ENDFOR %}
					{% ENDIF %}
					</ul><br />



#229967 Нужна Помощь По Seopult

Отправлено Yurren на 10 Март 2016 - 21:40

Просмотр сообщенияhro_nick (10 Март 2016 - 19:10) писал:

Сеопульт именно инструмент и очень даже толковый, как раз чтобы самому все настраивать, даже если с нуля сео осваиваешь. Если масштабы маленькие и тьма времени, можно конечно сутками вручную делать. Но смысл? Мы как бы в 21 веке, полно сервисов и инструментов, для того и созданных, чтоб автоматизировать и упростить то, что можно. Под сотни запросов среднечастотных и низкочастотников что, месяцами сидеть, выписывать самому? По мне так пульт вполне реальная экономия сил, времени и денег получается
По мне так лучше самому медленно но в топ, чем инструментарно но в бан.
Из личного опыта (может кому полезно будет, когда бываю добрый ::)
Сеопульт использовал на первых порах только в качестве направляющей - но однажды задумался запустить в реальном режиме по одному из ключевых запросов. Сайт по этому запросу был в регионе топ 1 Яши. Каково же было мое удивление, когда с меня было запрошено не соврать то ли 500 то ли 1500 рублей за продвижение этого запроса в МЕСЯЦ. Охиренев от такой наглости чудосервиса я пошел дальше и посмотрел весь анкорно-ссылочный лист что предложил сервис... Уж лучше бы я его не смотрел - такой охинеи анкоров которые бы ссылались на мою товарнцю категорию я никогда не видел.
К чему я это все - исключительно для новичков - отдаваясь по незнанке всякого рода сервисам обещающий рай на небесах - надо или первоначально чему либо научиться и их контролировать или быть готовым оказаться в бане (но не с веником и с любымым человеком) а на задворках инета, проклиная все что связано с потраченным временем и e-комертс.


#242698 Анимация Добавления Товара В Корзину

Отправлено Stasya на 15 Июль 2016 - 16:53

Анимация заключается в том, что когда кликаешь по кнопке Купить, картинка товара "улетает" в корзину.
Чтобы добавить красивую анимацию для добавления товара в корзину на свой сайт, Вам нужно:
1) В конец файла main.js добавляем блок
$(function() {
$('form.goodsDataForm, form.goodsToCartFromCompareForm, form.goodsListItemCatalogueAddToCartButton').each(function() {
$(this).addClass('ajaxForm');
});
$(this).find('.ulproduct, .owl-item, .prod_hold').addClass('form-block-wrapper');
$(this).find('.ulproduct a > img, .owl-item a > img, .prod_hold a > img').addClass('product-img');
$('form.ajaxForm').submit(function() {
var formData = $(this).serializeArray();
formData.push({name: 'ajax_q', value: 1});
$.post($(this).attr('action'), formData, $.proxy(function(html) {
				 $('#cart .incart').html($(html).find('.newCartSum').html());
				 //$('#cartCount').html($(html).find('.newCartCount').html());
				 // console.log ($(this).closest('.form-block-wrapper'));
				 var wrapper = $(this).closest('.form-block-wrapper').length ? $(this).closest('.form-block-wrapper') : $(this);
				 console.log(wrapper);
				 var product_img = wrapper.find('.product-img');
				
				 var img = product_img.clone().appendTo($('body'));
				 img.css({
								 position: "absolute",
								 left: product_img.offset().left,
								 top: product_img.offset().top,
								 display: "block",
								 zIndex: 999
				 }).animate({
								 width: 0,
								 height: 0,
								 left: $('#cart').offset().left,
								 top: $('#cart').offset().top
								 }, 800, 'linear', function() {
									 $(this).remove();
					 wrapper.find('.goodsincart').show();
								 });
}, this));
return(false);
});
});

Теперь переходим в шаблоны.
Шаблон Товары.
Находим строку
<a class="addToCart" onclick="quickorder('.product-form-{goods.MIN_PRICE_NOW_ID}');return false;" title="Быстро оформить заказ"><span class="icon-cart3"></span></a>
  и заменяем ее на
<a class="addToCart" onclick="$('.product-form-{goods.MIN_PRICE_NOW_ID}').submit(); return false;" title="Быстро оформить заказ"><span class="icon-cart3"></span></a>

Шаблон HTML
Товары на главной
Находим блок
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{index_page_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{index_page_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{index_page_goods.MIN_PRICE_NOW_ID}" />
							 <a class="addToCart {%IF index_page_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF index_page_goods.MIN_REST_VALUE > 0%}onclick="quickorder('.product-form-{index_page_goods.MIN_PRICE_NOW_ID}');return false;" {%ENDIF%}{%IF index_page_goods.MIN_REST_VALUE > 0%} title="Быстро оформить заказ"{%ELSE%} title="Товара нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>
и заменяем его на
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{index_page_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{index_page_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{index_page_goods.MIN_PRICE_NOW_ID}" />
							 <a class="addToCart {%IF index_page_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF index_page_goods.MIN_REST_VALUE > 0%}onclick="$('.product-form-{index_page_goods.MIN_PRICE_NOW_ID}').submit(); return false;" {%ENDIF%}{%IF index_page_goods.MIN_REST_VALUE > 0%} title="Быстро оформить заказ"{%ELSE%} title="Товара нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>
Новинки
Находим лок
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{index_page_new_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{index_page_new_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{index_page_new_goods.MIN_PRICE_NOW_ID}" />
							 <a class="addToCart {%IF index_page_new_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF index_page_new_goods.MIN_REST_VALUE > 0%}onclick="quickorder('.product-form-{index_page_new_goods.MIN_PRICE_NOW_ID}');return false;" {%ENDIF%} {%IF index_page_new_goods.MIN_REST_VALUE > 0%} title="Быстро оформить заказ"{%ELSE%}title="Товара нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>
заменяем на
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{index_page_new_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{index_page_new_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{index_page_new_goods.MIN_PRICE_NOW_ID}" />
							 <a class="addToCart {%IF index_page_new_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF index_page_new_goods.MIN_REST_VALUE > 0%}onclick="$('.product-form-{index_page_new_goods.MIN_PRICE_NOW_ID}').submit(); return false;" {%ENDIF%} {%IF index_page_new_goods.MIN_REST_VALUE > 0%} title="Быстро оформить заказ"{%ELSE%}title="Товара нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>
Хиты продаж
Нахоидм блок
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{index_page_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{index_page_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{index_page_goods.MIN_PRICE_NOW_ID}" />
							 <a class="addToCart {%IF index_page_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF index_page_goods.MIN_REST_VALUE > 0%}onclick="quickorder('.product-form-{index_page_goods.MIN_PRICE_NOW_ID}');return false;" {%ENDIF%}{%IF index_page_goods.MIN_REST_VALUE > 0%} title="Быстро оформить заказ"{%ELSE%} title="Товара нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>
и заменяем на
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{index_page_favorites_goods.MIN_PRICE_NOW_ID}">
								 <input type="hidden" name="hash" value="{HASH}" />
								 <input type="hidden" name="form[goods_from]" value="{index_page_favorites_goods.GOODS_FROM}" />
								 <input type="hidden" name="form[goods_mod_id]" value="{index_page_favorites_goods.MIN_PRICE_NOW_ID}" />							
								 <a class="addToCart {% IF index_page_favorites_goods.MIN_REST_VALUE <= 0 %}noavalible{% ENDIF %}" {%IF index_page_favorites_goods.MIN_REST_VALUE > 0%}onclick="quickorder('.product-form-{index_page_favorites_goods.MIN_PRICE_NOW_ID}');return false;"{%ENDIF%} {%IF index_page_favorites_goods.MIN_REST_VALUE > 0%} title="Быстро оформить заказ"{%ELSE%}title="Товара нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></span></a>
							 </form>

Шаблон Товар
Сопутствующие товары
Находим блок
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{related_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{related_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{related_goods.MIN_PRICE_NOW_ID}" />								
							 <a class="addToCart {%IF related_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF related_goods.MIN_REST_VALUE > 0%}onclick="quickorder('.product-form-{related_goods.MIN_PRICE_NOW_ID}');return false;" title="Быстро оформить заказ"{%ENDIF%}{%IF related_goods.MIN_REST_VALUE <= 0%}title="Нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>
и заменяем его на
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{related_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{related_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{related_goods.MIN_PRICE_NOW_ID}" />								
							 <a class="addToCart {%IF related_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF related_goods.MIN_REST_VALUE > 0%}onclick="$('.product-form-{related_goods.MIN_PRICE_NOW_ID}').submit(); return false;" title="Быстро оформить заказ"{%ENDIF%}{%IF related_goods.MIN_REST_VALUE <= 0%}title="Нет в наличии"{%ENDIF%}><span class="icon-cart3"></span></a>
							 </form>

С этим товаром смотрят
Находим блок
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{related_views_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{related_views_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{related_views_goods.MIN_PRICE_NOW_ID}" />								
							 <a class="addToCart {%IF related_views_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF related_views_goods.MIN_REST_VALUE > 0%} onclick="quickorder('.product-form-{related_views_goods.MIN_PRICE_NOW_ID}');return false;"{%ENDIF%} {%IF related_views_goods.MIN_REST_VALUE <= 0%}title="Нет в наличии"{%ELSE%}title="Быстро оформить заказ"{%ENDIF%}><span class="icon-cart3"></span></a>
						 </form>
и заменяем его на
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" class="goodsListItemCatalogueAddToCartButton product-form-{related_views_goods.MIN_PRICE_NOW_ID}">
							 <input type="hidden" name="hash" value="{HASH}" />
							 <input type="hidden" name="form[goods_from]" value="{related_views_goods.GOODS_FROM}" />
							 <input type="hidden" name="form[goods_mod_id]" value="{related_views_goods.MIN_PRICE_NOW_ID}" />								
							 <a class="addToCart {%IF related_views_goods.MIN_REST_VALUE <= 0%}noavalible{%ENDIF%}" {%IF related_views_goods.MIN_REST_VALUE > 0%} onclick="$('.product-form-{related_views_goods.MIN_PRICE_NOW_ID}').submit(); return false;"{%ENDIF%} {%IF related_views_goods.MIN_REST_VALUE <= 0%}title="Нет в наличии"{%ELSE%}title="Быстро оформить заказ"{%ENDIF%}><span class="icon-cart3"></span></a>
						 </form>

Шаблон AJAX добавление товара в корзину
Находим блок
<strong class="newCartSum">
{% IF cart_count_empty %}
	 <span class="red">0</span>
{% ELSE %}
	 {% FOR cart_sum %}
	 {cart_sum.NOW | money_format}<br />
	 {% ENDFOR %}
{% ENDIF %}
</strong>
и заменяем его на
<strong class="newCartSum">
<span class="icon-cart3 icon"></span>
			 &nbsp;&nbsp;{CART_COUNT_TOTAL} товар(ов) -										
				 {% IF cart_count_empty %}
				 <span>0 {CURRENCY_NAME}</span>
				 {% ELSE %}
				 {% FOR cart_sum %}
					 {cart_sum.NOW} {CURRENCY_NAME}
				 {% ENDFOR %}
				 {% ENDIF %}</span>
</strong>



#242413 Подбор Товара (Фильтр)

Отправлено Stasya на 11 Июль 2016 - 15:26

Просмотр сообщенияbartjohn (07 Июль 2016 - 12:32) писал:

Добрый день!

Нужно изменить фильтра товара, сделать выпадающее меню, т.к очень много характеристик и брендов, и очень сильно давит, и листать приходится много. :)
Примерно так. Спасибо!

Изображение

В шаблоне HTML найдите блок
<!-- Фильтры по товарам. Появляются только на странице категории и поиска по товарам -->
					  {% IF SHOW_GOODS_FILTERS %}
						<li class="goods_filters"><br /><h2>Фильтры</h2>
						  <div class="contentTbodySearchFilterBlock cornerAll">
							<!-- Фильтры по характеристикам товаров (Например: Производитель, разрешение экрана, заряд батареи) -->
							{% FOR filter_attr_list %}
							  <span class="contentTbodySearchFilterBlockHeader">{filter_attr_list.NAME}</span>
							  <div class="contentTbodySearchFilterBlockValues">
							  {% FOR values %}
								<input type="checkbox" name="form[filter][attr][{filter_attr_list.ID}][{filter_attr_list.values.ID}]" value="1" id="filterAttrVal{filter_attr_list.values.ID}" {% IF filter_attr_list.values.CHECKED %}checked="checked"{% ELSEIF filter_attr_list.values.NB_GOODS_FILTERED=0 %}disabled="disabled"{% ENDIF %} />
								<label for="filterAttrVal{filter_attr_list.values.ID}">{filter_attr_list.values.VALUE} ({filter_attr_list.values.NB_GOODS_FILTERED})</label><br />
							  {% ENDFOR %}
							  </div>
							{% ENDFOR %}
							<!-- Фильтры по свойствам товарных модификаций (Например: Цвет, размер, модификация) -->
							{% FOR filter_prop_list %}
							  <span class="contentTbodySearchFilterBlockHeader">{filter_prop_list.NAME}</span>
							  <div class="contentTbodySearchFilterBlockValues">
							  {% FOR values %}
								<input type="checkbox" name="form[filter][prop][{filter_prop_list.ID}][{filter_prop_list.values.ID}]" value="1" id="filterPropVal{filter_prop_list.values.ID}" {% IF filter_prop_list.values.CHECKED %}checked="checked"{% ELSEIF filter_prop_list.values.NB_GOODS_FILTERED=0 %}disabled="disabled"{% ENDIF %} >
								<label for="filterPropVal{filter_prop_list.values.ID}">{filter_prop_list.values.VALUE} ({filter_prop_list.values.NB_GOODS_FILTERED})</label><br />
							  {% ENDFOR %}
							  </div>
							{% ENDFOR %}
						  </div>
						</li>
					  {% ENDIF %}
и замените его на
{% IF SHOW_GOODS_FILTERS %}
						<li class="goods_filters"><br /><h2>Фильтры</h2>
						  <div class="contentTbodySearchFilterBlock cornerAll">
							<!-- Фильтры по характеристикам товаров (Например: Производитель, разрешение экрана, заряд батареи) -->
							{% FOR filter_attr_list %}
							  <div class="filterItemBlock">
								<span class="contentTbodySearchFilterBlockHeader">{filter_attr_list.NAME}</span>
								<div class="contentTbodySearchFilterBlockValues">
								{% FOR values %}
								  <input type="checkbox" name="form[filter][attr][{filter_attr_list.ID}][{filter_attr_list.values.ID}]" value="1" id="filterAttrVal{filter_attr_list.values.ID}" {% IF filter_attr_list.values.CHECKED %}checked="checked"{% ELSEIF filter_attr_list.values.NB_GOODS_FILTERED=0 %}disabled="disabled"{% ENDIF %} />
								  <label for="filterAttrVal{filter_attr_list.values.ID}">{filter_attr_list.values.VALUE} ({filter_attr_list.values.NB_GOODS_FILTERED})</label><br />
								{% ENDFOR %}
								</div>
							  </div>
							{% ENDFOR %}
							<!-- Фильтры по свойствам товарных модификаций (Например: Цвет, размер, модификация) -->
							{% FOR filter_prop_list %}
							  <div class="filterItemBlock">
								<span class="contentTbodySearchFilterBlockHeader">{filter_prop_list.NAME}</span>
								<div class="contentTbodySearchFilterBlockValues">
								{% FOR values %}
								  <input type="checkbox" name="form[filter][prop][{filter_prop_list.ID}][{filter_prop_list.values.ID}]" value="1" id="filterPropVal{filter_prop_list.values.ID}" {% IF filter_prop_list.values.CHECKED %}checked="checked"{% ELSEIF filter_prop_list.values.NB_GOODS_FILTERED=0 %}disabled="disabled"{% ENDIF %} >
								  <label for="filterPropVal{filter_prop_list.values.ID}">{filter_prop_list.values.VALUE} ({filter_prop_list.values.NB_GOODS_FILTERED})</label><br />
								{% ENDFOR %}
								</div>
							  </div>
							{% ENDFOR %}
						  </div>
						</li>
					  {% ENDIF %}
Далее в файл main.js в самом конце добавьте блок
$(document).ready(function(){
  $(".contentTbodySearchFilterBlockValues").hide();
  $(".contentTbodySearchFilterBlockHeader").click(function(){
	$(this).parent().children('.contentTbodySearchFilterBlockValues').toggle();
  });
});

И в файл main.css добавьте в конце блок
.filterItemBlock{margin:10px 0;}
.filterItemBlock span{cursor:pointer;}



#242222 Кнопка "заказ В 1 Клик" Рядом С Кнопкой "корзина"

Отправлено Stasya на 08 Июль 2016 - 16:55

Просмотр сообщенияbartjohn (30 Июнь 2016 - 09:18) писал:

Спс, но можно ли сделать окно меньше. А во вторых ооочень долго грузит...

Проблемы в загрузке не наблюдаю. Лкно всплывает довольно быстро.
Чтобы уменьшить размер окна браузера Вам необходимо в блоке
// Быстрый заказ
function quickorder(formSelector) {
// Находим форму, которую отправляем на сервер, для добавления товара в корзину
var formBlock = $($(formSelector).get(0));
// Проверка на существование формы отправки запроса на добавление товара в корзину
if(1 > formBlock.length || formBlock.get(0).tagName != 'FORM') {
alert('Не удалось найти форму добавления товара в корзину');
return false;
}
// Получаем данные формы, которые будем отправлять на сервер
var formData = formBlock.serializeArray();
// Сообщаем серверу, что мы пришли через ajax запрос
formData.push({name: 'ajax_q', value: 1});
// Так же сообщим ему, что нужно сразу отобразить форму быстрого заказа
formData.push({name: 'fast_order', value: 1});
// Аяксом добавляем товар в корзину и вызываем форму быстрого заказа товара
$.ajax({
type : "POST",
cache : false,
url : formBlock.attr('action'),
data : formData,
success: function(data) {
var width = $(window).width() * 0.8;
if(width < 800) width = 'auto';
$.fn.nyroModalManual({
content: data,
gallery: null,
resizable: true,
autoSizable: true,
windowResize: true,
width: width,
minHeight: 230
});
}
});
return false;
}

найти строку
var width = $(window).width() * 0.8;

и заменить ее на
var width = '725px';



#241463 Кнопка "заказ В 1 Клик" Рядом С Кнопкой "корзина"

Отправлено Stasya на 29 Июнь 2016 - 15:47

Просмотр сообщенияbartjohn (27 Июнь 2016 - 08:33) писал:

Скрипт не работает прошу помочь. Спаисбо!

Все дело в том что Вы выполнили инструкцию не до конца.
В Вашем файле main.js нет этого кода
// Быстрый заказ
function quickorder(formSelector) {
// Находим форму, которую отправляем на сервер, для добавления товара в корзину
var formBlock = $($(formSelector).get(0));
// Проверка на существование формы отправки запроса на добавление товара в корзину
if(1 > formBlock.length || formBlock.get(0).tagName != 'FORM') {
alert('Не удалось найти форму добавления товара в корзину');
return false;
}
// Получаем данные формы, которые будем отправлять на сервер
var formData = formBlock.serializeArray();
// Сообщаем серверу, что мы пришли через ajax запрос
formData.push({name: 'ajax_q', value: 1});
// Так же сообщим ему, что нужно сразу отобразить форму быстрого заказа
formData.push({name: 'fast_order', value: 1});
// Аяксом добавляем товар в корзину и вызываем форму быстрого заказа товара
$.ajax({
type : "POST",
cache : false,
url : formBlock.attr('action'),
data : formData,
success: function(data) {
var width = $(window).width() * 0.8;
if(width < 800) width = 'auto';
$.fn.nyroModalManual({
content: data,
gallery: null,
resizable: true,
autoSizable: true,
windowResize: true,
width: width,
minHeight: 230
});
}
});
return false;
}



#240778 Аутсорсинг в Интернет магазине применяете?

Отправлено bartjohn на 22 Июнь 2016 - 21:08

Итак, все это бред, ни одна компания не расскажет о вашем товаре лучше вас. У меня например более 20к позиций, отдавать на аутсерс нет смысла. Т.к цены постоянно меняются, клиенты хотят купить подешевле не то что нужно и т.д. следовательно страдает репутация вашего магазина. Репутация нарабатывается с годами, а слить ее можно за пару мгновений.
Обработка заказов не занимает много времени, а логистика еще меньше. Я например возжу по безналу клиенту товар сразу от производителя или поставщика на склад клиенту. Документы копии по мылу, оригиналы почтой. Экономия на доставке и времени. При этом товар не нужно покупать на склад. Срок доставки составляет всего 1-2 из Члб-Мск например.Цена вопроса всего 600-800 руб (стоимость доставки ТК Деловые линии 555 руб. приэтом нужно им довезти, а клиенту забрать, а тут из рук в руки). Кому интересно пользуюсь услугами CSE, возят ребята самолетами, а не сборным грузом.
На счет бух учета еще проще, есть онлайн бухгалтерия Мое Дело , вообще не заморачиваюсь, программа сама все считает и отправляет во все органы когда надо, да и выгружает все платежи и переводы автоматически из банк-клиента, вобщем куча плюсов, один из них ненадо платить приходящему бухгалтеру 5-8 т.р в квартал (они обычно делают все тяп ляп т.к им пофигу на вас), или буху в штате 40-80к руб (зависит от региона)  .  10к руб в год, а не в месяц )
Скоро буду туда подключать вторую организацию на УСН.
https://www.moedelo....n=friend3774390 полная реферальная ссылка, ну если вдруг кто захочет подключится. Скрывать не буду, как все остальные, получу бонус (если захотите). А для вас отличная возможность забыть о походах в налоговую, пфр, фсс и т.д :)
На счет того, что многие закрываются. Ну да, многие, те кто захотел побыстрому нажиться (пока у людей были деньги), а не работать хорошо и качественно, те закрылись. У нас напротив все идет хорошо и в гору (хотя открылись в самый кризис в конце 15 года). Хотя работает нас всего 3 человека. Но тут дело не в том сколько работает людей, а как они работают!!!....

З.Ы
Прям бизнес схему расписал. И не ведитесь Вы на эти рекламные компании как от "Великий" , все это скрытая реклама )


#240962 Кнопка "заказ В 1 Клик" Рядом С Кнопкой "корзина"

Отправлено Vaccina на 24 Июнь 2016 - 06:08

Для шаблона Товар используйте следующую кнопку:
<a class="more-link" onclick="quickorder('.goodsDataForm'); return false;" title="Положить &laquo;{GOODS_NAME}&raquo; в корзину" href="#">Быстрый заказ</a><br /><br />



#240788 Кнопка "заказ В 1 Клик" Рядом С Кнопкой "корзина"

Отправлено support 2.0 на 22 Июнь 2016 - 22:04

Просмотр сообщенияbartjohn (22 Июнь 2016 - 15:53) писал:

Добрый день! Нужно переделать форму "Купить в один клик", в что-то подобное.  
Скорей всего через связь с  администрацией можно такое промутить, я ее не задействую. А то клиенты ленивые... :)
Здравствуйте, у нас есть модель быстрого заказа. Его можно использовать и в Вашем варианте. Например, в одной из инструкций на форуме мы реализовали эту форму так:
Изображение

Данная инструкция находится здесь. Нет только поля "Название организации", но при большом желании его можно сделать из поля ФИО, т.е. разделить на 2 поля, а при отправке они будут склеиваться и в заказе у Вас эти данные отобразятся в одном поле. В этой инструкции будет только один нюанс, что нужно будет создать способ оплаты и доставки со значением "не указан". Его мы скроем при оформлении заказа через корзину и при любом другом отображении на сайте. Таким образом в форме быстрого заказа не будет ни одного поля доставки или оплаты, но при этом заказ отправится. Данный поля являются обязательными, поэтому мы и делаем некоторые ухищрения, чтобы можно было создавать форму заказа в таком упрощенном варианте. Напишите, если Вы хотите так реализовать. Возможно, у Вас получится выполнить это по той инструкции. Стили можно поменять на те, как Вы хотите. Например, кнопку поставить в стеле Вашего сайта.


#224859 Модификации

Отправлено Dars на 29 Январь 2016 - 18:51

Просмотр сообщенияbartjohn (29 Январь 2016 - 18:27) писал:

Ага, получилось, только цена не меняется, при нажатии на "точку" <_<
Здравствуйте!
Инструкция для вашего шаблона будет выглядеть так - в шаблоне "Товар" код:

{% FOR goods_modifications_properties %}
														  <td class="goodsDataMainModificationsBlockProperty">
																<!-- Выдаем списки со свойствами для модификаций, чтобы определить какую модификацию товара хочет пользователь -->
																{% FOR values %}
																		<!-- Если это первый элемент в списке -->
																		{% IF goods_modifications_properties.values.first %}
																		  <strong style="font-size:14px;">{goods_modifications_properties.NAME}:</strong><br />
																		  <select name="form[properties][]" style=" border-radius:3px;
-webkit-border-radius:3px;
-moz-border-radius:3px;
-khtml-border-radius:3px;">
																		{% 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 %}
														  </td>
														  {goods_modifications_properties.index | is_divided("2","</tr><tr>","")}
														{% 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><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 />

																 {% 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);

  // Изменение цены товара при изменении у товара свойства для модификации
  goodsDataProperties.each(function(y){
	$(this).change(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);
	});
  });

замените на код:


// Функция собирает свойства в строку, для определения модификации товара
  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,j){return a - j}).join('_');
  }


  var
		// Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
		goodsDataProperties = $('form.goodsDataForm [name="form[properties][]"]'),

		// Запоминаем блоки с информацией по модификациям, для ускорения работы
		goodsDataModifications = $('div.goodsDataMainModificationsList');


  // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
  function updateVisibility (y) {
		// Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
		goodsDataProperties.each(function(j){
		  // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
		  if( j != y ) {
				// Проходим по всем значениям текущего свойства модификации товара
				  // Записываем временный массив свойств, которые будем использовать для проверки существования модификации
				  var checkProperties = new Array();
				  $(goodsDataProperties).each(function(i){
						checkProperties[i] = parseInt($(this).val());
				  });
				  // Пытаемся найти модификацию соответствующую выбранным значениям свойств
				  checkProperties[j] = parseInt($(this).attr('value'));
				  // Собираем хэш определяющий модификацию по свойствам
				  slug = checkProperties.sort(function(a,j){return a - j}).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(){
		$(this).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('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
	   }
	});
  });



#216383 Сервис 1Ps.ru - Раскрутка И Продвижение Сайтов

Отправлено Faire на 12 Ноябрь 2015 - 09:02

Регистрация в каталогах - 100% безопасные ссылки в эпоху Минусинска

Регистрация в каталогах один из безопасных способов получения естественных ссылок. Все знают, что с обновлением алгоритмов Яндекса и Google покупать ссылки небезопасно.
Возникает вопрос: где брать ссылки? Можно использовать:
-партнерские ссылки;
-ссылки, которые используют интернет-СМИ;
-каталоги сайтов.
Что делать нельзя:
-покупать или продавать ссылки;
-практиковать чрезмерный обмен ссылками;
-ссылки из низкокачественных каталогов и служб закладок.

Чем полезны каталоги и как проходит процесс регистрации, будет ли ссылочный взрыв и ответы на другие вопросы вы можете найти в здесь.
Если у вас остались вопросы, ответы вы можете найти в статье “FAQ по каталогам сайтов”.


#214894 Сервис 1Ps.ru - Раскрутка И Продвижение Сайтов

Отправлено Faire на 29 Октябрь 2015 - 11:55

Что задумал Google?

Изображение

Последние несколько недель Google глобально меняет все алгоритмы. Давайте посмотрим, что же изменилось:
- WIX не ранжируется в Google;
- Google понижает в выдаче сайты, закупающие ссылки на SAPE;
- Сайты с дублированным контентом могут занимать позиции лучше, чем первоисточник;
- Schema.org может стать еще одним фактором ранжирования;
- Modile-friendly сайты ранжируются лучше.

Узнать подробнее об изменениях Google можно здесь.