Оформление заказа в корзине в один шаг v.6

#
Re: Оформление заказа в корзине в один шаг v.6
Пытаюсь по умолчанию подставить email авторизированного пользователя в XSL шаблоне "МагазинКорзина".

<input name="recount" value="Пересчитать" type="submit" class="button" />

<!-- Вставить mail текущего пользователя -->
<input type="text" size="30" name="email" value="{/shop/siteuser/email}" class="width2" />

<!-- Пользователь авторизован или модуль пользователей сайта отсутствует -->
<xsl:if test="count(shop_cart[postpone = 0]) and siteuser_id > 0 or siteuser_id = ''">
<input name="step" value="4" type="hidden" />
<input value="Оформить заказ" type="submit" class="button"/>

Почему не работает, что не так?

#
Re: Оформление заказа в корзине в один шаг v.6
Сделал оформление в один шаг, но не заказа, а заявки))) Т.е. товары собираем в корзину, из корзины форма отправляет всю инфо на емайл манагеру, корзину очищаем - ВСЕ!)) Хранение и учет остатков, самих заказов в базе не требовалось, регистрация покупателей была отметена сразу как ужасный сон))) поэтому посчитал создание костылей с шагами пустой тратой времени)))

#
Re: Оформление заказа в корзине в один шаг v.6
juja256 писал(а):
Kartyla писал(а):
В конце оформление появляется:
Через некоторое время с Вами свяжется наш менеджер, чтобы согласовать заказанный товар и время доставки.
Данные доставки

ФИО: Виталий Healthy Life
E-mail: ybtva1213@rznvy.arg
Адрес доставки: Украина, Винницкая обл., Браилов
Способ оплаты: Оплата наличными

Заказанных товаров нет.

И не отображается в заказах админки. В чем проблема?

а все таки ответ не прозвучал, решение не работает, подскажите как исправить пожалуйста, заказ просто не оформляется


Ох и помучался я в поисках решения.
Постараюсь объяснить как и что. Если отталкиваться от кода автора темы:

// Окончание оформления заказа
   case 4:
      // Сбрасываем информацию о последнем заказе
      $_SESSION['last_order_id'] = 0;  
      $shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 1;//id используемой платежной системы
      $_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval(Core_Array::getPost('shop_delivery_condition_id', 0));
      
      $_SESSION['hostcmsOrder']['address'] = strval(Core_Array::getPost('address'));
      $_SESSION['hostcmsOrder']['surname'] = strval(Core_Array::getPost('surname'));
      $_SESSION['hostcmsOrder']['name'] = strval(Core_Array::getPost('name'));
      $_SESSION['hostcmsOrder']['patronymic'] = strval(Core_Array::getPost('patronymic'));
      $_SESSION['hostcmsOrder']['company'] = strval(Core_Array::getPost('company'));
      $_SESSION['hostcmsOrder']['phone'] = strval(Core_Array::getPost('phone'));      
      $_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email'));
      $_SESSION['hostcmsOrder']['fax'] = strval(Core_Array::getPost('fax'));
      $_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description'));
      
      // Если выбрана платежная система
      if ($_SESSION['hostcmsOrder']['shop_payment_system_id'])
      {

         Shop_Payment_System_Handler::factory(
            Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
         )
         ->orderParams($_SESSION['hostcmsOrder'])
         ->execute();
      }
      else
      {
         ?><h1>Ошибка! Не указана ни одна платежная система.</h1><?php
      }
   break;


Строки

Shop_Payment_System_Handler::factory(
            Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
         )
         ->orderParams($_SESSION['hostcmsOrder'])
         ->execute();

вызывают отправку заказа, а если конкретно, нас интересует функция execute(), долго искал, где же она определяется. Оказывается дело обстоит так...
Смотрим строчку

$shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 1;//id используемой платежной системы

