xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Динамическая цена доставки типа Flat Rate

Опубликовано в

Во всех мануалах модуля 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') {
    module_load_include('rules.inc', 'commerce_line_item');
    $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;
    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
Похожие записи

Комментарии RSS

Я в commerce 1.x на 7 версии Drupal делал 1 flat rate и в рулсах менял его как хочу. Последний раз, например цена на доставку зависела от количества товаров и одновременно от региона доставки. Единственный минус - на каждое уникальное условие доставки приходилось делать свой отдельный рулс. В итоге вышло около 10 рулсов.

В commerce 2.x такую фишку убрали? Я еще с ним детально не разбирался

Не знаю, речь о Commerce 1.x.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании