Реализация AJAX-заказа из корзины

Модератор
#
Реализация AJAX-заказа из корзины
Код типовой динамической страницы

<script type="text/javascript">
/**
* Функция обратного вызова при авторизации пользователя
*/
function fCallBackSiteUser(responseJS)
{   
   if (typeof responseJS != 'undefined')
   {
      if (typeof responseJS.result != 'undefined')
      {
         var oDivMessage = document.getElementById('result');

         if (oDivMessage)
         {
            oDivMessage.innerHTML = responseJS.result;
         }
      }

      if (typeof responseJS.authorization_message != 'undefined')
      {
         var oDivMessage = document.getElementById('authorization_message');

         if (oDivMessage)
         {
            oDivMessage.innerHTML = responseJS.authorization_message;
         }
      }

      if (typeof responseJS.cart != 'undefined')
      {
         var oDivMessage = document.getElementById('cart');

         if (oDivMessage)
         {
            oDivMessage.innerHTML = responseJS.cart;
         }
      }      
   }
}

function SetUserType()
{   
   var radio_group = document.getElementsByName('type_person');

   // Частное лицо
   if (radio_group[0].checked)
   {
      document.getElementById('authorization').style.display = "none";
      document.getElementById('private_person_info').style.display = "block";
      document.getElementById('legal_entity_info').style.display = "none";
      document.getElementById('authorization_message').innerHTML = "";    
      radio_group[3].value = 'private_person';            
   }

   // Юридическое лицо
   if (radio_group[1].checked)
   {
      document.getElementById('authorization').style.display = "none";   
      document.getElementById('private_person_info').style.display = "block";
      document.getElementById('legal_entity_info').style.display = "block";
      document.getElementById('authorization_message').innerHTML = "";
      radio_group[3].value = 'legal_entity';         
   }

   // Зарегистрированный пользователь
   if (radio_group[2].checked)
   {         
      document.getElementById('authorization').style.display = "block";   
      document.getElementById('private_person_info').style.display = "none";
      document.getElementById('legal_entity_info').style.display = "none";         
      radio_group[3].value = 'registered';   
   }
}

function ChangeSendFax()
{   
   var checkbox_send_fax = document.getElementById('send_fax_id');
   
   if (checkbox_send_fax.checked)
   {
      document.getElementById('id_fax').style.display = "block";      
   }   
   else
   {
      document.getElementById('id_fax').style.display = "none";      
   }
   
}

function ChangeLoginPassword()
{
   var login_password = document.getElementById('login_password_id');
   
   if (login_password.checked)
   {
      document.getElementById('tr_login_password').style.display = "";      
   }   
   else
   {
      document.getElementById('tr_login_password').style.display = "none";      
   }
}
</script>

<?php

$shop = & singleton('shop');

######################################################
#### Обработка принятия заказа от платежной системы ###
######################################################

// Обработка уведомления об оплате от RUpay
if (isset($_POST['rupay_action']))
{
      // Получаем ID заказа
      $order_id = to_int($_POST['rupay_order_id']);

      $order_row = $shop->GetOrder($order_id);

      if ($order_row)
      {
         // Вызов обработчика платежной системы
         $shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
      }
}

// Обработка уведомления об оплате от WebMoney
if (isset($_POST['LMI_PAYEE_PURSE']))
{
   // Получаем ID заказа
   $order_id = to_int($_POST['LMI_PAYMENT_NO']);

   $order_row = $shop->GetOrder($order_id);

   if ($order_row)
   {
      // Вызов обработчика платежной системы
      $shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
   }
}

############################################################
### [END] Обработка принятия заказа от платежной системы ###
############################################################

if (class_exists("SiteUsers"))
{
   /* Получаем id текущего пользователя сайта */
   $SiteUsers = & singleton('SiteUsers');
   $site_users_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
   $site_users_id = false;
}

/*
Вывод информации о статусе платежа после его совершения и перенапрпавления с платежной системы
*/
if (isset($_GET['payment']) && isset($_GET['order_id']))
{
   // Получаем ID заказа
   $order_id = to_int($_GET['order_id']);

   $order_row = $shop->GetOrder($order_id);

   // Если заказ принадлежит текущему авторизированному пользователю
   if ($order_row['site_users_id'] == $site_users_id)
   {
      if (to_str($_GET['payment']) == 'success')
      {
         ?>
         <h1>Подтверждение платежа</h1>
         <p>Спасибо, информация об оплате заказа <strong>№ <?php echo $order_id?></strong> получена.</p>
         <?php
      }
      else
      {
         ?>
         <h1>Платеж не получен</h1>
         <p>К сожалению при оплате заказа <strong>№ <?php echo $order_id?></strong> произошла ошибка.</p>
         <?php
      }
   }
   elseif ($site_users_id === false) // Для случаев, когда отключен модуль "Пользователи сайта"
   {
      ?>
      <h1>Подтверждение платежа</h1>
      <p>Благодарим за посещение нашего магазина!</p>
      <?php
   }
   else
   {
      ?>
      <h1>Ошибка</h1>
      <p>Неверный номер заказа!</p>
      <?php
   }

   // Прерываем выполнение типовой динамической страницы
   return true;
}

/* Идентификатор интернет-магазина */
$shop_id = to_int($GLOBALS['LA']['shop_id']);

?>
<div id="cart">
<?php
   /* Выводим корзину */
   $shop->ShowCart($shop_id, $site_users_id,
   to_str($GLOBALS['LA']['xsl_cart']), array('shop_coupon_text' => to_str($_REQUEST['shop_coupon_text'])));
   
   // Получаем вес заказанных товаров
   $weight_all = 0;