В ней указывается id платежной системы, которую мы настроили для именно нашего магазина. Где это настраивается?
Идем в магазин наш, в менюшке верхней ищем "Справочники -> Платежные системы", открываем. Лично у меня там изначально было пусто, добавляем туда новую платежную систему, пусть это будет "Оплата наличными".
В поле "Обработчик" пишем примерно следующее:
<?php

/**
* Оплата наличными
*/
class Shop_Payment_System_Handler74 extends Shop_Payment_System_Handler
{
   /**
    * Метод, запускающий выполнение обработчика
    */
   function execute()
   {
      parent::execute();

      $this->printNotification();

      return $this;
   }

   protected function _processOrder()
   {
      parent::_processOrder();

      // Установка XSL-шаблонов в соответствии с настройками в узле структуры
      $this->setXSLs();

      // Отправка писем клиенту и пользователю
      $this->send();

      return $this;
   }

   public function getNotification()
   {
      $this->xsl(
         Core_Entity::factory('Xsl')->getByName('ОплатаПриПолучении')
      );
      return parent::getNotification();
   }

   public function getInvoice()
   {
      return $this->getNotification();
   }
}

А вот он наш execute() именно тут оно и определяется. Следует обратить внимание на название класса, вконце его пишется id обязательно, его можно подсмотреть во вкладке "Дополнительные". Возвращаемся к

$shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 1;//id используемой платежной системы

Тут и указывается как раз этот самый id. В моем случае это было 74.

Вот и всё, надеюсь объяснил доступно, а не запутал ещё больше
#
Re: Оформление заказа в корзине в один шаг v.6
Нужно было скрыть адрес доставки 2 этап без косяков. Я решил проблему в версии 6.6.2 так: просто в коде ТДС МагазинКорзины во втором шаге в начале дописал
         // Сбрасываем информацию о последнем заказе
      $_SESSION['last_order_id'] = 0;

      $Shop_Address_Controller_Show = new Shop_Address_Controller_Show($oShop);

и в XSL МагазинКорзины изменил
<input name="step" value="1" type="hidden" />
на
<input name="step" value="2" type="hidden" />

и всё чудесно работает и заказы принимаются и обновляются
#
Re: Оформление заказа в корзине в один шаг v.6
Подскажите пожалуйста как убрать в свежей версии ошибку
Exception: syntax error, unexpected 'default' (T_DEFAULT), expecting end of file
перепробовал частично брать код с первого сообщения, никак не выходит три часа бьюсь с ошибкой, без результно
#
Re: Оформление заказа в корзине в один шаг v.6
В справочнике платежных систем указанно
class Shop_Payment_System_Handler26 extends Shop_Payment_System_Handler

В ТДС, указанно
      $shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 26;//id используемой платежной системы

