Данная функция вызывается только 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>