Типы доставки в Ubercart под Drupal. Shipping types. Расчет стоимости

получить

Не так давно получал посылку. Оказывается очень даже приятное занятие. Даже не занятие, заниматься можете чем хотите. Сам процесс ождания и неопределенность обладают каким-то очарованием.

Как-то у меня возникла необходимость разобраться с модулями электронной коммерции, объединенными под названием Ubercart под Drupal. Ubercart состоит из большого количества модулей, корме базовой корзины и настройки свойств товаров, можно вычислять стоимость доставки и предоставлять различные способы оплаты. Особое затруднение вызвал расчет стоимости доставки. В стандартном комплекте Ubercart есть лишь фиксированная цена, расчет по весу и интеграция с сервисами UPS и USPS. Последние два для нас не совсем актуальны.

Фиксированная ставка и расчет по весу не позволяют реализовать алгоритм расчета стоимости доставки для любимой нами Почты России. Расчет по весу (weight quote) "взвешивает" только по целым килограммам, а фиксированная ставка не позволяет учесть вес.

Полезной в данном случае мне показалась возможность указывать "тип доставки" (shipping type) для каждого товара. Но возможность добавлять типы доставки отсутствует. По всей видимости эта возможность предоставляется модулям осуществляющим расчет доставки, коих у нас нет. Можно конечно писать свой модуль. Но я нашел простой и сердитый способ. Типы доставки можно добавить непосредственно в код модуля uc_quote и редактируя условия для применения метода расчета стоимости доставки можно сконструировать достаточно неплохую и гибкую систему расчета. О способе расчета для Почты России напишу позже, а пока укажем свои типы доставки:

  • у вас установлен ubercart
  • включены модули uc_quote и другие необходимые
  • редактируем файл uc_quote.module.

У меня получилось так:

/**
* Implementation of hook_shipping_type().
*/
function uc_quote_shipping_type() {
$weight = variable_get('uc_quote_type_weight', array('small_package' => 0, 'package' => 0, 'registered_letter' => 0));

$types = array();
$types['small_package'] = array(
'id' => 'small_package',
'title' => t('Мелкий пакет'),
'weight' => $weight['small_package']
);
$types['package'] = array(
'id' => 'package',
'title' => t('Посылка'),
'weight' => $weight['package']
);
$types['registered_letter'] = array(
'id' => 'registered_letter',
'title' => t('Письмо 1 класса'),
'weight' => $weight['registered_letter']
);

return $types;
}

первая фунция. и вторая:

/**
* Return an options array of shipping types.
*/
function uc_quote_shipping_type_options() {
$types = array();

$ship_types = uc_quote_get_shipping_types();
uasort($ship_types, '_uc_quote_type_sort');

foreach ($ship_types as $ship_type) {
$types[$ship_type['id']] = $ship_type['title'];
}

if (empty($types)) {
$types['small_package'] = t('Мелкий пакет');
$types['package'] = t('Посылка');
$types['registered_letter'] = t('Письмо 1 класса');
}

return $types;
}

Как видите здесь уже добавлены два типа доставки. Я использовал возможность установки условий на методы расчета стоимости доставки. Среди них было ограничение на "тип доставки" (shipping type).

Удачи и всяческих благ!

вернуться назад