Способы доставки на странице Корзины

#
Способы доставки на странице Корзины
Приветствую.

Нужно сделать так, чтобы стоимость доставки рассчитывалась на странице "Корзина". Все промежуточные шаги я удалил: http://autobukva.ru/shop/cart/

В код типовой дин. страницы "Интернет-магазин корзина" в самый низ я добавил функцию ShowTypeOfDelivery и теперь на странице "Корзина" сначала через xsl-шаблон "МагазинКорзина" выводится содержимое корзины, а ниже через xsl-шаблон "МагазинДоставки" выводятся доставки, как мне и нужно. Однако в функцию ShowTypeOfDelivery нужно передавать цену корзины (через $a_param["price"]). Проблема в том, что эту цену мне никак не выцепить: модуль пользователей сайта отключен, поэтому я пытался достать цену через метод SelectAllItemsFromCookieCart. Но в результате массив $a_param почему-то всегда пустой. Можете внизу посмотреть, под кнопкой "Оформить заказ" я вывожу этот массив через var_dump(). При этом функция GetCookieCart() эту самую корзину выводит, но там только id, а мне цены нужны, да и непонятно, почему SelectAllItemsFromCookieCart не работает.

Каким образом можно получить цену корзины для ShowTypeOfDelivery?
ITeka.ru - создание сайтов, дизайн, поддержка, реклама.
#
Re: Способы доставки на странице Корзины
Ammon писал(а):
да и непонятно, почему SelectAllItemsFromCookieCart не работает
- метод SelectAllItemsFromCookieCart работает и в данном случае возвращает верный результат(пустой). Это вызвано тем, что данный метод при отсутствии модуля "Пользователи сайта" берет информацию о корзине не из cookies-ов, а из сессии, т.е. из массива $_SESSION['CART']. А у вас на первом этапе оформления заказа данные туда(в сессию) еще не записались(в коде настроек типовой динамической страницы корзины данные записываются из кукисов в сессию после первого этапа, т.е. после прихода параметра step_1_1a). Поэтому вам, прежде чем использовать метод SelectAllItemsFromCookieCart(в принципе, вместо него можно оставить метод SelectAllItemsFromCartForUser, т.к. он подходит для использования и без модуля "Пользователи сайта" и в его коде все равно вызывается метод SelectAllItemsFromCookieCart) нужно поместить информацию о корзине из cookies-ов в сессию. Т.к. код этого размещения уже реализован в настройках типовой динамической страницы корзины, вам нужно будет исправить условие, при котором этот код выполняется(а также условие, внутри которого происходит запуск сессии session_start). Посмотрите код после комментария "Если сессия не была запущена - стартуем ее".
#
Re: Способы доставки на странице Корзины
Порядок. Разобрался Премного благодарен!!!
ITeka.ru - создание сайтов, дизайн, поддержка, реклама.
#
Re: Способы доставки на странице Корзины
Ammon, всегда пожалуйста.
#
Re: Способы доставки на странице Корзины
Добрый день, тот же вопрос (пустой массив  $a_param ). Так и не поняла,что надо изменить в условии.

в настройках типовой динамической страницы корзины у меня есть условие



// Если сессия не была запущена - стартуем ее

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();

   ...........
   /* Сохраняем данные */
   $shop->SetCart($MyCart);
}




я изменяю его на



// Если сессия не была запущена - стартуем ее

if (!class_exists("SiteUsers"))

{
   @session_start();
}

/* Необходимо перенести товары из кукисов в сессию и очистить кукисы */
if (!class_exists("SiteUsers"))

{
   /* Читаем массив из кукисов */
   $session_cart = array();
   $postpone_items = array();

   $MyCart = $shop->GetCart();

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

   ........

   /* Сохраняем данные */
   $shop->SetCart($MyCart);
}


то есть я в условии убираю зависимость от шага. А массив приходит все равно пустой, что я упускаю? Подскажите, пожалуйста!
#
Re: Способы доставки на странице Корзины
кто-нибудь может помочь?
#
Re: Способы доставки на странице Корзины
Чтобы метод SelectAllItemsFromCookieCart вернул данные, нужно чтобы данные корзины уже попали в сессию откуда он их возьмет.
Делается это насильным помещением даных корзины в сессию.
В настройках страницы исправляем на:
// Если сессия не была запущена - стартуем ее
if (!isset($_SESSION)  && !class_exists("SiteUsers"))  


меняем
if (isset($_POST['step_4']) || isset($_POST['step_1_1a'])) && !class_exists("SiteUsers")  

на
if (!class_exists("SiteUsers"))


в конец блока if (isset($_POST['recount'])
добавляем запись данных в сессию:
/* Сохраним корзину в сессию */  
  $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;


В коде страницы убираем блок удаления данных сессии:
if (isset($_SESSION['CART'][$shop_id]))
      {
         unset($_SESSION['CART'][$shop_id]);
      }
Авторизация