Как правильно считать стоимость доставки в своем модуле доставки prestashop?
Здравствуйте.
Пытаюсь написать свой модуль доставки для Prestashop 1.6. В официальной документации написано, что для расчета используется метод getOrderShippingCost(), который и должен возвращать стоимость доставки. Но ситуация в том, что как показывает отладка, этот метод вызывается на каждой странице магазина, если пользователь указал адрес который подходит.
В этом методе у меня рассчитывается стоимость доставки через сторонний API, неправильно ведь рассчитывать её при заходе на любую страницу магазина. Нужно расчитать стоимость, только когда пользователь уже делает заказ.
Как это реализовывать правильно? Спасибо.
Спасибо, за быстрый ответ.
if ($this->id_carrier != (int) Configuration::get('SR_MY_CARRIER_ID')){
return false;
}else {
//API
}
если корзина пуста, то метод вообще не вызывает, все так.. а если в ней есть любой товар, то условие всегда true, id там и там сходятся.
public function install() {
...
Configuration::updateValue('SR_MY_CARRIER_ID', $idCarrier);
...
}
что-то не так присываиваю?
еще в мануалах дополнительно ставят проверку
if ($this->id_carrier == (int)(Configuration::get('MYCARRIER_CARRIER_ID'))
&& Configuration::get('MYCARRIER_OVERCOST') > 1)
но не могу понять, в какой момент они MYCARRIER_OVERCOST заполняют
Наверное туда записывают ответ от api как то. И идет проверка. Т.е. пока апи не сработало, данные не дергаются. А тут идет своеобразное кэширование результата выполнения api.
В $params лежит id той доставки которая выбрана по умолчанию. Добавил еще один модуль, доставки... при заходе на любую страницу в магазине срабатывают оба getOrderShippingCost() и у обоих id сходятся... ерунда какая, как понять что пора считать цены.. я так понимаю в документации они пересчитывают её через cron видимо...
1) по умолчанию в методе возвращаем 0 (бесплатная доставка) или false (Вообще не выводить)
2) Получаем данные от api (Событие или ввод адреса или отдельная кнопка) и сохраняем данные о результате в бд.
3) getOrderShippingCost дергаем данные все время из бд, не затрагивая api
Вообщем опишу сам что сделал...
Создал промежуточную таблицу cache в которой храню адрес пользователя, вес для которого уже был расчет и сумму доставки.
При вызове getOrderShippingCost() сначала по адресу и общему весу пользователя ищется запись в cache, если не находится то вызывается api. Так же при каждом поиске удаляются записи старше одного дня.