Добрый день.
Читал несколько веток в 5 версии. Не помогло. Поэтому спрашиваю здесь.
Использую HostCMS Халява 6.02
Требуется, чтобы при переходе в корзину сразу отображался список товаров, под ним список всех доступных вариантов доставки, под ним форма ввода адреса доставки.
Всё это уже сделано. В коде типовой дин. страницы "Интернет-магазин корзина" я добавил след код:
elseif (isset($_POST['step_4']))
{
/* Если выбрана (существует) платежная система */
if (Core_Type_Conversion::toInt($_POST['system_of_pay_id']) != 0)
{
/* Вызываем обработчик платежной системы */
if (!$shop->ExecSystemsOfPayHandler(Core_Type_Conversion::toInt($_POST['system_of_pay_id'])))
{
/* Не удалось найти обработчик */
show_error_message("Не найден обработчик платежной системы с номером ".Core_Type_Conversion::toInt($_POST['system_of_pay_id']));
}
}
else
{
/* Ошибка, не указана платежная система! */
show_error_message('Ошибка! Не указана ни одна платежная система.');
}
}
else
{
/* ОТОБРАЖАЕМ КОРЗИНУ, ВАРИАНТЫ ДОСТАВК, ФОРМУ ВВОДА АДРЕСА /*
// var_dump($_SESSION['CART']);
/* Очищаем сессию */
//if (isset($_SESSION['CART'][$shop_id]))
//{
// unset($_SESSION['CART'][$shop_id]);
//}
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
$param = array();
$param['shop_coupon_text'] = Core_Type_Conversion::toStr($_REQUEST['shop_coupon_text']);
/* Отображаем корзину */
$shop->ShowCart($shop_id, $site_users_id, Core_Type_Conversion::toStr($GLOBALS['LA']['cartXsl']), $param);
/* Отображаем форму ввода адреса */
// Не выбираем show_location, show_city и show_city_area, т.к. подгружаются через AJAX
$external_propertys = array();
/* Получаем количество элементов, их общую цену, вес, валюту для заданного пользователя */
$a_param = $shop->SelectAllItemsFromCartForUser($shop_id, $site_users_id);
//var_dump($a_param);
$itemsInCart = $shop->GetItemsFromCart($site_users_id, $shop_id);
if(count($itemsInCart)>0)
{
// var_dump($a_param);
/* Выбираем все доступные типы доставки (с группировкой по типу доставки) */
$param = array();
$param['shop_coupon_text'] = Core_Type_Conversion::toStr($_SESSION['shop_coupon_text']);
// Передаем количество товара
$param['count'] = $a_param['quantity'];
$shop->ShowTypeOfDelivery($shop_id, 0, 0, 0,0, $a_param['weight'], $a_param['price'],
Core_Type_Conversion::toStr($GLOBALS['LA']['deliveryXsl']), $param, $external_propertys);
$shop->ShowAddress(Core_Type_Conversion::toStr($GLOBALS['LA']['deliveryAddressXsl']), $shop_id, array('show_location' => false, 'show_city' => false, 'show_city_area' => false), $external_propertys);
}
}
В параметрах динамической страницы изменил несколько условий (мои изменения заключены в *** комментарий ***. Если кратко, то так как перехода к Step_1_1a не происходит, то везде где он есть условиях - я его закомментировал.
// Если сессия не была запущена - стартуем ее
if (/* ***isset($_POST['step_1_1a']) && *** */!isset($_SESSION) && !class_exists("SiteUsers"))
{
@session_start();
}
/* Необходимо перенести товары из кукисов в сессию и очистить кукисы */
if (/* ***(isset($_POST['step_4']) || isset($_POST['step_1_1a']))*** &&*/ !class_exists("SiteUsers"))
{
/* Читаем массив из кукисов */
$session_cart = array();
$postpone_items = array();
$MyCart = $shop->GetCart();
$items = Core_Type_Conversion::toArray($MyCart[$shop_id]);
foreach ($items as $key => $value)
{
if ($value['shop_cart_flag_postpone'])
{
/* Оставляем товар в корзине кукисов */
$postpone_items[$key] = $value;
}
else
{
/* Добавляем в корзину сессии */
$session_cart[$key] = $value;
}
}
/* Добавляем данные в сессию */
$_SESSION['CART'][$shop_id] = $session_cart;
/* Если массив с отложенными товарами не пуст - сохраняем его в кукисы */
if (count($postpone_items) > 0 /* *** && isset($_POST['step_4'])*** */)
{
$MyCart[$shop_id] = $postpone_items;
}
elseif(isset($_POST['step_4']))
{
/* Удалям целиком кукисы корзины для данного магазина */
unset($MyCart[$shop_id]);
}
/* Сохраняем данные */
$shop->SetCart($MyCart);
}
Проблема в следующем: когда нажимаю добавить товар в корзину, то при переходе в корзину общая сумма (в выборе способа доставки) пересчитывается только для предыдущего списка товаров. Т.е. в первый раз сумма = 0, добавляю ещё один товар- сумма считается для предыдущего товара, добавляю ещё один и сумма считается для предыдущих двух... Чувсвую что дело в кукисах и сессии, но найти как это исправить не могу...
В чём может быть причина?