Типи доставки в ubercart під drupal

Не так давно отримував посилку. Виявляється дуже навіть приємне заняття. Навіть не заняття, займатися можете чим хочете. Сам процес ожданія і невизначеність володіють якимось чаром.
Якось у мене виникла необхідність розібратися з модулями електронної комерції. об'єднаними під назвою Ubercart під Drupal. Ubercart складається з великої кількості модулів, кормі базової кошика і настройки властивостей товарів, можна обчислювати вартість доставки і надавати різні способи оплати. Особливу утруднення викликав розрахунок вартості доставки. У стандартному комплекті Ubercart є лише фіксована ціна, розрахунок за вагою і інтеграція з сервісами UPS і USPS. Останні два для нас не зовсім актуальні.
Фіксована ставка і розрахунок за вагою не дозволяють реалізувати алгоритм розрахунку вартості доставки для коханої нами ПочтиУкаіни. Розрахунок за вагою (weight quote) "зважує" тільки цілими кілограмам, а фіксована ставка не дозволяє врахувати вагу.
Корисною в даному випадку мені здалася можливість вказувати "тип доставки" (shipping type) для кожного товару. Але можливість додавати типи доставки відсутня. По всій видимості ця можливість надається модулями здійснює розрахунок доставки. яких у нас немає. Можна звичайно писати свій модуль. Але я знайшов простий і сердитий спосіб. Типи доставки можна додати безпосередньо в код модуля uc_quote і редагуючи умови для застосування методу розрахунку вартості доставки можна сконструювати досить непогану і гнучку систему розрахунку. Про спосіб розрахунку для ПочтиУкаіни напишу пізніше, а поки зазначимо свої типи доставки:
У мене вийшло так:
/ **
* 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 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 класу');
>
Як бачите тут вже додані два типу доставки. Я використовував можливість установки умов на методи розрахунку вартості доставки. Серед них було обмеження на "тип доставки" (shipping type).
Успіху і всіляких гараздів!