1. Из директории cms скопировать папки в соответствующие

advertisement
1. Из директории cms скопировать папки в соответствующие директории вашей CMS.
2. В шаблон, в теге <head></head>, прописать вызов скриптов(например:
/templates/template1/template.htm):
<script src="/modules/ddelivery/html/js/ddelivery.js"></script>
<script type="text/javascript" src="/hostcmsfiles/jquery/ddelivery/ddelivery.js"></script>
2.1 В файл /modules/skin/default.php, в __construct(), объявить вызов скриптов:
// for DDelivery
$this
->addJs('/modules/ddelivery/html/js/ddelivery.js')
->addJs('/hostcmsfiles/jquery/ddelivery/ddelivery.js');
3. В класс Shop_Order_Controller_Apply, функции execute прописать функционал:
$ddelivery = new DDelivery_Integrate_Cms(); // for DDelivery
$ddelivery->cmsChangeStatus( $this->_object, $oBefore );
unset( $ddelivery );
В результате, у вас код может выглядеть следующим образом:
public function execute($operation = NULL)
{
$oBefore = clone $this->_object;
parent::execute($operation);
if ($this->_object->shop_payment_system_id)
{
$oShop_Payment_System_Handler = Shop_Payment_System_Handler::factory(
Core_Entity::factory('Shop_Payment_System', $this->_object>shop_payment_system_id)
);
if ($oShop_Payment_System_Handler)
{
$oShop_Payment_System_Handler->shopOrder($this->_object)
->shopOrderBeforeAction($oBefore)
->changedOrder('apply');
$ddelivery = new DDelivery_Integrate_Cms(); // for DDelivery
$ddelivery->cmsChangeStatus( $this->_object, $oBefore );
unset( $ddelivery );
}
}
return $this;
}
4. В класс Shop_Order_Controller_Edit, функции _applyObjectProperty, после вызова метода
parent::_applyObjectProperty() прописать функционал:
$ddelivery = new DDelivery_Integrate_Cms(); // for DDelivery
$ddelivery->cmsChangeStatus( $this->_object );
unset( $ddelivery );
В результате, у вас код может выглядеть следующим образом:
parent::_applyObjectProperty();
$ddelivery = new DDelivery_Integrate_Cms(); // for DDelivery
$ddelivery->cmsChangeStatus( $this->_object );
unset( $ddelivery );
// ---- Дополнительные свойства
$oProperty_Controller_Tab = new Property_Controller_Tab($this->_Admin_Form_Controller);
$oProperty_Controller_Tab
->setObject($this->_object)
->linkedObject(Core_Entity::factory('Shop_Order_Property_List', $this->_object->Shop>id))
->applyObjectProperty()
;
// ---В функцию setObject, после объявления полей доставки, ставить код:
// for DDelivery
// Номер ордера в DDelivery
$oMainTab->getField('ddelivery_id')->style("width: 100px");
$oMainTab->moveBefore( $this->getField('ddelivery_id'), $oShopDeliveryConditionsTypeSelect
);
$oMainTab->getField('ddelivery_local_id')->divAttr(array('style' => 'display: none'));
// Комментарий доставки
$oMainTab->getField('ddelivery_comment')->style("width: 600px");
$oMainTab->moveAfter( $this->getField('ddelivery_comment'), $this->getField('ddelivery_id')
);
В результате, у вас код может выглядеть следующим образом:
$oShopDeliveryConditionsTypeSelect
->caption(Core::_('Shop_Order.shop_delivery_condition_id'))
->id('shop_delivery_condition_id')
->style("width: 300px")
->options(
$iShop_Delivery_Conditions <= 250
? $this->_fillDeliveryConditions($oShopDelivery->id)
: array($this->_object->shop_delivery_condition_id => $this->_object>Shop_Delivery_Condition->name)
)
->name('shop_delivery_condition_id')
->value($this->_object->shop_delivery_condition_id);
$oMainTab->addAfter(
$oShopDeliveryConditionsTypeSelect, $oShopDeliveryTypeSelect
);
// for DDelivery
// Номер ордера в DDelivery
$oMainTab->getField('ddelivery_id')->style("width: 100px");
$oMainTab->moveBefore( $this->getField('ddelivery_id'),
$oShopDeliveryConditionsTypeSelect );
$oMainTab->getField('ddelivery_local_id')->divAttr(array('style' => 'display: none'));
// Комментарий доставки
$oMainTab->getField('ddelivery_comment')->style("width: 600px");
$oMainTab->moveAfter( $this->getField('ddelivery_comment'), $this>getField('ddelivery_id') );
В функции setObject описании кнопки «Перерасчет стоимости доставки», заменить на
следующий код:
// for DDelivery
// Список доставок
$ddelivery = new DDelivery_Integrate_Cms();
$deliveries = array( 0 => 0 );
$ddeliveryConditions = $ddelivery->getConditionIdAsDDelivery();
foreach( $ddeliveryConditions as $ddeliveryCondition )
{
$deliveries[$ddeliveryCondition['shop_delivery_id']] = $ddeliveryCondition['id'];
}
$oSelect_Shop = Admin_Form_Entity::factory('Select')
->name('ddelivery_condition')
->options( $deliveries )
->divAttr(array('style' => 'display:none'))
->controller($this->_Admin_Form_Controller);
$oMainTab->add($oSelect_Shop);
if( empty( $this->_object->ddelivery_id ) ) // DDelivery
{
$_SESSION['DDeliveryJS'] = true;
$oRecalcDeliveryPriceLink = Admin_Form_Entity::factory('Link');
$oRecalcDeliveryPriceLink
->a
->href($this->_Admin_Form_Controller->getAdminActionLoadHref
(
$sOrderPath, 'recalcDelivery', NULL, 0, $iOrderId
)
)
->onclick(
$this->_Admin_Form_Controller->getAdminActionLoadAjax
(
$sOrderPath, 'recalcDelivery', NULL, 0, $iOrderId
) . ';DDeliveryIntegration.openPopupAdmin();return false;' // for DDelivery
)
->value(Core::_('Shop_Order.recalc_order_delivery_sum'));
$oRecalcDeliveryPriceLink
->img
->src('/admin/images/coins.gif');
unset($_SESSION['DDeliveryJS']);
$oRecalcDeliveryPriceLink->div->style("width: 350px");
$oMainTab->addAfter($oRecalcDeliveryPriceLink, $oShopDeliveryConditionsTypeSelect);
}
5. В класс Shop_Payment_System_Handler, перед возвращением результата функции
createOrder, добавить функционал:
$ddelivery = new DDelivery_Integrate_Cms(); // for DDelivery
$ddelivery->cmsOrderFinish( $this->_shopOrder );
В результате, у вас код может выглядеть следующим образом:
// Номер акта
!$bAcceptance_report && $this->_shopOrder->acceptance_report($this->_shopOrder->id)>save();
$ddelivery = new DDelivery_Integrate_Cms(); // for DDelivery
$ddelivery->cmsOrderFinish( $this->_shopOrder );
return $this;
6. Добавить языковую расшифровку:
'ddelivery_comment' => 'Комментарий к доставке', // for DDelivery
'ddelivery_id' => 'Номер заказа в DDelivery',
'ddelivery_local_id' => 'Local number DDelivery',
по адресам:
/modules/shop/order/i18n/ru.php
/modules/shop/order/i18n/en.php
7. Для работы модуля при оформлении заказа, нужно отредактировать файл, находящийся по
адресу /hostcmsfiles/lib/lib_7/lib_7.php
Перед началом обработки шагов оформления заказа, нужно добавить код:
// for DDelivery
$isDdelivery = false;
if( Core_Array::getPost('shop_delivery_condition_id', 0) )
{
$DDelivery = new Ddelivery_Integrate_Shop();
$ddeliveries = $DDelivery->getDDeliveryByConditionID( intval(
Core_Array::getPost('shop_delivery_condition_id', 0 ) ) );
if( null !== $ddeliveries )
$isDdelivery = true;
}
if( Core_Array::getPost('step') == 3 && $isDdelivery && ( empty(
$_SESSION['hostcmsOrder']['deliveries'][intval(
Core_Array::getPost('shop_delivery_condition_id', 0) )] ) || empty( $_SESSION['DDeliveryID']
)))
{
foreach( $_SESSION['hostcmsOrder'] as $key => $val )
{
$_POST[$key] = $val;
}
$_POST['step'] = 2;
}
В результате, у вас код может выглядеть следующим образом:
// Проверяем наличие товара в корзины
$Shop_Cart_Controller = Shop_Cart_Controller::instance();
$aShop_Cart = $Shop_Cart_Controller->getAll($oShop);
// for DDelivery
$isDdelivery = false;
if( Core_Array::getPost('shop_delivery_condition_id', 0) )
{
$DDelivery = new Ddelivery_Integrate_Shop();
$ddeliveries = $DDelivery->getDDeliveryByConditionID( intval(
Core_Array::getPost('shop_delivery_condition_id', 0 ) ) );
if( null !== $ddeliveries )
$isDdelivery = true;
}
if( Core_Array::getPost('step') == 3 && $isDdelivery && ( empty(
$_SESSION['hostcmsOrder']['deliveries'][intval(
Core_Array::getPost('shop_delivery_condition_id', 0) )] ) || empty( $_SESSION['DDeliveryID']
)))
{
foreach( $_SESSION['hostcmsOrder'] as $key => $val )
{
$_POST[$key] = $val;
}
$_POST['step'] = 2;
}
switch (Core_Array::getPost('recount') || !count($aShop_Cart) ? 0 : Core_Array::getPost('step'))
На втором шаге, способа доставки, где идет заполнение сессии данными заказа, добавить
следующий код:
// for DDelivery
$_SESSION['hostcmsOrder']['shop_id'] = $oShop->id;
unset( $_SESSION['hostcmsOrder']['deliveries'] );
На третьем шаге, формы оплаты приведите код в следующий вид:
if (is_numeric($shop_delivery_condition_id))
{
$_SESSION['hostcmsOrder']['shop_delivery_condition_id'] =
intval($shop_delivery_condition_id);
// for DDelivery
unset(
$_SESSION['hostcmsOrder']['deliveries'],
$_SESSION['hostcmsOrder']['shop_delivery_id'],
$_SESSION['hostcmsOrder']['shop_delivery_price'],
$_SESSION['hostcmsOrder']['shop_delivery_rate'],
$_SESSION['hostcmsOrder']['shop_delivery_name']
);
}
else
8. Установите по умолчанию значение вашего интернет магазина в константу
Ddelivery_Integrate_Config::DEFAULT_SHOP_ID.
Константа находится по адресу /modules/ddelivery/integrate/config.php:24
9. В файле /modules/admin/form/controller.php, в функции getAdminLoadAjax замените код
return "$.adminLoad({" . implode(',', $aData) . "}); return false";
на следующий:
if( !empty($_SESSION['DDeliveryJS']) && $_SESSION['DDeliveryJS'] == true ) // for
DDelivery
return "$.adminLoad({" . implode(',', $aData) . "});";
return "$.adminLoad({" . implode(',', $aData) . "}); return false";
10. Настройка модуля:
После того, как вы проделали вышеописанное, зайдите в панели администрирования в раздел
«Модули». Создайте новый модуль. Пропишите поля, как показано на рисунке ниже
Перезагрузите страницу, после чего появится модуль «Сервис доставки Ddelivery».
В модуле «Сервис доставки Ddelivery» создайте новую запись и заполните поля.
После сохранения записи, вам нужно включить новый способ доставки. Для этого зайдите в
модуль «Интернет-магазины» и выберете магазин, в который вы добавили новую доставку. В
пункте меню «Доставка» → «Типы доставки», включите ваш тип доставки.
Там же включите платежные системы. Для отключения, проделайте тоже самое в обратном
порядке.
11. Для синхронизации статусов заказа между CMS и сервером DDelivery нужно запустить
планировщик задач cron. Пример запуска скрипта приведен ниже:
# Пример запуска скрипта в 5 утра каждый день:
/5 * * * * /usr/bin/php -q /home/www/cron/status.php
Download