Свой обработчик доставки

#
Свой обработчик доставки
Добрый день,
Уже третий день бьюсь с написанием собственного обработчика доставки (Типы доставки -> Редактировать -> По формуле)
Цель у меня следующая: Сделать так, чтобы в корзине после оформления заказа, в списке заказанных товаров, в товаре "доставка ИМЯ ДОСТАВКИ" отображалась цена, которую я вычислил на стадии ввода пользователем своего адреса (сейчас там всегда 0).
Конечно, можно реализовать через скрытый input, потом получить цену доставки через POST и сделать вывод параметра в нужном месте страницы, но хотелось бы всё же воспользоваться вашей готовой системой.
Что я делаю неправильно: в корзине я беру введённый адрес и отправляю в API карт, мне возвращается расстояние, которое я умножаю на тариф. Получается стоимость доставки, зависящая от расстояния до клиента. Эту стоимость я и хочу присвоить объекту доставки. Поэтому у меня создан тип доставки у которого выбран режим "По формуле", я внимательно изучил все примеры, доступные в тестовом сайте, но так и не понял, что мне нужно отправить в return обработчика, чтобы файл \modules\shop\payment\system\handler.php (Я так понимаю он должен присвоить объекту доставки стоимость) в строке
Код из файла \modules\shop\payment\system\handler.php
из функции _addDelivery()


$aPrice = $oShop_Delivery_Condition->getPriceArray();


Получил бы не 0, а то, что я отправил в return файла обработчика доставки (\hostcmsfiles\shop\delivery\handler1.php)
Сейчас print_r параметра $aPrice выдаёт
Цитата:
Array ( [tax] => 0.00 [rate] => 0 [price] => 0.00 [price_tax] => 0.00 [discount] => 0 [discounts] => Array ( ) [price_discount] => 0.00 )

В данный момент я остановился на таком коде этого файла (в конце возвращает массив с ценой и описанием, но результат почему то по прежнему ноль)
Код файла \hostcmsfiles\shop\delivery\handler1.php
class Shop_Delivery_Handler1 extends Shop_Delivery_Handler
{
   public function execute()
   {
   $deliveryPrice=intval(Core_Array::getPost('ИМЯ_ПЕРЕМЕННОЙ_С_ЦЕНОЙ', 0));
   $oReturn = new StdClass;
   $oReturn->price = $deliveryPrice;
   $oReturn->description = "Описание доставки";
   $oReturn = $deliveryPrice;
   return $oReturn;
   }
}

Такой вариант тоже не даёт результатов:
Код файла \hostcmsfiles\shop\delivery\handler1.php
class Shop_Delivery_Handler1 extends Shop_Delivery_Handler
{
   public function execute()
   {
   $deliveryPrice=intval(Core_Array::getPost('ИМЯ_ПЕРЕМЕННОЙ_С_ЦЕНОЙ', 0));
   return $deliveryPrice;
   }
}

Возможно я копаю не там? Документации на эту тему очень мало, а примеры в тестовом сайте предназначены для отправки данных сторонним фирмам, таким как Почта России и EMS. Мне нужно просто назначить объекту доставки стоимость полученную ранее.


#
Re: Свой обработчик доставки
Выберите "по условиям" и добавьте столько условий, сколько хотите.
Мы так сделали и доставку почтой (в зависимости от массы) и доставку курьером по городу и пригороду. А СДЭК и Деловые линии  - стандартным кодом обработчика
https://www.beregusha.com https://www.coffemol.ru
#
Re: Свой обработчик доставки
Barbaros, благодарю за ответ, хочу попробовать ваш способ. Уточните, пожалуйста: вы имеете ввиду что мне нужно вручную создать столько условий, сколько у меня населённых пунктов, или что выбрав режим "по условиям" я каким-то образом смогу передавать параметр с расстоянием или ценой в объект условия доставки и вычислять стоимость? Мне нужен именно второй вариант
#
Re: Свой обработчик доставки
Получилось! Большое спасибо Barbaros, за то что направил в правильном направлении. Оказалось:

  • У типа доставки обязательно должно быть условие доставки.
  • При этом в типе доставки выбирается режим "По формуле"
  • В обработчике код вида:

    class Shop_Delivery_Handler1 extends Shop_Delivery_Handler
    {
       public function execute()
       {
       $deliveryPrice=intval(Core_Array::getPost('ИМЯ_ПЕРЕМЕННОЙ_С_ЦЕНОЙ', 0));
       $oReturn = new StdClass;
       $oReturn->price = $deliveryPrice;
       $oReturn->description = "Описание доставки";
       $oReturn = $deliveryPrice;
       return $oReturn;
       }
    }

  • Тогда цена корректно назначается и всё считается приавльно!

#
Re: Свой обработчик доставки
temalesnik, есть некий модуль расчета доставки через Boxberry. В корзине он всё рассчитывает и подставляет правильно, но почему-то всё время цена берется из условий доставки. В коде нет нечего не обычного.


$oReturn = new StdClass;
                $oReturn->price = strval($data->price);

                if($oReturn->price == 0)
                {
                    throw new Exception('Цена доставки равна 0');
                }

                $oReturn->description = strval('примерный срок: '.$data->delivery_period .' д');
                return $oReturn;
Авторизация