Дробное количество товара в корзине Webasyst Shop-Script

в 21:05, , рубрики: cms, diff, php, shop-script, webasyst, Веб-разработка, корзина, товар, метки: , , , , ,

Когда-то было такое дело, что заказчик пожелал измерять товар в квадратных метрах, и обязательно десятичными дробями. Я тогда ковырялся ковырялся, искал в интернете, но так и не нашел как это сделать. Сейчас стал немного умнее, и при аналогичном пожелании без особого труда нашел решение. Выкладываю его для тех, кто так же, как я когда-то, мучается в поисках, и натыкается только на платные предложения или туманные рассуждения.

published/SC/html/scripts/classes/class.shoppingcart.php
========================================================
 		 * @param int $quantity
 		 */
 		function _setItemQuantity(&$Item, $quantity){
 			$xnQuantity = &$Item->getFirstChildByName('quantity');
-			$xnQuantity->setData(intval($quantity));
+            $xnQuantity->setData($quantity);

 		}

========================================================

published/SC/html/scripts/core_functions/cart_functions.php
========================================================
 function cartAddToCart( $productID, $variants, $qty = 1 ){
 	if($qty === ''){$qty = 1;}
-	$qty = max(0,intval($qty));
+    $qty = max(0,$qty);
 	$productID = intval($productID);
 	$product_data = GetProduct($productID);
 	if(!$product_data['ordering_available'])return false;

========================================================

published/SC/html/scripts/core_functions/order_status_functions.php
========================================================
 			" where orderID=$orderID" );
 	while( $item = db_fetch_row($q) )
 	{

-		$Quantity = intval($item["Quantity"]);
+        $Quantity = $item["Quantity"];
 		$q1 = db_query( "select productID from ".SHOPPING_CART_ITEMS_TABLE.
 				" where itemID=".$item["itemID"] );
 		$product = db_fetch_row( $q1 );

========================================================

published/SC/html/scripts/modules/cart/scripts/shopping_cart.php
========================================================
 			foreach ($upd_data as $_itemID=>$_data){
-				$cartEntry->setItemQuantity($_itemID, intval($_data['count']));
+                $cartEntry->setItemQuantity($_itemID, $_data['count']);

 			}
 			$cartEntry->saveCurrentCart();

========================================================

Так же вносим изменения в таблицы:

ALTER TABLE `SC_shopping_carts`
	CHANGE COLUMN `Quantity` `Quantity` DECIMAL(11,000) NULL DEFAULT NULL AFTER `itemID`;

ALTER TABLE `SC_ordered_carts`
	CHANGE COLUMN `Quantity` `Quantity` DECIMAL(11,000) NULL DEFAULT NULL AFTER `Price`;

Автор: xilix

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js