/* Получаем данные об элементах из корзины*/
   $row = $shop->GetItemsFromCart($site_users_id, $shop_id);

    if (count(to_array($row)) > 0)
    {
       /* В цикле разбираем массив товаров, полученных из корзины*/
       foreach ($row as $key => $value)
       {
          /* Проверяем наличие данного товара в базе*/
          $item_row = $shop->GetItem($value['shop_items_catalog_item_id']);
          if ($item_row)
          {
             /* Проверяем является ли данный товар отложенным*/
             if (!to_int($value['shop_cart_flag_postpone'])) /* если товар не отложен*/
             {  
                /* Добавляем вес товара в общий вес*/
                $weight_all += $value['shop_cart_item_quantity'] * $item_row['shop_items_catalog_weight'];
             }                          
          }
       }
   
      // Вес товаров больше 0
      if ($weight_all > 0)
      {
         /* Отображаем форму ввода адреса */   
         // Не выбираем show_location, show_city и show_city_area, т.к. подгружаются через AJAX
         $shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id, array('show_location' => false, 'show_city' => false, 'show_city_area' => false));
      }
      else
      {
   ?>      
      <form id="address" enctype="multipart/form-data" action="./" method="post" name="address">
      <div id="hidden_id" style="margin-top: 10px;">Выбранные Вами товары возможно доставить бесплатно по электронной почте или скачать с нашего сайта после оформления заказа.</div>
      </form>
            
      <SCRIPT type="text/javascript" language="JavaScript">
         var oldHandler=window['onload'];
         window['onload']=function(){if(typeof(oldHandler)=='function'){oldHandler();}newHandler();};
         function newHandler(){
            AjaxSendForm(fCallBackSiteUser, '&action=ajax_step1&no_weight=1', document.getElementById('hidden_id'));
         }
      </SCRIPT>
      
   <?php    
      }
   }
   ?>
   <!-- Блок для отображения стоимости доставки -->
   <div id="result">
   </div>
   </div>   


Код настроек типовой динамической страницы

<?php
function rand_str($size)
{
   $feed = "0123456789";
   
   for ($i=0; $i < $size; $i++)
   {
      @$rand_str .= substr($feed, rand(0, strlen($feed)-1), 1);
   }
   
   return $rand_str;
}

/* Создаем экземпляр класса магазина (при создании устанавливаем флаг необходимости очитстки кукисов в истину) */
$shop = new shop(true);

/* Идентификатор интернет-магазина */
$shop_id = to_int($GLOBALS['LA']['shop_id']);

/**
* Использовать ли контроль данных, полученных из cookies
*/
// $shop->use_cookies_read_control = true;

// Обработка AJAX-запросов при заказе
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'get_location' && isset($_REQUEST['shop_country_id']))
{
   $shop_country_id = to_int($_REQUEST['shop_country_id']);

   $result = array();

   if ($shop_country_id)
   {
      // Расположения заполняем только тогда, когда страна указана
      $res = $shop->GetAllLocation($shop_country_id);

      if ($res)
      {
         while ($row = mysql_fetch_assoc($res))
         {
            $result[$row['shop_location_id']] = $row['shop_location_name'];
         }
      }
   }

   $JsHttpRequest = new JsHttpRequest(SITE_CODING);

   $GLOBALS['_RESULT'] = array(
   'result' => $result);

   echo $JsHttpRequest->LOADER;
   exit();
}

if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'get_city' && isset($_REQUEST['shop_location_id']))
{
   $shop_location_id = to_int($_REQUEST['shop_location_id']);

   $result = array();

   if ($shop_location_id)
   {
      // Города заполняем только тогда, когда расположение указано
      $res = $shop->GetAllCity($shop_location_id);

      if ($res)
      {
         while ($row = mysql_fetch_assoc($res))
         {
            $result[$row['shop_city_id']] = $row['shop_city_name'];
         }
      }
   }

   $JsHttpRequest = new JsHttpRequest(SITE_CODING);

   $GLOBALS['_RESULT'] = array(
   'result' => $result);

   echo $JsHttpRequest->LOADER;
   exit();
}

if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'get_cityarea' && isset($_REQUEST['shop_city_id']))
{
   $shop_city_id = to_int($_REQUEST['shop_city_id']);

   $result = array();

   // Города заполняем только тогда, когда расположение указано
   if ($shop_city_id)
   {
      $res = $shop->GetAllCityArea($shop_city_id);

      if ($res)
      {
         while ($row = mysql_fetch_assoc($res))
         {
            $result[$row['shop_city_area_id']] = $row['shop_city_area_name'];
         }
      }
   }

   $JsHttpRequest = new JsHttpRequest(SITE_CODING);

   $GLOBALS['_RESULT'] = array(
   'result' => $result);

   echo $JsHttpRequest->LOADER;
   exit();
}


