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.
Вот и всё, надеюсь объяснил доступно, а не запутал ещё больше