Перейти к содержимому


Цена в блоке "Корзина" с учетом скидки


  • Вы не можете ответить в тему
В этой теме нет ответов

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 July 2014 - 10:11 PM

Дополнение меняет вывод цены в блоке "Корзина" с обычной суммы товаров на сумму со скидкой, которая соответствует текущему клиенту и сумме заказа. Т.е. на ту сумму, которую и увидит клиент зайдя в свою корзину.

Не могу не заметить, что в очередной раз удивлен кодом ShopCMS. Его точно писали несколько человек по очереди, причем следующий не особо вникал, что же было сделано предыдущим. Других вариантов ситуации, когда после строки

$resCart = cartGetCartContent();

дающей полную информацию о корзине - цена товаров в корзине, количество, общая сумма - зачем-то ЗАНОВО считаются общая сумма и количество товаров мне в голову не приходит. Как не приходит в голову и почему нельзя было выводить в блок "Корзина" более корректную сумму, сразу с учетом скидки. В обработке при AJAX-корзине (cart.php) эта информация УЖЕ ЕСТЬ:

$resDiscount = dscCalculateDiscount($resCart["total_price"], isset ( $_SESSION["log"] ) ? $_SESSION["log"] : "");

Либо я опять чего-то очевидного не вижу, либо можно получить в блоке "Корзина" более правильную цену
и - одновременно! - уменьшить количество SQL-запросов и PHP-вычислений.

Установка:
==========

1. в файле cart.php

заменяем


if ( isset ( $_SESSION["log"] ))
//taking products from database
{
$q = db_query("select itemID, Quantity FROM ".SHOPPING_CARTS_TABLE." WHERE customerID=".( int ) regGetIdByLogin($_SESSION["log"]));
while ( $row = db_fetch_row($q)) {
$q1 = db_query("select productID from ".SHOPPING_CART_ITEMS_TABLE." where itemID=".( int ) $row["itemID"]);
$r1 = db_fetch_row($q1);
$variants = GetConfigurationByItemId($row["itemID"]);
$k += GetPriceProductWithOption($variants, $r1["productID"]) * $row["Quantity"];
$cnt += $row["Quantity"];
}
}
else
if ( isset ( $_SESSION["gids"] ))
//...session vars
{
for ( $i = 0; $i < count($_SESSION["gids"]); $i++ ) {
if ( $_SESSION["gids"][$i] ) {
$t = db_query("select Price FROM ".PRODUCTS_TABLE." WHERE productID=".( int ) $_SESSION["gids"][$i]);
$rr = db_fetch_row($t);
$sum = $rr["Price"];
// $rr["Price"]
foreach ( $_SESSION["configurations"][$i] as $varconf ) {
$q1 = db_query("select price_surplus from ".PRODUCTS_OPTIONS_SET_TABLE." where variantID=".( int ) $varconf." AND productID=".( int ) $_SESSION["gids"][$i]);
$r1 = db_fetch_row($q1);
$sum += $r1["price_surplus"];
}
$k += $_SESSION["counts"][$i] * $sum;
$cnt += $_SESSION["counts"][$i];
}
}
}


на


# BEGIN выводим в корзине сумму со скидкой
$k = $resCart["total_price"] - $resDiscount["discount_standart_unit"];
foreach ($resCart["cart_content"] as $rc) $cnt += $rc["quantity"];
# END выводим в корзине сумму со скидкой



2. в файле shopping_cart_info.php

заменяем


if (isset($_SESSION["log"])) //taking products from database
{
$q = db_query("select itemID, Quantity FROM ".SHOPPING_CARTS_TABLE.
" WHERE customerID=".regGetIdByLogin($_SESSION["log"]));
while ($row = db_fetch_row($q))
{
$q1=db_query("select productID from ".SHOPPING_CART_ITEMS_TABLE.
" where itemID=".$row["itemID"]);
$r1=db_fetch_row($q1);
if($r1["productID"]){
$variants=GetConfigurationByItemId( $row["itemID"] );
$k += GetPriceProductWithOption($variants, $r1["productID"])*$row["Quantity"];
$cnt+=$row["Quantity"];
}
}
}
else
if (isset($_SESSION["gids"])) //...session vars
{
for ($i=0; $i<count($_SESSION["gids"]); $i++)
{
if ($_SESSION["gids"][$i])
{
$t = db_query("select Price FROM ".PRODUCTS_TABLE." WHERE productID=".(int)$_SESSION["gids"][$i]);
$rr = db_fetch_row($t);

$sum=$rr["Price"];

// $rr["Price"]
foreach( $_SESSION["configurations"][$i] as $vars )
{
$q1=db_query("select price_surplus from ".PRODUCTS_OPTIONS_SET_TABLE.
" where variantID=".(int)$vars." AND productID=".(int)$_SESSION["gids"][$i]);
$r1=db_fetch_row($q1);
$sum+=$r1["price_surplus"];
}

$k += $_SESSION["counts"][$i]*$sum;
$cnt += $_SESSION["counts"][$i];
}
}
}


на


# BEGIN выводим в корзине сумму со скидкой
$resCart = cartGetCartContent();
$resDiscount = dscCalculateDiscount($resCart["total_price"], isset ( $_SESSION["log"] ) ? $_SESSION["log"] : "");
$k = $resCart["total_price"] - $resDiscount["discount_standart_unit"];
foreach ($resCart["cart_content"] as $rc) $cnt += $rc["quantity"];
# END выводим в корзине сумму со скидкой

  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)