if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'ajax_step1')
{
   ob_start();
   
   /* Сохраняем данные, введенные на первом этапе */
   
   $country = to_int($_POST['country']);
   $location = to_int($_POST['location']);
   $city = to_int($_POST['sel_city']);
   $city_area = to_int($_POST['sel_city_area']);
   

   /* Пишем информацию об адресе доставки в сессию */
   $_SESSION['country'] = $country;
   $_SESSION['location'] = $location;
   $_SESSION['city'] = $city;
   $_SESSION['city_area'] = $city_area;
   $_SESSION['index'] = to_str($_POST['index']);
   $_SESSION['full_address'] = to_str($_POST['full_address']);

   /* Индекс и полный адрес (в массив дополнительных параметров) */
   $external_propertys['index'] = to_str($_POST['index']);
   $external_propertys['full_address'] = to_str($_POST['full_address']);

   
   if (class_exists("SiteUsers"))
   {
      /* Определяем идентификатор текущего пользователя */
      $SiteUsers = & singleton('SiteUsers');
      $site_users_id = $SiteUsers->GetCurrentSiteUser();
   }
   else
   {
      $site_users_id = false;
   }
   
   ?>
   <form method="POST" action="./" enctype="multipart/form-data">
   <?php
   if (isset($_REQUEST['no_weight']))
   {
      ?>
      <input type="hidden" name="cond_of_delivery" value="3" />
      <?php
   }
   else
   {
      /* Получаем количество элементов, их общую цену, вес, валюту для заданного пользователя */
      $a_param = $shop->SelectAllItemsFromCartForUser($shop_id,
      $site_users_id);
   
      /* Выбираем все доступные типы доставки (с группировкой по типу доставки) */
      $param = array();
      
      $param['shop_coupon_text'] = to_str($_SESSION['shop_coupon_text']);
      
      $shop->ShowTypeOfDelivery($shop_id, $country, $location, $city, $city_area, $a_param['weight'], $a_param['price'],
      to_str($GLOBALS['LA']['xsl_shop_delivery']), $param, $external_propertys);
   }
   
   if (!$site_users_id)
   {
   ?>
   <h2>Кто покупатель</h2>   
   
   
   <div>
      <input type = "radio"  value="private_person"  name="type_person" id="private_person_id" onclick="SetUserType()"/><label for="private_person_id">Частное лицо</label>
      &nbsp;&nbsp;<input type="radio" value="legal_entity" name="type_person" id="legal_entity_id"  onclick="SetUserType()"/><label for="legal_entity_id">Юридическое лицо</label>
      &nbsp;&nbsp;<input type="radio" value="registered" name="type_person" id="registered_id" onclick="SetUserType()" checked="checked"/><label for="registered_id">Уже зарегистрирован</label>
   </div>
   
   <div id="authorization_message" style="color: #f00"></div>
      
   <div id="authorization">
   
      <table>
         <tr>
            <td>Логин<br /><input type="text" name="login" size="20" /></td>
            <td>Пароль<br /><input type="password" name="password" size="20" /></td>      
         </tr>         
      </table>
   </div>   
   
   <div id="private_person_info" style="display: none;">
      <h2>Контактная информация</h2>
      <table>
         <tr>
            <td>ФИО<br /><input type="text" name="fio" size="55" /></td>
            <td colspan="2">Телефон. <i>Например +7(495)988-3010</i><br /><input type="text" name="phone" size="40" /></td>
         </tr>
         <!--
         <tr>
            <td colspan="2">Ваш e-mail:&nbsp;<input type="text" name="email" size="30" /></td>
         </tr>
         -->
         <tr>
            <td colspan="3"><input type="checkbox" name="login_password" id="login_password_id" onChange="ChangeLoginPassword()"/><label for="login_password_id">Если хотите, можно указать логин, пароль и e-mail</label></td>
         </tr>
         <tr style="display: none;" id="tr_login_password">
            <td>Логин<br /><input type="text" name="new_login" size="30" /></td>
            <td>Пароль<br /><input type="text" name="new_password" size="30" /></td>
            <td>Ваш e-mail<br /><input type="text" name="email" size="30" /></td>
         </tr>         
      </table>
   </div>
         
   
   <div id="legal_entity_info" style="display: none;">
      <h2>Информация о компании</h2>
      <table>
         <tr>
            <td>Наименование компании<br /><input type="text" name="company_name" size="55" /></td>
            <td>ИНН/КПП<br /><input type="text" name="inn" size="25"/></td>
         </tr>
         
         <tr>
            <td colspan="2">Юр. адрес<br /><input type="text" name="juridical_address" size="55"/></td>
         </tr>
         <tr>
            <td colspan="2">Фактический адрес<br /><input type="text" name="actual_address" size="55"/></td>
         </tr>
         
         <tr>
            <td colspan="2"><input type="checkbox" name="send_fax" id="send_fax_id" onChange="ChangeSendFax()"/><label for="send_fax_id">Отправить счет по факсу</label>
            <div id="id_fax" style="display: none;">Номер факса&nbsp;<input type="text" name="fax" size="15" /></div>
            </td>
         </tr>
         
      </table>
   </div>
   
   <?php
   }
   
   /* Выводим  платежные системы */
   //$external_propertys['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);

   $shop->ShowSystemOfPay(to_str($GLOBALS['LA']['xsl_system_of_pay']));   
   ?>   
   <div>Комментарии к заказу:<br /><textarea name="order_description" cols="50" rows="3"/></textarea></div>
   
   <input type="submit" value="Оплатить" name="pay" onclick="return AjaxSendForm(fCallBackSiteUser, '&action=ajax_step_pay', this)"/>   
   </form>
   <?php   
   
   $result = ob_get_clean();
   
   $JsHttpRequest = new JsHttpRequest(SITE_CODING);

   $GLOBALS['_RESULT'] = array(
   'result' => $result);

   echo $JsHttpRequest->LOADER;
   exit();
}

// END обработка AJAX-запросов при заказе

if (class_exists("SiteUsers"))
{
   /* Определяем идентификатор текущего пользователя */
   $SiteUsers = & singleton('SiteUsers');
   $site_users_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
   $site_users_id = false;
}

// Повторение заказа
if (to_str($_REQUEST['action']) == 'repeat')
{
   $shop_order_id = to_int($_REQUEST['shop_order_id']);

   $order_row = $shop->GetOrder($shop_order_id);

   // Заказ найден
   if ($order_row)
   {
      // Если заказ принадлежит этому пользователю
      if ($order_row['site_users_id'] == $site_users_id && $site_users_id != 0)
      {
         $result_order_items = $shop->GetOrderItems($shop_order_id);
         $shop_id_from_order = to_int($order_row['shop_shops_id']);

         while ($row = mysql_fetch_assoc($result_order_items))
         {
            // Число товаров передаем, если посетитеь кладет в корзину больше одного товара
            if (to_int( $row['shop_order_items_quantity']) > 0)
            {
               $count = to_int( $row['shop_order_items_quantity']);
            }

            /* Добавляем товар в корзину */
            $shop->AddIntoCart(array('user_id' => $site_users_id,
            'shop_id' => $shop_id_from_order,
            'item_id' => $row['shop_items_catalog_item_id'],
            'count' => $count));
         }
      }
   }
}

// Запускаем сессию, если пользователь не авторизирован и пришли данные для регистрации
if ($site_users_id == 0 && isset($_POST['site_users_login'])
&& isset($_POST['site_users_password'])
&& isset($_POST['site_users_email'])
&& !isset($_SESSION))
{
   session_start();
}

$GLOBALS['external_propertys'] = array();


