Количество наименований товаров в корзине ShopCMS
Количество наименований товаров в корзине ShopCMS весьма распространенная просьба с которой обращаются ко мне мои заказчики. И действительно, есть такой момент, ибо по умолчанию, корзина работает таким образом что считает общее количество товаров, а не отдельные наименования, все это способствует тому, что в некоторых случаях данных алгоритм избыточен и нам нужно считать в корзине только количество наименований товаров.
Приведу пример, допустим Вы продаете кабель в метрах. Человек выбирает какой-то кабель и заказывает 100 метров. Вы понимаете, что в корзине должно отображаться только 1 товар, а не 100! Поэтому я ниже приведу инструкцию по тому, как внести некоторые изменения в код сайта, благодаря чему, Вы сможете поменять текущий алгоритм на тот, что нам нужен. Приступим!
Первый шаг
Заходим в файл — core/includes/shopping_cart_info.php В нем есть строчка и переменная, за которое это все отвечает —
$cnt, во всех функциях прибавляем ей 1. Я сделал так, вот итоговый код.
<?php ##################################### # ShopCMS: Скрипт интернет-магазина # Copyright (c) by ADGroup # http://shopcms.ru ##################################### // shopping cart brief info //calculate shopping cart value $k=0; $cnt = 0; 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"]; $cnt+=1; //выводим тока количество товаров и все! } } } 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]; $cnt+=1; //выводим тока количество товаров и все! } } } $smarty->assign("shopping_cart_value", $k); $smarty->assign("shopping_cart_value_shown", show_price($k)); $smarty->assign("shopping_cart_items", $cnt); ?>
Второй шаг
Теперь заходим в другой файл — core/includes/processor/cart.php, и вносим следующие изменения в эту же переменную. Итоговый файл должен получиться таким.
<?php ##################################### # ShopCMS: Скрипт интернет-магазина # Copyright (c) by ADGroup # http://shopcms.ru ##################################### if ( isset ( $_GET["xcart"] ) || isset ( $_POST["xcart"] )) { $JsHttpRequest = & new JsHttpRequest(DEFAULT_CHARSET); //# of selected currency $current_currency = isset ( $_SESSION["current_currency"] ) ? $_SESSION["current_currency"] : CONF_DEFAULT_CURRENCY; $q = db_query("select code, currency_value, where2show, currency_iso_3, Name, roundval from ".CURRENCY_TYPES_TABLE." where CID=".( int ) $current_currency); if ( $row = db_fetch_row($q)) { $selected_currency_details = $row; //for show_price() function } else //no currency found. In this case check is there any currency type in the database { $q = db_query("select code, currency_value, where2show, roundval from ".CURRENCY_TYPES_TABLE); if ( $row = db_fetch_row($q)) { $selected_currency_details = $row; //for show_price() function } } //should we add products to cart? if ( isset ( $_GET["addproduct"] )) { $variants = array( ); foreach ( $_GET as $key => $val ) { if ( strstr($key, "option_select_hidden_")) $variants[] = $val; } unset ( $_SESSION["variants"] ); $_SESSION["variants"] = $variants; //add product to cart with productID=$add if ( isset ( $_GET["addproduct"] ) && ( int ) $_GET["addproduct"] > 0 /* && isset($_SESSION["variants"]) */ ) { if ( isset ( $_SESSION["variants"] )) { $variants = $_SESSION["variants"]; unset ( $_SESSION["variants"] ); session_unregister("variants"); //calling session_unregister() is required since unset() may not work on some systems } else { $variants = array( ); } for ( $mcn = 0; $mcn < $_GET["multyaddcount"]; $mcn++ ) cartAddToCart(( int ) $_GET["addproduct"], $variants); } $resCart = cartGetCartContent(); $resDiscount = dscCalculateDiscount($resCart["total_price"], isset ( $_SESSION["log"] ) ? $_SESSION["log"] : ""); $discount_value = addUnitToPrice($resDiscount["discount_current_unit"]); $discount_percent = $resDiscount["discount_percent"]; $k = 0; $cnt = 0; 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 += 1; } } 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 += 1; } } } $GLOBALS['_RESULT'] = array( "shopping_cart_value" => $k, "shopping_cart_value_shown" => show_price($k), "shopping_cart_items" => $cnt ); } } else { //init Smarty require ( "core/smarty/smarty.class.php" ); $smarty = new Smarty; //core smarty object $smarty_mail = new Smarty; //for e-mails if ( ( int ) CONF_SMARTY_FORCE_COMPILE ) { $smarty->force_compile = true; $smarty_mail->force_compile = true; } //authorized access check $relaccess = checklogin(); //# of selected currency $current_currency = isset ( $_SESSION["current_currency"] ) ? $_SESSION["current_currency"] : CONF_DEFAULT_CURRENCY; $smarty->assign("current_currency", $current_currency); $q = db_query("select code, currency_value, where2show, currency_iso_3, Name, roundval from ".CURRENCY_TYPES_TABLE." where CID=".( int ) $current_currency); if ( $row = db_fetch_row($q)) { $smarty->assign("currency_name", $row[0]); $selected_currency_details = $row; //for show_price() function } else //no currency found. In this case check is there any currency type in the database { $q = db_query("select code, currency_value, where2show, roundval from ".CURRENCY_TYPES_TABLE); if ( $row = db_fetch_row($q)) { $smarty->assign("currency_name", $row[0]); $selected_currency_details = $row; //for show_price() function } } //set Smarty include files dir if ( isset ( $_SESSION["CUSTOM_DESIGN"] )) { define('TPL', $_SESSION["CUSTOM_DESIGN"]); $smarty->template_dir = "core/tpl/user/".$_SESSION["CUSTOM_DESIGN"]; } else { define('TPL', CONF_DEFAULT_TEMPLATE); $smarty->template_dir = "core/tpl/user/".CONF_DEFAULT_TEMPLATE; } $smarty_mail->template_dir = "core/tpl/email"; if ( isset ( $_SESSION["log"] )) $smarty->assign("log", $_SESSION["log"]); //should we add products to cart? if ( isset ( $_GET["addproduct"] )) { $variants = array( ); foreach ( $_GET as $key => $val ) { if ( strstr($key, "option_select_hidden_")) $variants[] = $val; } unset ( $_SESSION["variants"] ); $_SESSION["variants"] = $variants; Redirect("index.php?do=cart&shopping_cart=yes&add2cart=".( int ) $_GET["addproduct"]."&multyaddcount=".( int ) $_GET['multyaddcount']); } //specify that this is a popup window $this_is_a_popup_cart_window = true; $smarty->assign("this_is_a_popup_cart_window", 1); //include core shopping cart routine include ( "core/includes/shopping_cart.php" ); //show Smarty output $smarty->display("shopping_cart.tpl.html"); } ?>
Вот и все. Теперь корзина будет работать так как надо! Если у Вас возникли какие-либо вопросы — смело задавайте их мне в комментариях, также если Вас интересует информация по ShopCMS, то ищем ее по этой ссылке.
Свяжитесь с нами уже сейчас
- +7 (906) 272-38-19
Telegram / WhatsApp - info@cruelten.ru
- Cruelten
- Cruelten
Вы привыкли видеть здесь форму обратной связи. Ведь так? Ее делают почти все. Но исследуя поведение людей, мы пришли к выводу, что форма совершенно не нужна. В любом случае все сводится к обсуждению Вашего проекта в WhatsApp или Telegram. А зачем нам тратить Ваше время на заполнение различных форм? Поэтому, пишите в Telegram или в WhatsApp.