Меню KDT

Страница "Избранные товары"

Пример её создания.

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

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

На странице избранных товаров (favorites.html) нужно разместить следующий код:

<script type="text/javascript">
{% set pageFavoriteID = 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('pageFavorite{{pageFavoriteID}}()', 10);
			},
		});
	} else {
		if(jsApplication.busy && {{variable}}) jsApplication.busy(false);
		setTimeout('pageFavorite{{pageFavoriteID}}()', 10);
	}
});
function pageFavorite{{pageFavoriteID}}(){
	var enum_si = {{ioEnum.SI|json_encode|raw}};
	
	{% if not user.isGuest %}
		// первоначальная загрузка корзины избранных товаров
		function loadingOffersFavorite(){
			// если что-то в корзине уже есть, начинаем формировать данные для вывода
			// обработка запроса
			ioCallEntity({
				entity: 'bmc.trade2.model.offersFavorite.getData2',
				resultType: 'json',
				params: {
					filter: {
						offer_type: 2, // розничные
					},
					limit: 1000,
				},
				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 offersFavorite = obj.res.data || [];
						$('.basket .basket-list').html('');
						
						if(offersFavorite.length > 0){
							$.each(offersFavorite, function(i, offer){
								var basketofferitems = '';
								$.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;
										}
									});
									
									basketofferitems += (
										'<div class="col-md-3">'+
											'<div class="product product-sm-left">'+
												'<ul class="product-labels">'+
													/*'<li>-30%</li>'+
													'<li>stuff pick</li>'+
													'<li>hot</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.goods_name['{{currentlang}}']||(offeritem.offer_name||''))+'</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>'+
										'</div>'
									);
								});
								$('.basket .basket-list').append(basketofferitems);
							});
							if(offersFavorite.length > 0){
								$('.basket-loading').css('display', 'none');
								$('.basket-empty').css('display', 'none');
								$('.basket').css('display', '');
							} else {
								// если в корзине пусто, то сигнализируем об этом
								$('.basket-loading').css('display', 'none');
								$('.basket').css('display', 'none');
								$('.basket-empty').css('display', '');
							}
						} else {
							// если в корзине пусто, то сигнализируем об этом
							$('.basket-loading').css('display', 'none');
							$('.basket').css('display', 'none');
							$('.basket-empty').css('display', '');
						}
					} else {
						var n = noty({
							text: 'Произошла ошибка при загрузке избранных товаров. Попробуйте загрузить их еще раз.'+(obj != null && obj.res.error_str != '' ? ' Полный текст ошибки: '+obj.res.error_str : ''),
							type: 'warning',
							layout: 'bottomRight',
							timeout: 4000,
						});
					}
				}
			});
		}
		loadingOffersFavorite();
	{% else %}
		// первоначальная загрузка корзины избранных товаров
		function loadingOffersFavorite(){
			var favoriteData = getFavoriteData() || []; // вытаскиваем все данные корзины
			//console.log(favoriteData);
			/*{
				tmp_pkid: ioGenPkid(), // pkid записи
				company_pkid: 0, // pkid компании
				goods_pkid: 0, // pkid товара
				offer_number: 0, // номер предложения товара, уникальный во всей системе
				tid: '', // ИНТ товара
			}*/
			// если что-то в корзине уже есть, начинаем формировать данные для вывода
			if(favoriteData !== null){
				$('.basket .basket-list').html('');
				
				// обработка запроса
				ioCallEntity({
					entity: 'bmc.trade2.model.offersFavorite.getData2Guest',
					resultType: 'json',
					params: {
						offersFavorite: favoriteData,
					},
					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 offersFavorite = obj.res.data || [];
							$.each(offersFavorite, function(i, offer){
								var basketofferitems = '';
								$.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;
										}
									});
									
									basketofferitems += (
										'<div class="col-md-3">'+
											'<div class="product product-sm-left">'+
												'<ul class="product-labels">'+
													/*'<li>-30%</li>'+
													'<li>stuff pick</li>'+
													'<li>hot</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.goods_name['{{currentlang}}']||(offeritem.offer_name||''))+'</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>'+
										'</div>'
									);
								});
								$('.basket .basket-list').append(basketofferitems);
							});
							if(offersFavorite.length > 0){
								$('.basket-loading').css('display', 'none');
								$('.basket-empty').css('display', 'none');
								$('.basket').css('display', '');
							} else {
								// если в корзине пусто, то сигнализируем об этом
								$('.basket-loading').css('display', 'none');
								$('.basket').css('display', 'none');
								$('.basket-empty').css('display', '');
							}
						} else {
							var n = noty({
								text: 'Произошла ошибка при загрузке избранных товаров. Попробуйте загрузить их еще раз.'+(obj != null && obj.res.error_str != '' ? ' Полный текст ошибки: '+obj.res.error_str : ''),
								type: 'warning',
								layout: 'bottomRight',
								timeout: 4000,
							});
						}
					}
				});
			} else {
				// если в корзине пусто, то сигнализируем об этом
				$('.basket-loading').css('display', 'none');
				$('.basket').css('display', 'none');
				$('.basket-empty').css('display', '');
			}
		}
		loadingOffersFavorite();
	{% endif %}
}
</script>
<div class="global-wrapper clearfix" id="global-wrapper">
	<div class="container">
		<div class="basket-loading">
			<div class="lds-css">
				<div class="lds-spinner">
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
					<div></div>
				</div>
			</div>
			<div class="text-center">
				<p class="lead">Загрузка избранных товаров...</p>
			</div>
		</div>
		<div class="basket-empty" style="display: none;">
			<div class="text-center">
				<i class="fa fa-heart-o empty-cart-icon"></i>
				<p class="lead">Список Ваших избранных товаров пуст</p>
				<a class="btn btn-primary btn-lg" href="{{link('/catalog')}}">Начать покупки <i class="fa fa-long-arrow-right"></i></a>
			</div>
		</div>
		<div class="basket" style="display: none;">
			<div class="row basket-list" data-gutter="15"></div>
		</div>
		<div class="gap"></div>
	</div>
</div>
Код обязательно должен обладать отступом (tabs).