Изменение формы оформления заказа

#
Изменение формы оформления заказа
Добрый день.
Читал несколько веток в 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, добавляю ещё один товар- сумма считается для предыдущего товара, добавляю ещё один и сумма считается для предыдущих двух... Чувсвую что дело в кукисах и сессии, но найти как это исправить не могу...
В чём может быть причина?
Модератор
#
Re: Изменение формы оформления заказа
Вопрос касается API 5 версии, тема переносится в раздел 5 версии.
#
Re: Изменение формы оформления заказа
Ещё немного: у меня не используется аякс при добавлении товара в корзину и выполняется переход сразу в корзину магазина (пл кнопке купить). При этом, если нажать на Корзину, то всё считается верно...
Адрес сайта: http://hostcms.svechnikov.me
#
Re: Изменение формы оформления заказа
Нужно для блока кода в настройках страницы добавить сохранение измененной корзины в сессию.

В блоке if (isset($_POST['recount'])
После закрытия foreach
$shop->UpdateCart($param);
      }      
   }  


вставить:

/* Сохраним корзину в сессию */  
  $session_cart = array();

   $MyCart = $shop->GetCart();

   $items = to_array($MyCart[$shop_id]);

   foreach ($items as $key => $value)
   {
      if (!$value['shop_cart_flag_postpone'])
      {
         /* Добавляем в корзину сессии */
         $session_cart[$key] = $value;
      }
   }
  
   /* Добавляем данные в сессию */
   $_SESSION['CART'][$shop_id] = $session_cart;


Так вновь пересчитанный объект корзины попадет в сессию.
#
Re: Изменение формы оформления заказа
Для пересчета нужно отключить сборс сессии - в коде корзины закоментировать код:
if (isset($_SESSION['CART'][$shop_id]))
{
  unset($_SESSION['CART'][$shop_id]);
}


Авторизация