Всё по 10 раз, по пунктам описанным выше. Сталкивался может все же кто с проблемой
Exception: syntax error, unexpected 'default' (T_DEFAULT), expecting end of file
как ее лечить
#
Re: Оформление заказа в корзине в один шаг v.6
id55048,
вышлите код того файла, выполнение которого приводит к ошибке "Exception: syntax error, unexpected 'default' (T_DEFAULT), expecting end of file" это, судя по всему, или код ТДС корзины или код платежной системы.
Команда разработчиков KAD Systems | Интеграция и нестандартные решения на совесть | Email: info@kad.systems Skype: kad.systems | http://kad.systems/ https://vk.com/kad_sys
#
Re: Оформление заказа в корзине в один шаг v.6
Ошибка появляется после внесения в ТДС "Интернет-магазин корзина" следующего кода(тот что с первого сообщения темы):

      // Окончание оформления заказа
   case 4:
      // Сбрасываем информацию о последнем заказе
      $_SESSION['last_order_id'] = 0;  
      $shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 26;//id используемой платежной системы
      $_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval(Core_Array::getPost('shop_delivery_condition_id', 0));
      
      $_SESSION['hostcmsOrder']['address'] = strval(Core_Array::getPost('address'));
      $_SESSION['hostcmsOrder']['surname'] = strval(Core_Array::getPost('surname'));
      $_SESSION['hostcmsOrder']['name'] = strval(Core_Array::getPost('name'));
      $_SESSION['hostcmsOrder']['patronymic'] = strval(Core_Array::getPost('patronymic'));
      $_SESSION['hostcmsOrder']['company'] = strval(Core_Array::getPost('company'));
      $_SESSION['hostcmsOrder']['phone'] = strval(Core_Array::getPost('phone'));      
      $_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email'));
      $_SESSION['hostcmsOrder']['fax'] = strval(Core_Array::getPost('fax'));
      $_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description'));
      
      // Если выбрана платежная система
      if ($_SESSION['hostcmsOrder']['shop_payment_system_id'])
      {

         Shop_Payment_System_Handler::factory(
            Core_Entity::factory('Shop_Payment_System', $shop_payment_system_id)
         )
         ->orderParams($_SESSION['hostcmsOrder'])
         ->execute();
      }
      else
      {
         ?><h1>Ошибка! Не указана ни одна платежная система.</h1><?php
      }
   break;
#
Re: Оформление заказа в корзине в один шаг v.6
Попытался не полностью заменить код, а добавить толкьо

      // Сбрасываем информацию о последнем заказе
      $_SESSION['last_order_id'] = 0;  
      $shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = 26;//id используемой платежной системы
      $_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval(Core_Array::getPost('shop_delivery_condition_id', 0));
      
      $_SESSION['hostcmsOrder']['address'] = strval(Core_Array::getPost('address'));
      $_SESSION['hostcmsOrder']['surname'] = strval(Core_Array::getPost('surname'));
      $_SESSION['hostcmsOrder']['name'] = strval(Core_Array::getPost('name'));
      $_SESSION['hostcmsOrder']['patronymic'] = strval(Core_Array::getPost('patronymic'));
      $_SESSION['hostcmsOrder']['company'] = strval(Core_Array::getPost('company'));
      $_SESSION['hostcmsOrder']['phone'] = strval(Core_Array::getPost('phone'));      
      $_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email'));
      $_SESSION['hostcmsOrder']['fax'] = strval(Core_Array::getPost('fax'));
      $_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description'));


Заказ приходит на почту, но в корзине после отправки выдает ошибку Exception: Argument 1 passed to Shop_Payment_System_Handler::xsl() must be an instance of Xsl_Model, null given, called in /home/c/cb21712/mnogopak.rf/public_html/hostcmsfiles/shop/pay/handler26.php on line 36
#
Re: Оформление заказа в корзине в один шаг v.6
id55048,
исходя из кода и текста ошибки могу сделать вывод, что этим кодом(из 1 сообщения) Вы нарушаете работу оператора switch. То есть  его части: "case 4" и "break" попали не туда, куда нужно. Синтаксис оператора switch http://php.net/manual/ru/control-structures.switch.php

id55048 писал(а):
Exception: Argument 1 passed to Shop_Payment_System_Handler::xsl() must be an instance of Xsl_Model, null given, called in /home/c/cb21712/mnogopak.rf/public_html/hostcmsfiles/shop/pay/handler26.php on line 36

А здесь похоже, что XSL, который Вы передаете в контроллер не существует. Проверьте правильность выбранных XSL в настройках структуры.

Могу предложить наше платное решение "Корзина в 1 шаг". С Вас 2100 руб., а с нас установка, настройка и поддержка в течение 1 года. И никакой головной боли Ссылка на решение https://kad.systems/shop/hostcms/online-store/basket/cart-in-1-step/
Команда разработчиков KAD Systems | Интеграция и нестандартные решения на совесть | Email: info@kad.systems Skype: kad.systems | http://kad.systems/ https://vk.com/kad_sys
Авторизация