Количество наименований товаров в корзине ShopCMS
Блог
Делимся с Вами своими знаниями и новостями
18.08.2015

Количество наименований товаров в корзине ShopCMS

Количество наименований товаров в корзине 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, то ищем ее по этой ссылке.

Метки:

Свяжитесь с нами уже сейчас

Вы привыкли видеть здесь форму обратной связи. Ведь так? Ее делают почти все. Но исследуя поведение людей, мы пришли к выводу, что форма совершенно не нужна. В любом случае все сводится к обсуждению Вашего проекта в WhatsApp или Telegram. А зачем нам тратить Ваше время на заполнение различных форм? Поэтому, пишите в Telegram или в WhatsApp.