Во всех мануалах модуля Commerce Shipping советуют создавать отдельный способ доставки (shipping service) на каждую градацию цены, например:
- доставка для заказов дешевле 5000 р.
- доставка для заказов от 5000 до 10000 р.
- ...
У каждого способа будет своя цена и свои условия в rules компоненте.
Однако можно создать один способ доставки, а цену высчитывать динамически с помощью PHP:
/**
* Implements hook_commerce_shipping_calculate_rate().
*/
function hook_commerce_shipping_calculate_rate($line_item) {
$line_item_wrap = entity_metadata_wrapper('commerce_line_item', $line_item);
if ($line_item_wrap->commerce_shipping_service->value() == 'russian_post') {
$order_base_price = commerce_price_component_total($line_item_wrap->order->commerce_order_total->value(), 'base_price');
$shipping_amount = ($order_base_price['amount'] < 1000000) ? 50000 : 20000;
module_load_include('rules.inc', 'commerce_line_item');
commerce_line_item_unit_price_add($line_item, $shipping_amount, $line_item->data['shipping_service']['price_component'], COMMERCE_ROUND_HALF_UP);
}
}
Код устанавливает цену доставки russian_post
в 500 рублей для заказов дешевле 10000, а для всех остальных — 200 руб. Цена должна быть в валюте, указанной в настройках shipping service.
Написанное актуально для
Commerce Shipping 7.x-2.3
Комментарии
Я в commerce 1.x на 7 версии Drupal делал 1 flat rate и в рулсах менял его как хочу. Последний раз, например цена на доставку зависела от количества товаров и одновременно от региона доставки. Единственный минус - на каждое уникальное условие доставки приходилось делать свой отдельный рулс. В итоге вышло около 10 рулсов.
В commerce 2.x такую фишку убрали? Я еще с ним детально не разбирался
Не знаю, речь о Commerce 1.x.
Добавить комментарий