автоматическая очистка корзины после Logout

6 года 5 мес. назад #1066 от ininna
Здравствуйте,
Помогите, пожалуйста. Обыскала весь интернет, но нигде не нашла ответа. Мне попался очень капризный клиент, магазин, который я сделала для него, работает отлично. Но его не устраивает одна вещь. Проблема в следущем:

Покупатель сделал Login, выбрал несколько товаров и положил из в корзину. Потом передумал их покупать, не закончил оформление заказа и вышел из магазина Logout. Как сделать, чтобы когда этот покупатель вновь зайдет в магазин (Login), его корзина была ПУСТОЙ, а не показывала товары, которые он выбрал, но не купил при своем предыдущем посещении магазина? То есть как сделать, чтобы корзина автоматически очищалась после того, как покупатель, не закончив оформление заказа, вышел (Logout) из магазина?

Очень надеюсь на Вашу помощь.

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

6 года 5 мес. назад #1070 от Wedal
ininna, сам не пробовал, но возможно поможет:
forum.virtuemart.net/index.php?topic=81463.0;prev_next=prev
forum.virtuemart.net/index.php?topic=58769.0
Спасибо сказали: ininna

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.

6 года 5 мес. назад #1073 от ininna
Огромное спасибо за помощь. Линки, которые Вы написали, очень помогли. Там дали решение для старой версии Virtuemart, но все равно подсказали, где искать.
У меня Virtuemart 1.8, может кому-нибудь поможет мое решение.
В файле ps_cart.php (находится в administrator/components/com_virtuemart/classes) надо удалить строки 37-70.
// If the user is logged in, we can try to retrieve the current cart from the database
        // We store the items in a new SESSION var
		if( $GLOBALS['auth']['user_id'] > 0 && empty($_SESSION['savedcart'])) {
			$q = 'SELECT `cart_content` FROM `#__{vm}_cart` WHERE `user_id`='.$GLOBALS['auth']['user_id'];
			$db->query( $q );
			if( $db->next_record() ) {
				// Fill the cart from the contents of the field cart_content, which holds a serialized array
				$contents = $db->f('cart_content');
				$contents = @unserialize( $contents );
				if( $contents !== false ) {
	                $_SESSION['savedcart'] = $contents;
					// Now check if all products are still published and existant
					$products_in_cart = array();
					for ($i=0;$i<$_SESSION['savedcart']["idx"];$i++) {
						$products_in_cart[$_SESSION['savedcart'][$i]['product_id']] = (int)$_SESSION['savedcart'][$i]['product_id'];
					}
					if( !empty( $products_in_cart )) {
						$db->query('SELECT product_id FROM #__{vm}_product WHERE product_id IN('.implode(',', $products_in_cart ).') AND product_publish=\'Y\'' );
						while( $db->next_record() ) {
							unset( $products_in_cart[$db->f('product_id')] );
						}
						foreach ( $products_in_cart as $product_id ) {
							// Delete those products who have been unpublished or deleted meanwhile
							ps_cart::deleteSaved( array('product_id'=>$product_id,'description'=>''), true);
						}
					}
	                // If Current cart is empty populate with saved cart
	                if(@$_SESSION['cart']['idx'] == 0) {
	                    $_SESSION['cart'] = $_SESSION['savedcart'];
	                    $_SESSION['savedcart']['idx'] = 0;
	                    ps_cart::saveCart();
	                }
					return $_SESSION['cart'];
				}
			}
		}
Спасибо сказали: bionetinfo, kryon

Пожалуйста Войдите или Зарегистрируйтесь, чтобы присоединиться к беседе.


Вверх