| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Mizter Egoist 07.05.2017 13:42 / 07.05.2017 13:48
Спасибо за прекрасный пример, без него Я бы не понял что делать.На всех страницах
<header>
<div id="basket"></div>
</header>
На странице /basket
<div id="fullBasket"></div>
basket.html
^if(def $form:basket && def $form:basketAction){
$_jsonString[^taint[as-is;$form:basket]]
$_hash[^json:parse[$_jsonString]]
^if(def $_hash.uuid){
$_basketQuery[^get.query[
$.table[basket]
$.select[
$.bID[= '$_hash.uuid']
]
]]
$_basketData[^get.selectData[$_basketQuery]]
$_table[^table::create{item quantity price}]
^if(def $_hash.items){
^_hash.items.foreach[;item]{
^_table.append[$item]
}
}
$_hashItems[^json:string[$_table]]
^switch[$form:basketAction]{
^case[add_basket]{
^self._transaction{
^if(!def $_basketData.bID && !def $_basketData.items && def $_hashItems && def $_hash.create){
^void:sql{
INSERT INTO basket (bID, items, create_at)
VALUES ('$_hash.uuid', '^taint[as-is;$_hashItems]', '$_hash.create')
}
}(def $_basketData.bID && def $_hashItems && $_basketData.items ne $_hashItems){
^void:sql{
UPDATE basket
SET items = '^taint[as-is;$_hashItems]'
WHERE bID = '$_hash.uuid'
}
}
}
}
^case[del_basket]{
^self._transaction{
^void:sql{
UPDATE basket
SET items = '^taint[as-is;$_hashItems]'
WHERE bID = '$_hash.uuid'
}
}
}
^case[cng_basket]{
^self._transaction{
^void:sql{
UPDATE basket
SET items = '^taint[as-is;$_hashItems]'
WHERE bID = '$_hash.uuid'
}
}
}
}
}
}
$_basketQuery[^get.query[
$.table[basket]
$.select[
$.bID[= '$cookie:bID']
]
]]
$_basketData[^get.selectData[$_basketQuery]]
^if(def $_basketData.items && $_basketData.items ne '[]'){
$_basketString[^taint[as-is;$_basketData.items]]
$_basketHash[^json:parse[$_basketString]]
$_basketTable[^table::create{item quantity price}]
^_basketHash.foreach[;item]{
^_basketTable.append[$item]
}
$_basketHash[^_basketTable.hash[item]]
^_basketTable.menu{
$sum(^eval(^eval($_basketTable.quantity * $_basketTable.price) + $sum))
}
$count(^_basketTable.count[])
$_basketItems[^_basketTable.menu{
$_basketTable.item
}[,]]
$_basketGoods[^get.query[
$.table[pages]
$.select[
$.eID[IN ($_basketItems)]
$.tID[= '4']
]
]]
$basketGoods[^get.selectData[$_basketGoods]]
^if(def $basketGoods){
<div id="basket">
В вашей ^if($request:uri eq '/basket'){корзине}{<a href="/basket">корзине</a>} $count ^get.variations[$count;товар;товара;товаров] на сумму $sum ₽ <br>
^basketGoods.menu{
<div class="item">
<div class="itemName">$basketGoods.name</div>
<div class="button" data-item="$basketGoods.eID" data-quantity="-1" data-action="cng_basket">-</div>
<div class="itemQuantity">$_basketHash.[$basketGoods.eID].quantity</div>
<div class="button" data-item="$basketGoods.eID" data-quantity="+1" data-action="cng_basket">+</div>
<div class="itemPrice">$_basketHash.[$basketGoods.eID].price</div>
</div>
}
</div>
<div id="fullBasket">
В вашей корзине $count ^get.variations[$count;товар;товара;товаров] на сумму $sum ₽ <br>
^basketGoods.menu{
<div class="item">
<div class="itemName">$basketGoods.name</div>
<div class="button" data-item="$basketGoods.eID" data-quantity="-1" data-action="cng_basket">-</div>
<div class="itemQuantity">$_basketHash.[$basketGoods.eID].quantity</div>
<div class="button" data-item="$basketGoods.eID" data-quantity="+1" data-action="cng_basket">+</div>
<div class="itemPrice">$_basketHash.[$basketGoods.eID].price</div>
<div class="button" data-item="$basketGoods.eID" data-action="del_basket">Удалить</div>
</div>
}
</div>
}
}{
<div id="basket">Ваша ^if($request:uri eq '/basket'){корзина}{<a href="/basket">корзина</a>} пуста</div>
<div id="fullBasket">Ваша корзина пуста</div>
}
basket.js
$(document).ready(function() {
var click = new Date();
var clickDate = click.format("yyyy-mm-dd HH:MM:ss");
var backend = '/bulk/ajax/basket.html';
var basket;
var basketData = JSON.parse(localStorage.getItem('basket'));
var basketCookie = getCookie('bID');
if (basketCookie !== false) {
var path = '/bulk/ajax/basket.html?showJSON=true&uuid=' + basketCookie;
}
//Работа с кнопками
$('body').on('click', '.button', function() {
if (this.hasAttribute('data-item')) {
var item_id = this.getAttribute('data-item');
}
if (this.hasAttribute('data-price')) {
var price = this.getAttribute('data-price');
}
if (this.hasAttribute('data-quantity')) {
var count = this.getAttribute('data-quantity');
var quantity = document.getElementById(count);
}
if (this.hasAttribute('data-action')) {
var action = this.getAttribute('data-action');
}
switch (action) {
case 'add_basket':
basket = addBasket(item_id, quantity.value, price, action);
break;
case 'del_basket':
basket = delBasket(item_id, action);
break;
case 'cng_basket':
basket = cngBasket(item_id, count, action);
break;
default:
break;
}
var data = {
'basket': basket,
'basketAction': action
}
$.post(backend, data, function(response) {
var userURI = location.pathname;
if (userURI == '/basket') {
var result = $('<div />').append(response).find('#fullBasket').html();
$('#fullBasket').html(result);
}
var result = $('<div />').append(response).find('#basket').html();
$('#basket').html(result);
});
});
if (typeof(basketData) != "undefined" && basketData !== null) {
if (basketCookie == false) {
var cookieExpires = new Date(Date.parse(basketData.create) + 1000 * 60 * 60 * 24 * 3);
var dataCookie = {
'expires': cookieExpires,
'path': '/'
};
setCookie('bID', basketData.uuid, dataCookie);
}
} else if (basketData == null && basketCookie !== false) {
$.getJSON(path, function(data) {
var storage = {};
for (var key in data) {
if (key == 'items') {
if (data[key] == '') {
storage[key] = [];
} else {
storage[key] = data[key];
}
} else {
storage[key] = data[key];
}
}
localStorage.setItem('basket', $.toJSON(storage));
});
} else if (basketData == null && basketCookie == false) {
var newUUID = generateUUID();
var data = {
'uuid': newUUID,
'items': [],
'create': clickDate
};
localStorage.setItem('basket', $.toJSON(data));
basketData = JSON.parse(localStorage.getItem('basket'));
if (basketCookie == false) {
var cookieExpires = new Date(Date.parse(basketData.create) + 1000 * 60 * 60 * 24 * 3);
var dataCookie = {
'expires': cookieExpires,
'path': '/'
};
setCookie('bID', basketData.uuid, dataCookie);
}
}
$.post(backend, function(response) {
var userURI = location.pathname;
if (userURI == '/basket') {
var result = $('<div />').append(response).find('#fullBasket').html();
$('#fullBasket').html(result);
}
var result = $('<div />').append(response).find('#basket').html();
$('#basket').html(result);
});
});