Как сделать что бы и в корзине и в итоге цены были без копеек?
можно в \components\shop\model.php в функции getCartItems() исправить строки 2375 и 2376
с:
$items[$key]['price'] = round($item['price'], 2); $items[$key]['totalprice'] = round($item['price']*$item['cart_qty'], 2);
на:
$items[$key]['price'] = round($item['price']); $items[$key]['totalprice'] = round($item['price']*$item['cart_qty']);
и возможно ли запилить добавление товара в корзину на аяксе?
к кнопке/ссылке "добавить в корзину" добавляем id:
<a href="#" id="item_{$item.id}">Добавить в корзину</a>
дальше создаем файл \components\shop\ajax.php:
<?php
define('PATH', $_SERVER['DOCUMENT_ROOT']); include(PATH.'/core/ajax/ajax_core.php');
$action = cmsCore::request('action', 'str', 'add_to_cart', 'post');
$item_id = cmsCore::request('item_id', 'int', 0, 'post');
$item_qty = cmsCore::request('item_qty', 'int', 0, 'post');
$item_qty = (is_numeric($item_qty) && $item_qty > 0) ?
$item_qty : 1; $var_art_no = cmsCore::request('var_art_no', 'str', '', 'post');
if(cmsUser::checkCsrfToken()) {
if ($action != "") {
cmsCore::loadModel('shop');
$model = new cms_model_shop();
// добавление в корзину
if ($action == "add_to_cart" && $item_id != "") {
if ($model->addToCart($item_id, $var_art_no, $item_qty)) {
$cart_count = $model->getCartItemsCount($session_id);
if ($cart_count !== false) {
cmsCore
::jsonOutput(array( 'status' => 'ok',
'count' => $cart_count,
'summ' => $model->getCartItemsSumm()
));
} else {
// не удалось получить колличество товаров в корзине
cmsCore
::jsonOutput(array('status' => 'error', 'c' => 3)); }
} else {
// ошибка при добавлении товара в корзину
cmsCore
::jsonOutput(array('status' => 'error', 'c' => 2)); }
}
} else {
// неправильные параметры запроса
cmsCore
::jsonOutput(array('status' => 'error', 'c' => 1)); }
} else {
cmsCore
::jsonOutput(array('status' => 'error', 'c' => 4));}
функция getCartItemsCount() из примера выше (добавить в model.php):
public function getCartItemsCount($session_id) {
$res = $this->inDB->query("SELECT * FROM `cms_shop_cart` WHERE `session_id` = '".$session_id."'");
$count = $this->inDB->num_rows($res);
if($count != 0) {
return $count;
} else {
return false;
}
}
и getCartItemsSumm():
public function getCartItemsSumm() {
$items = $this->getCartItems();
$totalsumm = 0;
if ($items) {
foreach ($items as $item) {
$totalsumm += ($item['price'] * $item['cart_qty']);
}
}
return floor($totalsumm); }
так же слегка подправляем функцию checkCsrfToken() в файле \core\classes\user.class.php, чтоб token брался не только из формы но и из http-заголовка:
public static function checkCsrfToken(){
if(isset($_POST['csrf_token'])) { $user_token = $_POST['csrf_token'];
} else if(isset($_SERVER['HTTP_X_CSRF_TOKEN'])) { $user_token = $_SERVER['HTTP_X_CSRF_TOKEN'];
}
$tokens = self::sessionGet('csrf_tokens', 'security');
if ($key !== false) {
//unset($tokens[$key]);
//ksort($tokens);
//self::sessionPut('csrf_tokens', $tokens, 'security');
return true;
}
}
}
return false;
}
js-код примерно такой:
// добавление товара в корзину
$(".add_cartB a").click(function(e) {
e.preventDefault();
var el = $(this);
var variant_art = $("select[name=var_art_no]").val(); // разновидность товара
$.ajax({
type: "POST",
url: "/components/shop/ajax.php",
data: {
item_id: el.attr("id").replace("item_", ""),
item_qty: el.parent().find(".qty_input input").val(), // количество товара
var_art_no: variant_art,
action: "add_to_cart"
},
beforeSend: function (request) {
return request.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr('content'));
}
}).done(function (res) {
if (res["status"] == "ok") {
console
.log("Торар добавлен!"); } else if (res["status"] == "error") {
switch (res["c"]) {
case 1:
core.alert("Некорректные параметры запроса!","Ошибка");
break;
case 2:
core.alert("Не удалось добавить товар в корзину!","Ошибка");
break;
case 3:
core.alert("Не удалось получить колличество товаров в корзине!","Ошибка");
break;
case 4:
core.alert("Некорректный запрос!","Ошибка");
break;
default:
break;
}
} else {
console
.log("Произошла ошибка!"); }
});
});
не забываем добавлять в мета-теги:
<meta name="csrf-token" content="<?php echo cmsUser::getCsrfToken(); ?>">