This is an old revision of the document!
<?php /** * ТДС корзины с объединением всех шагов на одной странице v. 6.2 * обязательно использовать с соответствующей страницей настроек ТДС * для вывода типов доставки и пересчета используется ajax * * @author Kuts Artem, KAD Systems (©) 2014 * @date 01-09-2014 */
Все настройки переехали во вкладку Настройки /* * Для использования captcha необходимо в xsl шаблон вывода платежных систем * вставить код: <!– Обработка CAPTCHA –> <xsl:if test="captcha_id != 0 and siteuser_id = 0">
<div class="caption"></div> <div class="field"> <img id="comment" class="captcha" src="/captcha.php?id={//captcha_id}&height=30&width=100" title="Контрольное число" name="captcha"/> <div class="captcha"> <img src="/images/refresh.png" /> <span onclick="$('#comment').updateCaptcha('{captcha_id}', 30); return false">Показать другое число</span> </div> </div> </div> <div class="row"> <div class="caption"> Контрольное число<sup><font color="red">*</font></sup> </div> <div class="field"> <input type="hidden" name="captcha_id" value="{captcha_id}"/> <input type="text" name="captcha" size="15"/> </div> </div> </xsl:if>
*/
?>
<style> input.input_error{
border: 1px solid red!important;
} </style>
<script>
$(document).ready(function(){ // Получить данные формы getFormData = function($type) { return $("form[name='order']").serialize() + "&ajaxget=" + $type; } // Загрузить корзину refreshCart = function() { $.loadingScreen('show'); var formData = getFormData(""); $("#cart").load( "", formData + "&ajaxget=cart" , function(){ $.loadingScreen('hide'); <?php if (SHORTCART_CARTMODE == 2) { ?> refreshDeliveries(); <?php } ?> } );
// Наблюдатель после перезагрузки корзины if (typeof afterReloadCart == 'function') { afterReloadCart(); } } // Загрузить способы оплаты refreshPayments = function() { // Запоминаем выбранный var $active_val = $("#payment input[type=radio]:checked").data("id"); $.loadingScreen('show'); var formData = getFormData("payment"); $("#payment").load( "", formData , function(){ // Возвращаем выбранный var $radiobtn = $("#payment input[type='radio'][data-id='" + $active_val + "']"); if ($radiobtn != "undefined") { $radiobtn.attr("checked", "checked"); } $.loadingScreen('hide'); } ); } // Загрузить способы доставки refreshDeliveries = function() { // Запоминаем выбранный var $active_val = $("#delivery input[type=radio]:checked").data("id"); $.loadingScreen('show'); var formData = getFormData("delivery"); $("#delivery").load( "", formData , function(){ $.loadingScreen('hide'); // Возвращаем выбранный var $radiobtn = $("#delivery input[type='radio'][data-id='" + $active_val + "']"); if ($radiobtn != "undefined") { $radiobtn.attr("checked", "checked"); } refreshPayments(); } ); } $("[name^='quantity'], [name='coupon_text']").live('change', function(){ refreshCart(); }); // Пересчитать $('[name="recount"]').live('click', function(){ refreshCart(); return false; }); // Подгрузка типов доставки $("#shop_country_location_city_id, #shop_country_location_id, #shop_country_id").change(function(){ refreshDeliveries(); }); // Подгрузка платежных систем $("[name='shop_delivery_condition_id']").live("click", function(){ refreshPayments(); }); // Обновление районов $.loadLocations('.', $("#shop_country_id").val()); $("#shop_country_id").change();
// Валидация //Если не работает валидация, закомментировать строчку ниже if (typeof $.validate == 'function') { $("form[name='order']").validate({ focusInvalid: true, errorClass: "input_error", errorPlacement: function(error, element) {} }) } });
</script>
<?php $Shop_Cart_Controller_Show = Core_Page::instance()→object;
$oShop = $Shop_Cart_Controller_Show→getEntity();
———————————————— Подготовка редиректа для PayPal ———————————————— if (isset($_REQUEST['paymentType'])) { Получаем ID заказа
$order_id = intval(Core_Array::getRequest('order_id'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); }
}
———————————————— Подготовка редиректа для Оплаты с лицевого счета ———————————————— if (isset($_REQUEST['Pay'])) { Получаем ID заказа
$order_id = intval(Core_Array::getRequest('order_id'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); }
}
———————————————— Обработка уведомления об оплате от RBK Money ———————————————— if 1) && !isset($_REQUEST['paymentType'])) { Получаем ID заказа
$order_id = intval(Core_Array::getPost('orderId'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); }
}
———————————————— Обработка уведомления об оплате от WebMoney ———————————————— if (isset($_POST['LMI_PAYEE_PURSE'])) { Получаем ID заказа
$order_id = intval(Core_Array::getPost('LMI_PAYMENT_NO'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); }
}
———————————————— Обработка уведомления об оплате от ROBOKASSA ———————————————— if (isset($_REQUEST['SignatureValue']) && isset($_REQUEST['Culture'])) { Получаем ID заказа
$order_id = intval(Core_Array::getRequest('InvId'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); }
} ———————————————— ———————————————— Обработка уведомления об оплате от Authorize.net ———————————————— if (isset($_POST['x_response_code'])) {
// Получаем ID заказа $order_id = intval(Core_Array::getPost('order_id'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); }
}
———————————————— Обработка формы "Оплата через систему QIWI Кошелек" ———————————————— if (isset($_POST['qiwi_payment_options'])) { Получаем ID заказа
$order_id = intval(Core_Array::getPost('order_id'));
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (!is_null($oShop_Order->id)) { // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); return TRUE; }
}
———————————————— Вывод информации о статусе платежа после его совершения и перенаправления с платежной системы ———————————————— if (isset($_REQUEST['payment']) || (isset($_GET['action']) && ($_GET['action'] == 'PaymentSuccess' || $_GET['action'] == 'PaymentFail'))) { Получаем ID заказа
if (isset($_REQUEST['order_id'])) { $order_id = intval(Core_Array::getRequest('order_id')); } //от Яндекса elseif(isset($_GET['orderNumber'])) { $order_id = intval(Core_Array::getGet('orderNumber')); } else { $order_id = intval(Core_Array::getRequest('InvId')); }
$oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id);
if (Core::moduleIsActive('siteuser') && !SHORTCART_IGNOREUSERS) { $siteuser_id = 0;
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent(); if ($oSiteuser) { $siteuser_id = $oSiteuser->id; } } else { $siteuser_id = FALSE; }
// Если заказ принадлежит текущему авторизированному пользователю if ($oShop_Order->siteuser_id == $siteuser_id) { if (Core_Array::getRequest('payment') == 'success' || Core_Array::getRequest('action') == 'PaymentSuccess') { ?><h1>Подтверждение платежа</h1> <p>Спасибо, информация об оплате заказа <strong>№ <?php echo $oShop_Order->invoice?></strong>
получена.</p>
<?php } else { ?><h1>Платеж не получен</h1> <p>К сожалению при оплате заказа <strong>№ <?php echo $oShop_Order->invoice?></strong> произошла ошибка.</p> <?php } } // Для случаев, когда отключен модуль "Пользователи сайта" elseif ($siteuser_id === FALSE) { ?><h1>Подтверждение платежа</h1> <p>Благодарим за посещение нашего магазина!</p> <?php } else { ?><h1>Ошибка</h1> <p>Неверный номер заказа!</p> <?php }
// Прерываем выполнение типовой динамической страницы return TRUE;
}
$xslName = Core_Array::get(Core_Page::instance()→libParams, 'cartXsl');
Пересчитываем количество товара в корзине $countGoods = 0; foreach (Shop_Cart_Controller::instance()→getAll($oShop) as $oGood) { $oShop_Item = Core_Entity::factory('Shop_Item')→find($oGood→shop_item_id); if(!is_null($oShop_Item→id)) { $countGoods += $oGood→quantity; } } Если режим в 2 шага, выводим все на главной $error_message = ""; if (SHORTCART_CARTMODE == 2 && !Core_Array::getPost('step') && $countGoods > 0 || Core_Array::getPost('recount')) {
$step = 1;
} else {
if (!SHORTCART_USECAPTCHA || (SHORTCART_USECAPTCHA && Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))) { $step = Core_Array::getPost('step'); } else { $step = 1; $error_message = SHORTCART_ERROR_WC; }
}
switch ($step) {
// Адрес доставки case 1: // Все шаги должны содержать единую форму, поэтому из xsl шаблонов формы желательно убрать ?> <form name="order" method="POST" action="."> <?php if (SHORTCART_CARTMODE == 2) { ?> <div id="cart"> <?php $Shop_Cart_Controller_Show ->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text')) ->xsl( Core_Entity::factory('Xsl')->getByName($xslName) ) ->show(); ?> </div> <?php } // Сбрасываем информацию о последнем заказе $_SESSION['last_order_id'] = 0;
// Адрес доставки $Shop_Address_Controller_Show = new Shop_Address_Controller_Show($oShop); $Shop_Address_Controller_Show->xsl( Core_Entity::factory('Xsl')->getByName( Core_Array::get(Core_Page::instance()->libParams, 'deliveryAddressXsl') ) ) ->show(); // /Адрес доставки
// Типы доставки / ajax обработчик в настройках ?> <div id="delivery"> <?php $Shop_Delivery_Controller_Show = new Shop_Delivery_Controller_Show($oShop); $Shop_Delivery_Controller_Show ->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text')) ->setUp() ->xsl( Core_Entity::factory('Xsl')->getByName( Core_Array::get(Core_Page::instance()->libParams, 'deliveryXsl') ) ) ->show(); ?> </div> <?php // /Типы доставки // Платежные системы / ajax обработчик в настройках ?> <div id="payment"> <?php $Shop_Payment_System_Controller_Show = new Shop_Payment_System_Controller_Show($oShop); if (SHORTCART_USECAPTCHA) { $Shop_Payment_System_Controller_Show->addEntity( Core::factory('Core_Xml_Entity') ->name('siteuser_id') ->value((Core::moduleIsActive('siteuser') && !is_null(Core_Entity::factory('Siteuser')->getCurrent()))?Core_Entity::factory('Siteuser')->getCurrent()->id:0) )->addEntity( Core::factory('Core_Xml_Entity') ->name('captcha_id') ->value(Core_Captcha::getCaptchaId()) ); } $Shop_Payment_System_Controller_Show->addEntity( Core::factory('Core_Xml_Entity') ->name('message') ->value($error_message) ); $Shop_Payment_System_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName( Core_Array::get(Core_Page::instance()->libParams, 'paymentSystemXsl') ) ) ->show(); ?> </div> <?php // /Платежные системы ?> </form> <?php break; // Окончание оформления заказа case 4: $_SESSION['hostcmsOrder']['postcode'] = strval(Core_Array::getPost('postcode')); $_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']['fax'] = strval(Core_Array::getPost('fax')); $_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email')); $_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description')); $_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval(Core_Array::getPost('shop_delivery_condition_id', 0)); $shop_payment_system_id = $_SESSION['hostcmsOrder']['shop_payment_system_id'] = intval(Core_Array::getPost('shop_payment_system_id', 0)); // Additional order properties $_SESSION['hostcmsOrder']['properties'] = array();
$oShop_Order_Property_List = Core_Entity::factory('Shop_Order_Property_List', $oShop->id);
$aProperties = $oShop_Order_Property_List->Properties->findAll(); foreach ($aProperties as $oProperty) { // Св-во может иметь несколько значений $aPropertiesValue = Core_Array::getPost('property_' . $oProperty->id);
if (!is_null($aPropertiesValue)) { !is_array($aPropertiesValue) && $aPropertiesValue = array($aPropertiesValue); foreach ($aPropertiesValue as $sPropertyValue) { $_SESSION['hostcmsOrder']['properties'][] = array($oProperty->id, $sPropertyValue); } } }
// Если выбрана платежная система 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; default: ?> <form name="order" method="POST" action="."> <div id="cart"> <?php $Shop_Cart_Controller_Show ->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text')) ->xsl( Core_Entity::factory('Xsl')->getByName($xslName) ) ->show(); ?> </div> </form> <?php
}
Блок авторизации пользователя if (Core::moduleIsActive('siteuser') && !SHORTCART_IGNOREUSERS && $step != 4) { $oSiteuser = Core_Entity::factory('Siteuser')→getCurrent(); if (is_null($oSiteuser)) { Авторизация
$Siteuser_Controller_Show = new Siteuser_Controller_Show( Core_Entity::factory('Siteuser') );
$Siteuser_Controller_Show ->location(Core::$url['path']) ->xsl( Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'userAuthorizationXsl')) ) ->show();
// Регистрация $Siteuser_Controller_Show = new Siteuser_Controller_Show( Core_Entity::factory('Siteuser') );
$Siteuser_Controller_Show->xsl( Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'userRegistrationXsl')) ) ->location(Core::$url['path']) ->fastRegistration(TRUE) ->properties(TRUE) //->showMaillists(TRUE) ->show(); }
}