Меню KDT

Виджет "Просмотренные товары"

Данная функция вызывается только javascript'ом, и использует для хранения cookie. Данные функции требуется прописывать только используя yepnope.

Данный код нужно разместить в header.html файле, после подключения всех js файлов.

<script type="text/javascript">
function getOffersViewsData(){
	return JSON.parse(localStorage.getItem('offersviews'));
}
function setOffersViewsData(o){
	localStorage.setItem('offersviews', JSON.stringify(o));
	return false;
}
</script>

Функция добавления товара в недавно просмотренные и загрузка списка недавно просмотренных товаров. На странице описания товара (catalog_item.html) нужно разместить следующий код (при этом должна быть доступна twig переменная offer, содержащая в себе информацию о просматриваемом товаре):

<script type="text/javascript">
{% set pageCatalogItemID = random(999999) %}
jsApplication.pageLoad(function(){
	{% set variable = 'var_'~random(999999) %}
	var {{variable}} = 0;
	var param = '';
	var load = [];
	//load = load.concat(ioGetModuleUrls({module: 'noty-packaged', push: 1}));
	
	if(jsApplication.busy && load.length > 0) {jsApplication.busy(true); {{variable}} = 1;}
	if(load.length > 0){
		yepnope({
			load: load,
			complete: function(){
				if(jsApplication.busy && {{variable}}) jsApplication.busy(false);
				//onBootstrapEditable();
				setTimeout('pageCatalogItem{{pageCatalogItemID}}()', 10);
			},
		});
	} else {
		if(jsApplication.busy && {{variable}}) jsApplication.busy(false);
		setTimeout('pageCatalogItem{{pageCatalogItemID}}()', 10);
	}
});
function pageCatalogItem{{pageCatalogItemID}}(){
	// добавление товара в недавно просмотренные (храним 20 товаров)
	function setOfferItemView(){
		var offersViewsData = getOffersViewsData() || []; // вытаскиваем все данные из недавно просмотренного
		var offersViewsData2 = [], cnt1 = 0;
		offersViewsData2.push({
			tmp_pkid: ioGenPkid(),
			company_pkid: '{{offer.company_pkid}}',
			goods_pkid: '{{offer.goods_pkid}}',
			offer_number: '{{offer.offer_number}}',
			offer_type: '{{offer.offer_type}}',
			tid: '{{offer.tid}}',
		});
		$.each(offersViewsData, function(i, el){
			if(cnt1 < 20){
				if(el.company_pkid != '{{offer.company_pkid}}'
				|| el.goods_pkid != '{{offer.goods_pkid}}'
				|| el.offer_number != '{{offer.offer_number}}'
				|| el.offer_type != '{{offer.offer_type}}'
				|| el.tid != '{{offer.tid}}'){
					cnt1++;
					offersViewsData2.push(el);
				}
			}
		});
		localStorage.removeItem('offersviews');
		setOffersViewsData(offersViewsData2);
	}
	setOfferItemView();

	// загрузка недавно просмотренных товаров
	function loadingOffersViews(){
		var offersViewsData = getOffersViewsData() || []; // вытаскиваем все данные из недавно просмотренного
		//console.log(offersViewsData);
		/*{
			tmp_pkid: ioGenPkid(), // pkid записи
			company_pkid: 0, // pkid компании
			goods_pkid: 0, // pkid товара
			offer_number: 0, // номер предложения товара, уникальный во всей системе
			tid: '', // ИНТ товара
		}*/
		// если что-то в корзине уже есть, начинаем формировать данные для вывода
		if(offersViewsData !== null){
			$('.offers-views-list').html('');
			
			var offersViewsData2 = [], cnt1 = 0;
			$.each(offersViewsData, function(i, el){
				if(cnt1 < 4){
					if(el.company_pkid != '{{offer.company_pkid}}'
					|| el.goods_pkid != '{{offer.goods_pkid}}'
					|| el.offer_number != '{{offer.offer_number}}'
					|| el.offer_type != '{{offer.offer_type}}'
					|| el.tid != '{{offer.tid}}'){
						cnt1++;
						offersViewsData2.push(el);
					}
				}
			});
			
			// обработка запроса
			ioCallEntity({
				entity: 'bmc.trade2.model.offersFavorite.getData2Guest',
				resultType: 'json',
				params: {
					offersFavorite: offersViewsData2,
				},
				success: function(data, tag){
					//console.log(data);
					var obj;try{obj = $.parseJSON(data);}catch(ex){obj = null;}
					if(obj != null && typeof(obj.res) != 'undefined' && obj.res != null && obj.res.error_code == '1'){
						var offersViews = obj.res.data || [];
						$.each(offersViews, function(i, offer){
							var offeritems = '';
							$.each(offer.offers, function(j, offeritem){
								var offer_poster = '{{template.path}}/img/bmcsales-logo.svg';
								if(offeritem.images && offeritem.images.length > 0){
									if(offeritem.images[0].urlSmall){
										offer_poster = '{{ioProjects.trade}}/'+offeritem.images[0].urlSmall;
									} else {
										if(offeritem.images[0].url){
											offer_poster = '{{ioProjects.trade}}/'+offeritem.images[0].url;
										}
									}
								} else {
									if(offeritem.offer_images && offeritem.offer_images.length > 0){
										if(offeritem.offer_images[0].urlSmall){
											offer_poster = '{{ioProjects.trade}}/'+offeritem.offer_images[0].urlSmall;
										} else {
											{% if offeritem.offer_images.0.url %}
												offer_poster = '{{ioProjects.trade}}/'+offeritem.offer_images[0].url;
											{% endif %}
										}
									}
								}
								
								var offer_cost_per_unit_min = {value: 0, currency: 'KZT'};
								var offer_cost_per_unit_max = {value: 0, currency: 'KZT'};
								$.each(offeritem.offer_parameters, function(k, param){
									var param_cost_per_unit = param.cost_per_unit;
									param_cost_per_unit.value /= enum_si[offeritem.si_visible].coeff;
									if(param_cost_per_unit.value > offer_cost_per_unit_max.value){
										offer_cost_per_unit_max = param_cost_per_unit;
									}
									if(param_cost_per_unit.value < offer_cost_per_unit_min.value || offer_cost_per_unit_min.value == 0){
										offer_cost_per_unit_min = param_cost_per_unit;
									}
								});
								
								offeritems += (
									'<li>'+
										'<div class="product product-sm-left">'+
											'<ul class="product-labels">'+
												/*'<li>-30%</li>'+
												'<li>stuff pick</li>'+
												'<li>hot</li>'+*/
												(offeritem.category_name && offeritem.category_name['{{currentlang}}'] ?
													'<li>'+offeritem.category_name['{{currentlang}}']+'</li>'
												:'')+
												(offeritem.offer_discount && offeritem.offer_discount > 0 ?
													'<li>-'+offeritem.offer_discount+'%</li>'
												:'')+
											'</ul>'+
											'<div class="product-img-wrap">'+
												'<img class="product-img" src="'+offer_poster+'" />'+
												/*'<img class="product-img-primary" src="{{template.path}}/img/test_product/35.jpg" />'+
												'<img class="product-img-alt" src="{{template.path}}/img/test_product/35-a.jpg" />'+*/
											'</div>'+
											'<a class="product-link" href="'+urlGetAdd('{{link('/catalog')}}', 'tid', offeritem.tid, 'offernum', offeritem.offer_number)+'"></a>'+
											'<div class="product-caption">'+
												'<ul class="product-caption-rating">'+
													'<li class="rated"><i class="fa fa-star"></i></li>'+
													'<li class="rated"><i class="fa fa-star"></i></li>'+
													'<li class="rated"><i class="fa fa-star"></i></li>'+
													'<li class="rated"><i class="fa fa-star"></i></li>'+
													'<li class="rated"><i class="fa fa-star"></i></li>'+
													/*'<li class="rated"><i class="fa fa-star"></i></li>'+
													'<li><i class="fa fa-star"></i></li>'+*/
												'</ul>'+
												'<h5 class="product-caption-title">'+(offeritem.offer_name||(offeritem.goods_name['{{currentlang}}']||''))+'</h5>'+
												'<div class="product-caption-price">'+
													(offeritem.offer_discount && offeritem.offer_discount > 0 ?
														'<span class="product-caption-price-new">'+number_format(offer_cost_per_unit_min.value - ((offer_cost_per_unit_min.value / 100) * offeritem.offer_discount), 2, '.', ' ')+' '+offer_cost_per_unit_min.currency+'</span>'
													:
														'<span class="product-caption-price-new">'+number_format(offer_cost_per_unit_min.value, 2, '.', ' ')+' '+offer_cost_per_unit_min.currency+'</span>'
													)+
													/*'<span class="product-caption-price-old">$67</span>'+
													'<span class="product-caption-price-new">$54</span>'+*/
												'</div>'+
												'<ul class="product-caption-feature-list">'+
													/*'<li>1 left</li>'+
													'<li>Free Shipping</li>'+*/
												'</ul>'+
											'</div>'+
										'</div>'+
									'</li>'
								);
							});
							$('.offers-views .offers-views-list').append(offeritems);
						});
						if(offersViews.length > 0){
							$('.offers-views .offers-views-list').css('display', '');
						} else {
							// если недавно просмотренных нет, то сигнализируем об этом
							$('.offers-views .offers-views-list').css('display', 'none');
						}
					} else {
						// произошла ошибка при загрузке недавно просмотренных товаров
						$('.offers-views .offers-views-list').css('display', 'none');
					}
					$('.offers-views .offers-views-loading').css('display', 'none');
				}
			});
		} else {
			// если недавно просмотренных нет, то сигнализируем об этом
			$('.offers-views-loading').css('display', 'none');
			$('.offers-views .offers-views-list').css('display', 'none');
		}
	}
	loadingOffersViews();
}
</script>
Код обязательно должен обладать отступом (tabs).