/* Переданы данные для авторизации */
if (isset($_REQUEST['action']) && $_REQUEST['action']== 'ajax_step_pay')
{
   ob_start();

   // Пользователь не авторизован
   if (!$site_users_id)
   {
      // Пользователь зарегистрирован
      if (isset($_POST['type_person']) && $_POST['type_person'] == 'registered')
      {
         /* Проверяем правильность введенных данных */
         $site_users_id = $SiteUsers->ValidUser(to_str($_POST['login']), to_str($_POST['password']));
      }
      else // Пользователь не зарегистрирован
      {            
         $user_login = to_str($_POST['new_login']);
         $user_login = trim($user_login);
         
         $user_password = to_str($_POST['new_password']);
         $user_password = trim($user_password);
         
         $user_email = to_str($_POST['email']);
         $user_email = trim($user_email);
         
         // Не задан логин  
         if(empty($user_login))
         {
            // Генерируем логин
            $user_login = 'AST' . rand_str('6');      
         }
         
         // Не задан пароль
         if(empty($user_password))
         {
            // Генерируем пароль
            $user_password = rand_str('6');
         }
         
         if(empty($user_email))
         {
            // Генерируем e-mail
            $user_email = $user_login . '@astsoft.ru';
         }
         
         $site_user_param = array();
         
         $fio = to_str($_POST['fio']);
         $fio = trim($fio);
         
         $fio_mas = explode(' ', $fio);            
         
         $site_user_param['site_users_name'] = to_str($fio_mas[1]);
          $site_user_param['site_users_surname'] = to_str($fio_mas[0]);
          $site_user_param['site_users_patronymic'] = to_str($fio_mas[2]);
         
         $site_user_param['site_users_login'] = $user_login;
         $site_user_param['site_users_password'] = $user_password;
         $site_user_param['site_users_email'] = $user_email;
         $site_user_param['site_users_company'] = to_str($_POST['company_name']);
         $site_user_param['site_users_phone'] = to_str($_POST['phone']);      
          $site_user_param['site_users_fax'] = to_str($_POST['fax']);
          $site_user_param['site_users_postcode'] = to_int($_POST['index']);      
         $site_user_param['site_users_confirmation'] = true;         
         $site_user_param['users_id'] = false;
   
           $site_users_id = $SiteUsers->InsertSiteUser($site_user_param);                                          
      }
   }
         
   if ($site_users_id > 0)
   {      
      // Авторизуем пользователя
      $SiteUsers->SetCurrentSiteUser($site_users_id);
      
      $_SESSION['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);
      
      $_SESSION['order_description'] = to_str($_POST['order_description']);
      
      $row = $shop->GetCondOfDelivery($_SESSION['cond_of_delivery']);
   
      /* Получаем данные о магазине */
      $shop_row = $shop->GetShop($shop_id);
         
      /* идентификатор валюты магазина */
      $shop_currency_id = to_int($shop_row['shop_currency_id']);
      $coefficient = $shop->GetCurrencyCoefficientToShopCurrency($row['shop_currency_id'], $shop_currency_id);
      $price_delivery = sprintf("%.2f", $row['shop_cond_of_delivery_price'] * $coefficient);
   
      $_SESSION['cond_of_delivery_price'] = $price_delivery;
   
      /* Запоминаем купон */
      $_SESSION['shop_coupon_text'] = to_str($_POST['shop_coupon_text']);
   
   
      //print_r($_SESSION);
      /* Если выбрана (существует) платежная система */
      
      if (to_int($_POST['system_of_pay_id']) != 0)
      {         
         // Вызываем обработчик платежной системы
         if (!$shop->ExecSystemsOfPayHandler(to_int($_POST['system_of_pay_id'])))
         {
            // Не удалось найти обработчик
            show_error_message("Не найден обработчик платежной системы с номером ".to_int($_POST['system_of_pay_id']));
         }
               
      }
      else
      {
         // Ошибка, не указана платежная система!
         show_error_message('Ошибка! Не указана ни одна платежная система.');
      }
   }
   elseif($site_users_id == -2)
   {
      echo 'Пользователь с такими данными уже зарегистрирован!';
   }
   else
   {
      echo 'Неверные данные пользователя!';
   }
      
   $result = ob_get_contents();
   
   $JsHttpRequest = new JsHttpRequest(SITE_CODING);

   if ($site_users_id > 0)
   {      
      $GLOBALS['_RESULT'] = array('cart' => $result);      
   }
   else
   {   
      $GLOBALS['_RESULT'] = array('authorization_message' => $result);
   }

   ob_clean();
   echo $JsHttpRequest->LOADER;
   
   exit();   
}

/* AJAX добавление товара в корзину */
if (isset($_GET['ajax_add_item_id']))
{
   $param = array();
   $param['shop_id'] = $shop_id;
   $param['item_id'] = to_int($_GET['ajax_add_item_id']);
   $param['user_id'] = $site_users_id;

   // Число товаров передаем, если посетитеь кладет в корзину больше одного товара
   if (to_int($_GET['count']) > 0)
   {
      $param['count'] = to_int($_GET['count']);
   }

   // Добавляем товар в корзину
   $shop->AddIntoCart($param);

   // Отображаем корзину
   $JsHttpRequest = new JsHttpRequest(SITE_CODING);

   ob_start();
   $shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_little_cart']));
   $little_cart_html = ob_get_clean();
   
   $GLOBALS['_RESULT'] = array('cart' => $little_cart_html);

   echo $JsHttpRequest->LOADER;
   exit();
}

/* добавление товара в корзину */
if (to_str($_GET['action']) == 'add')
{
   $param = array();
   $param['shop_id'] = $shop_id;
   $param['item_id'] = to_int($_GET['item_id']);
   $param['user_id'] = $site_users_id;

   // Число товаров передаем, если посетитеь кладет в корзину больше одного товара
   if (to_int($_GET['count']) > 0)
   {
      $param['count'] = to_int($_GET['count']);
   }

   /* Добавляем товар в корзину */
   $shop->AddIntoCart($param);
}

/* Удаляение товара из корзины */
if (to_str($_GET['action']) == 'delete_item')
{
   $param = array();
   $param['shop_id'] = $shop_id;
   $param['item_id'] = to_int($_GET['item_id']);

   /* Проверяем наличие пользователя */
   if ($site_users_id != 0)
   {
      $param['user_id'] = $site_users_id;
   }

   $shop->DeleteCart($param);
}

/* Пересчет товара в корзине */
if (isset($_POST['recount']))
{
   $param = array();

   foreach ($_POST as $key => $value)
   {
      $param['item_id'] = $key;

      /* Получаем идентификатор записи в корзине по идентификатору пользователя и товара */
      $cart_id = $shop->GetItemFromCart($shop_id, $site_users_id, $param['item_id']);

      $param['cart_id'] = to_int($cart_id['shop_cart_id']);
      $param['user_id'] = $site_users_id;
      $param['shop_id'] = $shop_id;
      $param['count'] = to_int($value);

      /* Если установлен флажок - делаем товар отложенным */
      $param['postpone'] = !empty($_POST['flag_postpone'.$key]) ? 1 : 0;

      /* Если количество = 0 - удаляем из корзины */
      if ($param['count'] == 0)
      {
         $shop->DeleteCart($param);
      }
      else
      {
         $shop->UpdateCart($param);
      }
   }
}
?>


Также необходимо поменять стандартные XSL-шаблоны

Измененный код XSL-шаблона "МагазинАдресДоставки"

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/locations">
      <!--
      <table border="0" cellpadding="5" cellspacing="5" class="shop_navigation_table">
         <tr>
            <td id="shop_navigation_current">Адрес доставки</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Способ доставки</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Форма оплаты</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Данные доставки</td>
         </tr>
      </table>
      -->
      
      <SCRIPT type="text/javascript" language="JavaScript">
         <xsl:comment>
            <xsl:text disable-output-escaping="yes">
               <![CDATA[
               location_select_id = "location";
               city_select_id = "sel_city";
               cityarea_select_id = "sel_city_area";
               ]]>
            </xsl:text>
         </xsl:comment>
      </SCRIPT>
      
      
      
      
      <form name="address" id="address" method="POST" action="./" enctype="multipart/form-data">
         <h1>Доставка</h1>
         <!--
         <p>
            <a href="{shop/path}cart/">Корзина</a>
         </p>
         -->
         <table>
         <tr><td>В корзине есть товар, который требет физической доставки курьером или почтой. Выберите пожалуйста адрес доставки</td></tr>
            <tr>
               <td>Страна:&#xA0;<select id="country" name="country" onchange="doSetLocation(this.options[this.selectedIndex].value, '{/locations/shop/path}cart/')">
                     <xsl:apply-templates select="country"/>
                  </select>&#xA0;&#xA0;
                  Область:&#xA0;
                  <xsl:variable name="country_id" select="/locations//country[@select = 1]/@id" />
                  <select name="location" id="location" onchange="doSetCity(this.options[this.selectedIndex].value, '{/locations/shop/path}cart/')">
                     <option value="0">..</option>
                     <xsl:apply-templates select="location[@parent = $country_id]"/>
                  </select>
               </td>
            </tr>
            <tr>
               <td>Город:&#xA0;<select name="sel_city" id="sel_city" onchange="doSetCityArea(this.options[this.selectedIndex].value, '{/locations/shop/path}cart/')">
                     <option value="0">..</option>
                     <xsl:apply-templates select="city[@parent = location[@parent = $country_id]]"/>
                  </select>&#xA0;&#xA0;
                  Район города:&#xA0;<select name="sel_city_area" id="sel_city_area">
                     <option value="0">..</option>
                  </select>&#xA0;&#xA0;
               </td>
            </tr>
            <tr>
               <td>Индекс:&#xA0;<input type="text" size="5" name="index" value=""/>&#xA0;&#xA0;
               Улица, дом, квартира:&#xA0;<input type="text" size="30" name="full_address" value=""/></td>
            </tr>
            <tr>
               <td>
                  <input name="step_1" value="Далее &gt;&gt;" type="submit" onclick="return AjaxSendForm(fCallBackSiteUser, '&amp;action=ajax_step1', this)"></input>
               </td>
            </tr>
         </table>
      </form>
      
      <!-- Заполняем все дочерние элементы страны -->
      <SCRIPT type="text/javascript" language="JavaScript">
         var oldHandler=window['onload'];
         window['onload']=function(){if(typeof(oldHandler)=='function'){oldHandler();}newHandler();};
         function newHandler(){
         doSetLocation(document.getElementById('country').options[document.getElementById('country').selectedIndex].value, '<xsl:value-of select="/locations/shop/path" />cart/');
         }
      </SCRIPT>
      
   </xsl:template>
   
   <!-- Шаблон заполняет options для стран -->
   <xsl:template match="country">
      <xsl:choose>
         <!-- Если страна задана по умолчанию -->
         <xsl:when test="@select=1">
            <option value="{@id}" selected="">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </option>
         </xsl:when>
         <xsl:otherwise>
            <option value="{@id}">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </option>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
   
   <!-- Шаблон заполняет options для местоположений (областей) -->
   <xsl:template match="location">
      <option value="{@id}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>
   
   <!-- Шаблон заполняет options для городов -->
   <xsl:template match="city">
      <option value="{@id}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>
   
   <!-- Шаблон заполняет options для районов -->
   <xsl:template match="cityarea">
      <option value="{@id}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>
   
</xsl:stylesheet>


Измененный код XSL-шаблона "МагазинДоставки"

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- Шаблон для типов доставки -->
   <xsl:template match="/types_of_delivery">
      
      <!--<table border="0" cellpadding="5" cellspacing="5" class="shop_navigation_table">
         <tr>
            <td id="shop_navigation">Адрес доставки</td>
            <td>&#x2192;</td>
            <td id="shop_navigation_current">Способ доставки</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Форма оплаты</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Данные доставки</td>
         </tr>
      </table>-->
      
      <!--<form name="address" id="address" method="POST">-->
         <h2>Стоимость доставки</h2>
         
         <!-- Проверяем количество способов доставки -->
         <xsl:choose>
            <xsl:when test="count_cond_of_delivery=0">
               <p>По выбранным Вами условиям доставка не возможна, заказ будет оформлен без доставки.</p>
               <p>Уточнить данные о доставке Вы можете, связавшись с представителем нашей компании.</p>
               <input type="hidden" name="type_of_delivery" value="0"/>
            </xsl:when>
            <xsl:otherwise>
               
               <table cellspacing="0" cellpadding="0" border="0" class="shop_cart_table">
                  <tr class="shop_cart_table_title">
                     <td>Способ доставки</td>
                     <td>Описание</td>
                     <td>Цена доставки</td>
                     <td>Стоимость товаров</td>
                     <td>Итого</td>
                  </tr>
                  
                  <xsl:apply-templates select="type_of_delivery"/>
               </table>
            </xsl:otherwise>
         </xsl:choose>
         <!--<p>
            <input name="step_3" value="Далее &gt;&gt;" type="submit"/>
         </p>-->
         <!--</form>-->
   </xsl:template>
   
   <xsl:template match="type_of_delivery">
      
      <tr>
         <td>
            <input type="radio" value="{shop_cond_of_delivery_id}" id="cond_of_delivery{shop_cond_of_delivery_id}" name="cond_of_delivery" style="border: 0px">
               <xsl:if test="position() = 1">
                  <xsl:attribute name="checked"></xsl:attribute>
               </xsl:if>
            </input>&#xA0;
            <label for="cond_of_delivery{shop_cond_of_delivery_id}">
               <b>
                  <xsl:value-of select="name"/>
               </b>
            </label>
         </td>
         <td>
            <!-- Описание доставки -->
            <p>
               <xsl:value-of disable-output-escaping="yes" select="description"/>
            </p>
         </td>
         <td>
            <xsl:value-of select="price"/>&#xA0;<xsl:value-of select="/types_of_delivery/shop/shop_currency/shop_currency_name"/></td>
         <td>
            <xsl:value-of select="cart_sum"/>&#xA0;<xsl:value-of select="/types_of_delivery/shop/shop_currency/shop_currency_name"/>
         </td>
         <td style="font-weight: bold">
            <xsl:value-of select="total"/>&#xA0;<xsl:value-of select="/types_of_delivery/shop/shop_currency/shop_currency_name"/>
         </td>
      </tr>
   </xsl:template>
</xsl:stylesheet>


Измененный код XSL-шаблона "МагазинКорзина"

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- Шаблон для корзины -->
   <xsl:variable name="recount" select="recount"/>
   
   <xsl:template match="/cart">
      
      <xsl:choose>
         <xsl:when test="(count_item=0) and (count_postpone_item=0)">
            <!-- В корзине нет ни одного элемента -->
            <p class="title">В корзине нет ни одного товара.</p>
            
            <p>
               <xsl:choose>
                  <xsl:when test="user_id != 0">Для оформления заказа добавьте товар в корзину.</xsl:when>
                  <xsl:when test="site_users_class_exists = 1">Вы не авторизированы. Если Вы зарегистрированный пользователь, данные Вашей корзины станут видны после авторизации.</xsl:when>
                  <xsl:otherwise></xsl:otherwise>
               </xsl:choose>
            </p>
         </xsl:when>
         <xsl:otherwise>
            <!-- Вывод корзины -->
            <h1>Моя корзина</h1>
            
            <p>Для оформления заказа, нажмите "Оформить заказ".</p>
            
            <form action="{/cart/shop/path}cart/" name="address" method="POST">
               <table cellspacing="0" cellpadding="0" border="0" class="shop_cart_table">
                  <!-- Если есть товары -->
                  <xsl:if test="count(itemincart[flag_postpone=0]) &gt; 0">
                     <tr class="shop_cart_table_title">
                        <td>Изображение</td>
                        <td width="100">Товар</td>
                        <!--<td width="70">Вес</td>-->
                        <td width="70">Кол-во</td>
                        <td width="70">Цена</td>
                        <td>Сумма</td>
                        <td>Отложить</td>
                        <!--<td>Действия</td>-->
                     </tr>
                     <xsl:apply-templates select="itemincart[flag_postpone=0]"/>
                     <tr class="shop_cart_table">
                        <td>&#xA0;</td>
                        <td>
                           <b>Итого:</b>
                        </td>
                        <td>
                           <b>
                              <xsl:value-of disable-output-escaping="yes" select="totalquantity"/>
                           </b>
                        </td>
                        <td>&#xA0;</td>
                        <td>
                           <b>
                              <xsl:value-of disable-output-escaping="yes" select="total_sum_without_discount"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="shop/shop_currency/shop_currency_name"/></b>
                        </td>
                        <td>&#xA0;</td>
                        <!--<td>&#xA0;</td>-->
                     </tr>
                     <xsl:if test="total_sum_without_discount &gt; totalsum">
                        <tr class="shop_cart_table">
                           <td style="border-bottom: thin dashed #DADADA">
                              &#xA0;
                           </td>
                           <td style="border-bottom: thin dashed #DADADA">
                              <b>Скидка:</b>
                           </td>
                           <td style="border-bottom: thin dashed #DADADA">&#xA0;</td>
                           <td style="border-bottom: thin dashed #DADADA">&#xA0;</td>
                           <td style="border-bottom: thin dashed #DADADA">
                              <b>
                                 <xsl:value-of disable-output-escaping="yes" select="format-number(total_sum_without_discount - totalsum, '#.00')"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="shop/currency"/></b>
                           </td>
                           <td style="border-bottom: thin dashed #DADADA">&#xA0;</td>
                        </tr>
                        <tr class="shop_cart_table">
                           <td style="border-bottom: none">
                              &#xA0;
                           </td>
                           <td style="border-bottom: none">
                              <b>Всего:</b>
                           </td>
                           <td style="border-bottom: none">&#xA0;</td>
                           <td style="border-bottom: none">&#xA0;</td>
                           <td style="border-bottom: none">
                              <b>
                                 <xsl:value-of disable-output-escaping="yes" select="totalsum"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="shop/currency"/></b>
                           </td>
                           <td style="border-bottom: none">&#xA0;</td>
                        </tr>
                     </xsl:if>
                  </xsl:if>
                  
                  <!-- Если есть отложенные товары -->
                  <xsl:if test="count(itemincart[flag_postpone=1]) &gt; 0">
                     <tr class="shop_cart_table">
                        <td colspan="7" style="padding-top:10px">
                           <strong>
                              <big>Отложенные товары</big>
                           </strong>
                        </td>
                     </tr>
                     <tr class="shop_cart_table_title">
                        <td>Изображение</td>
                        <td>Название</td>
                        <!--<td width="70">Вес</td>-->
                        <td width="70">Кол &#x2014; во</td>
                        <td width="70">Цена</td>
                        <td>Сумма</td>
                        <td>Отложить</td>
                        <!--<td>Действия</td>-->
                     </tr>
                     <xsl:apply-templates select="itemincart[flag_postpone=1]"/>
                     <tr class="shop_cart_table">
                        <td>&#xA0;</td>
                        <td>
                           <b>Итого:</b>
                        </td>
                        <td>
                           <b>
                              <xsl:value-of disable-output-escaping="yes" select="totalquantity_postpone_item"/>
                           </b>
                        </td>
                        <td>&#xA0;</td>
                        <td>
                           <b>
                              <xsl:value-of disable-output-escaping="yes" select="totalsum_postpone_item"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="shop/shop_currency/shop_currency_name"/></b>
                        </td>
                        <td>&#xA0;</td>
                        <td>&#xA0;</td>
                     </tr>
                  </xsl:if>
               </table>
               
               <!-- Купон -->
               <div style="padding: 5px;">
                  Купон:&#xA0;
                  <input name="shop_coupon_text" type="text" value="{coupon_text}" style="margin-right: 10px"/>
               </div>
               
               <!-- Кнопки -->
               <input name="recount" value="Пересчитать" type="submit" style="margin-right: 10px"/>
               
               <xsl:choose>
                  <xsl:when test="site_users_class_exists = 1"></xsl:when>
                  <xsl:otherwise>
                     <!-- В случае если отключен модуль пользователей сайта, запрашиваем информацию
                     о пользователе сайта здесь -->
                     <table border="0" cellspacing="0" cellpadding="2">
                        <tr class="shop_cart_table_title">
                           <td colspan="2" align="center">Данные о заказчике</td>
                        </tr>
                        <tr>
                           <td>Фамилия</td>
                           <td>
                              <input name="site_users_surname" type="text" value="" size="40"/>
                           </td>
                        </tr>
                        <tr>
                           <td>Имя</td>
                           <td>
                              <input name="site_users_name" type="text" value="" size="40"/>
                           </td>
                        </tr>
                        <tr>
                           <td>Отчество</td>
                           <td>
                              <input name="site_users_patronymic" type="text" value="" size="40"/>
                           </td>
                        </tr>
                        <tr>
                           <td>E-mail</td>
                           <td>
                              <input name="site_users_email" type="text" value="" size="40"/>
                           </td>
                        </tr>
                        <tr>
                           <td>Телефон</td>
                           <td>
                              <input name="site_users_phone" type="text" value="" size="40"/>
                           </td>
                        </tr>
                        <tr>
                           <td>Факс</td>
                           <td>
                              <input name="site_users_fax" type="text" value="" size="40"/>
                           </td>
                        </tr>
                        <tr>
                           <td>Адрес</td>
                           <td>
                              <input name="site_users_address" type="text" value="" size="40"/>
                           </td>
                        </tr>
                     </table>
                     <!-- Добавляем скрытое поле с указанием подшага -->
                     <input name="step_1_1a" type="hidden" value="1"/>
                  </xsl:otherwise>
               </xsl:choose>
               <!--
               <xsl:if test="user_id != 0 or site_users_class_exists = 0">
                  <input name="step_1" value="Оформить заказ" type="submit" style="font-weight: bold"/>
               </xsl:if>
               -->
            </form>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
   
   <!-- Шаблон для товара в корзине -->
   <xsl:template match="itemincart">
      <tr class="shop_cart_table">
         <td>
            <xsl:if test="item/small_image!=''">
               <img src="{item/small_image}"/>
            </xsl:if>
            
            <br/>
            <a href="?action=delete_item&amp;item_id={item/@id}">Удалить из корзины</a>
         </td>
         <td>
            
            <a href="{/cart/shop/path}{item/fullpath}{item/path}/">
               <xsl:value-of disable-output-escaping="yes" select="item/name"/>
            </a>
            <!-- Средняя оценка товара -->
            <div style="float: left; margin: 20px 0px 0px 0px">
               <b>Рейтинг:</b>
               <br/>
               <xsl:if test="item/comments/average_grade/node()">
                  <xsl:call-template name="show_average_grade">
                     <xsl:with-param name="grade" select="item/comments/average_grade"/>
                     <xsl:with-param name="const_grade" select="5"/>
                  </xsl:call-template>
               </xsl:if>
               <xsl:if test="not(item/comments/average_grade/node())">
                  <xsl:call-template name="show_average_grade">
                     <xsl:with-param name="grade" select="0"/>
                     <xsl:with-param name="const_grade" select="5"/>
                  </xsl:call-template>
               </xsl:if>
            </div>
            
            <div style="clear: both"></div>
         </td>
         <td style="white-space: nowrap">
            <input type="text" size="3" name="{item/@id}" value="{quantity}"/>&#xA0;<xsl:value-of select="item/mesure" disable-output-escaping="yes"/></td>
         <td style="white-space: nowrap">
            <!-- Цена -->
            <xsl:value-of disable-output-escaping="yes" select="item/price"/>&#xA0;<xsl:value-of select="item/currency" disable-output-escaping="yes"/></td>
         <td style="white-space: nowrap">
            <!-- Сумма -->
            <xsl:value-of disable-output-escaping="yes" select="item/price * quantity"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="item/currency"/></td>
         <td align="center">
            <!-- Отложенные товары -->
            <xsl:choose>
               <xsl:when test="flag_postpone=1">
                  <input type="checkbox" name="flag_postpone{item/@id}" checked=""/>
               </xsl:when>
               <xsl:otherwise>
                  <input type="checkbox" name="flag_postpone{item/@id}"/>
               </xsl:otherwise>
            </xsl:choose>
         </td>
         
      <!--<td align="center"><a href="?action=delete_item&amp;item_id={item/@id}" title="Удалить товар из корзины" alt="Удалить товар из корзины"><img src="/hostcmsfiles/images/delete.gif" /></a></td>-->
      </tr>
   </xsl:template>
   
   
   
   
   <!-- Вывод рейтинга товара -->
   <xsl:template name="show_average_grade">
      <xsl:param name="grade" select="0"/>
      <xsl:param name="const_grade" select="0"/>
      
      <!-- Чтобы избежать зацикливания -->
      <xsl:variable name="current_grade" select="$grade * 1"/>
      
      <xsl:choose>
         <!-- Если число целое -->
         <xsl:when test="floor($current_grade) = $current_grade and not($const_grade &gt; ceiling($current_grade))">
            
            <xsl:if test="$current_grade - 1 &gt; 0">
               <xsl:call-template name="show_average_grade">
                  <xsl:with-param name="grade" select="$current_grade - 1"/>
                  <xsl:with-param name="const_grade" select="$const_grade - 1"/>
               </xsl:call-template>
            </xsl:if>
            
            <xsl:if test="$current_grade != 0">
               <img src="/hostcmsfiles/images/stars_single.gif"/>
            </xsl:if>
         </xsl:when>
         <xsl:when test="$current_grade != 0 and not($const_grade &gt; ceiling($current_grade))">
            
            <xsl:if test="$current_grade - 0.5 &gt; 0">
               <xsl:call-template name="show_average_grade">
                  <xsl:with-param name="grade" select="$current_grade - 0.5"/>
                  <xsl:with-param name="const_grade" select="$const_grade - 1"/>
               </xsl:call-template>
            </xsl:if>
            
            <img src="/hostcmsfiles/images/stars_half.gif"/>
         </xsl:when>
         
         <!-- Выводим серые звездочки, пока текущая позиция не дойдет то значения, увеличенного до целого -->
         <xsl:otherwise>
            <xsl:call-template name="show_average_grade">
               <xsl:with-param name="grade" select="$current_grade"/>
               <xsl:with-param name="const_grade" select="$const_grade - 1"/>
            </xsl:call-template>
            <img src="/hostcmsfiles/images/stars_gray.gif"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
   
   <!-- Шаблон для вывода звездочек (оценки) -->
   <xsl:template name="for">
      <xsl:param name="i" select="0"/>
      <xsl:param name="n"/>
      
      <input type="radio" name="shop_comment_grade" value="{$i}" id="id_shop_comment_grade_{$i}">
         <xsl:if test="/shop/shop_comment_grade = $i">
            <xsl:attribute name="checked">
            </xsl:attribute>
         </xsl:if>
      </input>&#xA0;
      <label for="id_shop_comment_grade_{$i}">
         <xsl:call-template name="show_average_grade">
            <xsl:with-param name="grade" select="$i"/>
            <xsl:with-param name="const_grade" select="5"/>
         </xsl:call-template>
      </label>
      <br/>
      <xsl:if test="$n &gt; $i and $n &gt; 1">
         <xsl:call-template name="for">
            <xsl:with-param name="i" select="$i + 1"/>
            <xsl:with-param name="n" select="$n"/>
         </xsl:call-template>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>


Измененный код XSL-шаблона "МагазинПлатежнаяСистема"

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- Шаблон для платежных систем -->
   <xsl:template match="/list">
      
      <!--
      <table border="0" cellpadding="5" cellspacing="5" class="shop_navigation_table">
         <tr>
            <td id="shop_navigation">Адрес доставки</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Способ доставки</td>
            <td>&#x2192;</td>
            <td id="shop_navigation_current">Форма оплаты</td>
            <td>&#x2192;</td>
            <td id="shop_navigation">Данные доставки</td>
         </tr>
      </table>-->
      
      <h2>Методы оплаты</h2>
      
      <!--<form name="address" id="address" method="post">-->
         
         <xsl:choose>
            <xsl:when test="count_system_of_pay=0">
               <p>
                  <b>В данный момент нет доступных платежных систем!</b>
               </p>
               <p>Оформление заказа невозможно, свяжитесь с администрацией Интернет-магазина.</p>
            </xsl:when>
            <xsl:otherwise>
               <table cellspacing="0" cellpadding="0" border="0" class="shop_cart_table">
                  <tr class="shop_cart_table_title">
                     <td>Форма оплаты</td>
                     <td>Описание</td>
                  </tr>
                  <xsl:apply-templates select="system_of_pay"/>
               </table>
               <!--<p><input name="step_4" value="Далее &gt;&gt;" type="submit"/></p>-->
            </xsl:otherwise>
         </xsl:choose>
         <!--</form>-->
   </xsl:template>
   
   <xsl:template match="system_of_pay">
      <tr>
         <td width="40%">
            
            <input type="radio" class="input_radio" name="system_of_pay_id" value="{@id}" id="system_of_pay_{@id}" style="border: 0px">
               <xsl:if test="position() = 1">
                  <xsl:attribute name="checked"></xsl:attribute>
               </xsl:if>
            </input>
            &#xA0;
            <label for="system_of_pay_{@id}">
               <b>
                  <xsl:value-of select="name"/>
               </b>
            </label>
         </td>
         <td width="60%">
            <!-- Описание платежной системы -->
            <xsl:value-of disable-output-escaping="yes" select="description"/>
         </td>
      </tr>
   </xsl:template>
</xsl:stylesheet>


В XSL-шаблонах "ОплатаПриПолучении", "ОплатаПоФормеПД4", "ОплатаБезналичнаяОтЮрЛица" убрать следующий код

<table border="0" cellpadding="5" cellspacing="5" class="shop_navigation_table">
   <tr>
      <td id="shop_navigation">Адрес доставки</td>
      <td>&#x2192;</td>
      <td id="shop_navigation">Способ доставки</td>
      <td>&#x2192;</td>
      <td id="shop_navigation">Форма оплаты</td>
      <td>&#x2192;</td>
      <td id="shop_navigation_current">Данные доставки</td>
   </tr>
</table>
#
Re: Реализация AJAX-заказа из корзины
При использовании данного решения, в процессе оформления заказа, пишет нет активных способов оплаты.
#
Re: Реализация AJAX-заказа из корзины
Подскажите пожалуйста как исправить данную ошибку? или хотябы укажите направление куда копать.
#
Re: Реализация AJAX-заказа из корзины
у меня тоже не совсем получилось. выходят ошибки типа failed to transformXLT/
Тема по прежнему актуальна, в частности для тех кто хочет оформлять заказы в 1 шаг.
Весьма элегантно задача выполнена на сайте serveroom . ru
AJAX и Javascript делают процесс простым и доходчивым для покупателей.
Может кто подскажет как такое чудо можно реализовать?
www.energoprofi23.ru
#
Re: Реализация AJAX-заказа из корзины
У кого есть рабочая версия такой реализации оформления заказа? Может как-то по-другому можно реализовать? Подсобите!
Делись своими знаниями. Это путь к бессмертию.
#
Re: Реализация AJAX-заказа из корзины
тоже озадачен этим вопросом, просмотрел что дано выше - не работает.
Данная реализация по всей видимости подходит для более ранних версий системы. Вначале была куча ошибок в преобразователе, заменил кодировку в приведенных шаблонах на utf-8 все заработало (доступные способы оплаты не показывает если вес товара равен 0, считает что товар электронный), а вот сама кнопка заказа увы не работает, появляется лоадер аякса и ничего не происходит. Причем даже через firebug ошибку отловить не смог, т.к. он ничего не показывает при нажатии
#
Re: Реализация AJAX-заказа из корзины
Прошу прощения за ап, но нужна помощь в данном вопросе.
Делись своими знаниями. Это путь к бессмертию.
#
Re: Реализация AJAX-заказа из корзины
У меня реализовано оформление в один шаг, но это решение не дает возможности выбора варианта доставки.
Я ограничил доставку только внутри своего региона (области). Скажите как можно с помощью Ajax запроса при изменении города обновить варианты доставки в форме не увеличивая количество шагов?
#
Re: Реализация AJAX-заказа из корзины
alex-saratov, асинхронно посылайте на сервер идентификаторы выбранных пользователем страны, области, города и района. Затем в коде настроек тип. дин. страницы корзины получайте этот запрос, рассчитывайте общий вес заказа и его сумму, и передавайте все эти параметры в метод ShowTypeOfDelivery. Результат его вызова верните в ответ на этот AJAX-запрос.

Авторизация