This is an old revision of the document!
<?php /** * ТДС корзины с объединением всех шагов на одной странице v. 6.2 * обязательно использовать с соответствующей страницей настроек ТДС * для вывода типов доставки и пересчета используется ajax * * @author Kuts Artem, KAD Systems (©) 2014 * @date 01-09-2014 */ // Игнорировать модуль "Пользователи" define("SHORTCART_IGNOREUSERS", false); // Режим отображения 2 - 2 шага оформления, 3 - 3 шага оформления define("SHORTCART_CARTMODE", 2); // Использовать captcha define("SHORTCART_USECAPTCHA", false); // Ошибка неправильного ввода define("SHORTCART_ERROR_WC", "Введен неверный код подтверждения!"); $oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId')); // ------------------------------------------------ // Обработка запросов от Яндекс.Денег // ------------------------------------------------ if (isset($_POST['action']) && isset($_POST['invoiceId']) && isset($_POST['orderNumber'])) { // Получаем ID заказа $order_id = intval(Core_Array::getPost('orderNumber')); $oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id); if (!is_null($oShop_Order->id)) { header("Content-type: application/xml"); // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); } } if (isset($_REQUEST['type'])) { // Получаем ID заказа $order_id = intval(Core_Array::getPost('pay_for')); $oShop_Order = Core_Entity::factory('Shop_Order')->find($order_id); if (!is_null($oShop_Order->id)) { header("Content-type: application/xml"); // Вызов обработчика платежной системы Shop_Payment_System_Handler::factory($oShop_Order->Shop_Payment_System) ->shopOrder($oShop_Order) ->paymentProcessing(); } } // ------------------------------------------------ // Обработка уведомления об оплате от IntellectMoney // ------------------------------------------------ if (isset($_REQUEST['orderId'])) { // Получаем ID заказа $order_id = intval(Core_Array::getRequest('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(); } } // ------------------------------------------------ // Обработка уведомления об оплате от ROBOKASSA // должно быть только в настройках типовой дин. страницы // ------------------------------------------------ if (isset($_REQUEST['SignatureValue']) // для отличия от SuccessURL/FailURL && !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(); } exit(); } // Добавление товара в корзину if (Core_Array::getRequest('add')) { $shop_item_id = intval(Core_Array::getRequest('add')); if ($shop_item_id) { $oShop_Cart_Controller = Shop_Cart_Controller::instance(); $oShop_Cart_Controller ->shop_item_id($shop_item_id) ->quantity(Core_Array::getRequest('count', 1)) ->add(); } // Ajax if (Core_Array::getRequest('_', FALSE)) { ob_start(); // Краткая корзина $Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show( $oShop ); $Shop_Cart_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName( Core_Array::get(Core_Page::instance()->libParams, 'littleCartXsl') ) ) ->couponText(Core_Array::get($_SESSION, 'coupon_text')) ->show(); echo json_encode(ob_get_clean()); exit(); } } if (Core_Array::getGet('action') == 'repeat') { $guid = Core_Array::getGet('guid'); if (strlen($guid)) { $oShop_Order = $oShop->Shop_Orders->getByGuid($guid); if (!is_null($oShop_Order)) { $aShop_Order_Items = $oShop_Order->Shop_Order_Items->findAll(); $oShop_Cart_Controller = Shop_Cart_Controller::instance(); foreach ($aShop_Order_Items as $oShop_Order_Item) { $oShop_Order_Item->shop_item_id && $oShop_Cart_Controller ->shop_item_id($oShop_Order_Item->shop_item_id) ->quantity($oShop_Order_Item->quantity) ->add(); } } } } if (!is_null(Core_Array::getGet('ajaxLoad'))) { $aObjects = array(); if (Core_Array::getGet('shop_country_id')) { $oShop_Country_Location = Core_Entity::factory('Shop_Country_Location'); $oShop_Country_Location ->queryBuilder() ->where('shop_country_id', '=', intval(Core_Array::getGet('shop_country_id'))); $aObjects = $oShop_Country_Location->findAll(); } elseif (Core_Array::getGet('shop_country_location_id')) { $oShop_Country_Location_City = Core_Entity::factory('Shop_Country_Location_City'); $oShop_Country_Location_City ->queryBuilder() ->where('shop_country_location_id', '=', intval(Core_Array::getGet('shop_country_location_id'))); $aObjects = $oShop_Country_Location_City->findAll(); } elseif (Core_Array::getGet('shop_country_location_city_id')) { $oShop_Country_Location_City_Area = Core_Entity::factory('Shop_Country_Location_City_Area'); $oShop_Country_Location_City_Area ->queryBuilder() ->where('shop_country_location_city_id', '=', intval(Core_Array::getGet('shop_country_location_city_id'))); $aObjects = $oShop_Country_Location_City_Area->findAll(); } $aArray = array('…'); foreach ($aObjects as $Object) { $aArray['_' . $Object->id] = $Object->name; // Если не работает подгрузка городов - раскомментить строчку выше // и закомментить строчку ниже //$aArray[$Object->id] = $Object->name; } echo json_encode($aArray); exit(); } // Удаление товара из корзины if (Core_Array::getGet('delete')) { $shop_item_id = intval(Core_Array::getGet('delete')); if ($shop_item_id) { $oShop_Cart_Controller = Shop_Cart_Controller::instance(); $oShop_Cart_Controller ->shop_item_id($shop_item_id) ->delete(); } } // KAD: Удаление всех товаров из корзины if (Core_Array::getGet('delete_all')) { $oShop_Cart_Controller = Shop_Cart_Controller::instance(); $oItemsInCart = $oShop_Cart_Controller->getAll($oShop); foreach( $oItemsInCart as $oItemInCart) { $oShop_Cart_Controller ->shop_item_id($oItemInCart->shop_item_id) ->delete(); } if (isset($_SERVER['HTTP_REFERER'])) { header('location: '.$_SERVER['HTTP_REFERER']); exit(); } } // KAD: ajax обработчик вывода типов доставки if (Core_Array::getRequest('ajaxget') == "delivery") { $_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getRequest('shop_country_id', 0)); $_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getRequest('shop_country_location_id', 0)); $_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getRequest('shop_country_location_city_id', 0)); $_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getRequest('shop_country_location_city_area_id', 0)); $Shop_Delivery_Controller_Show = new Shop_Delivery_Controller_Show($oShop); $Shop_Delivery_Controller_Show ->shop_country_id($_SESSION['hostcmsOrder']['shop_country_id']) ->shop_country_location_id($_SESSION['hostcmsOrder']['shop_country_location_id']) ->shop_country_location_city_id($_SESSION['hostcmsOrder']['shop_country_location_city_id']) ->shop_country_location_city_area_id($_SESSION['hostcmsOrder']['shop_country_location_city_area_id']) ->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(); header("Content-Type: text/html; charset=utf-8"); exit(); } // KAD: ajax обработчик вывода платежных систем if (Core_Array::getRequest('ajaxget') == "payment") { $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_delivery_condition_id = strval(Core_Array::getRequest('shop_delivery_condition_id', 0)); if (is_numeric($shop_delivery_condition_id)) { $_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = intval($shop_delivery_condition_id); } else { $_SESSION['hostcmsOrder']['shop_delivery_condition_id'] = 0; // в shop_delivery_condition_id тогда "123#", ID элемента массива в сессии, в котором // хранится стоимость доставки, налог, название специфичного условия доставки list($shopDeliveryInSession) = explode('#', $shop_delivery_condition_id); if (isset($_SESSION['hostcmsOrder']['deliveries'][$shopDeliveryInSession])) { $aTmp = $_SESSION['hostcmsOrder']['deliveries'][$shopDeliveryInSession]; $_SESSION['hostcmsOrder']['shop_delivery_id'] = $aTmp['shop_delivery_id']; $_SESSION['hostcmsOrder']['shop_delivery_price'] = $aTmp['price']; $_SESSION['hostcmsOrder']['shop_delivery_rate'] = $aTmp['rate']; $_SESSION['hostcmsOrder']['shop_delivery_name'] = $aTmp['name']; } } $oShop_Delivery_Condition = Core_Entity::factory('Shop_Delivery_Condition', $_SESSION['hostcmsOrder']['shop_delivery_condition_id']); $Shop_Payment_System_Controller_Show ->shop_delivery_id($oShop_Delivery_Condition->shop_delivery_id) ->xsl( Core_Entity::factory('Xsl')->getByName( Core_Array::get(Core_Page::instance()->libParams, 'paymentSystemXsl') ) ) ->show(); header("Content-Type: text/html; charset=utf-8"); exit(); } if (Core_Array::getPost('recount') || Core_Array::getPost('step') == 1) { $oShop_Cart_Controller = Shop_Cart_Controller::instance(); $aCart = $oShop_Cart_Controller->getAll($oShop); foreach ($aCart as $oShop_Cart) { $oShop_Cart_Controller ->shop_item_id($oShop_Cart->shop_item_id) ->quantity(Core_Array::getPost('quantity_' . $oShop_Cart->shop_item_id)) ->postpone(is_null(Core_Array::getPost('postpone_' . $oShop_Cart->shop_item_id)) ? 0 : 1) ->shop_warehouse_id(Core_Array::getPost('warehouse_' . $oShop_Cart->shop_item_id, 0)) ->update(); } // Запоминаем купон $_SESSION['hostcmsOrder']['coupon_text'] = trim(strval(Core_Array::getPost('coupon_text'))); } $Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show($oShop); /* * KAD: ajax обработчик вывода корзины * совместим с формой быстрого заказа */ if (Core_Array::getRequest('ajaxget') == "cart") { $oShop_Cart_Controller = Shop_Cart_Controller::instance(); $aCart = $oShop_Cart_Controller->getAll($oShop); foreach ($aCart as $oShop_Cart) { if (Core_Array::getRequest('quantity_' . $oShop_Cart->shop_item_id)) { $quantity = Core_Array::getRequest('quantity_' . $oShop_Cart->shop_item_id); if ($quantity == -1) { $quantity = 0; } $oShop_Cart_Controller ->shop_item_id($oShop_Cart->shop_item_id) ->quantity($quantity) ->postpone(is_null(Core_Array::getRequest('postpone_' . $oShop_Cart->shop_item_id)) ? 0 : 1) ->shop_warehouse_id(Core_Array::getRequest('warehouse_' . $oShop_Cart->shop_item_id, 0)) ->update(); } } // Запоминаем купон $_SESSION['hostcmsOrder']['coupon_text'] = trim(strval(Core_Array::getRequest('coupon_text'))); $xslName = Core_Array::get(Core_Page::instance()->libParams, 'cartXsl'); $Shop_Cart_Controller_Show ->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text')) ->itemsProperties(FALSE) //->itemsPropertiesList(FALSE) ->xsl( Core_Entity::factory('Xsl')->getByName($xslName) ) ->show(); header("Content-Type: text/html; charset=utf-8"); exit(); } Core_Page::instance()->object = $Shop_Cart_Controller_Show;