Доработка модуля расчета доставки по весу
Прислано: MGMaster
пт, 30/07/2010 - 07:07
Требуется доработать модуль uc_weightquote расчета доставки по весу.
Когда создаешь способ доставки, нужна возможность выбирать начальный вес величину шага для следующей стоимости.
Возможно ли такое? Сколько будет стоить?
- MGMaster's blog
- Для комментирования войдите или зарегистрируйтесь
да возможно
как раз щас занимаюсь доработкой подобного модуля
- Для комментирования войдите или зарегистрируйтесь
К сожалению средств уже на покупку нет.
Выкрутились так, что прописали каждый вес в стандартной доставке.
Подскажите, сколько бы это стоило?
И еще один вопрос: может Вы сможете подсказать как вытащить переменную, в которой хранится общий вес в корзине, и вывести ее значение в корзине?
- Для комментирования войдите или зарегистрируйтесь
$products = uc_cart_get_contents(); $weight = 0; foreach($products as $product) $weight += (float)$product->weight; echo $weight;
- Для комментирования войдите или зарегистрируйтесь
Доработали модуль?
Сможете поделиться? Сколько будет стоить?
- Для комментирования войдите или зарегистрируйтесь
у меня стояла задача щитать доставку так - до 30 кг - 50 грн, свыше 30 кг - плюс 50 грн, и так за каждые новые 30 кг. стоимость доставки этих 30 кг - это значение по умолчанию, вводимое в настройках модуля.
решать задачу нужно было быстро, поетому убила котенка таким образом:
это кусок кода модуля uc_weightquote, правила прям в нем, знаю что это ужасно, но выхода не было. может быть кому-то пригодится на будущее:
закоментировала расчет стоимости за каждый лишний килограмм, ниже добавила расчет стоимости за каждые последующие 30.
function uc_weightquote_quote($products, $details, $method) {
$method = explode('_', $method['id']);
$mid = $method[1];
$context = array(
'revision' => 'altered',
'type' => 'amount',
);
if ($method = db_fetch_object(db_query("SELECT * FROM {uc_weightquote_methods} WHERE mid = %d", $mid))) {
$context['extras']['weightquote_method'] = $method;
// Start at the base rate.
foreach ($products as $product) {
$context['subject']['order_product'] = $product;
// if (empty($product->weightquote) || is_null($product->weightquote[$mid])) {
// $price_info = array(
// 'price' => $method->product_rate,
// 'qty' => $product->qty,
// );
// // Add the method's default product rate.
// $product_rate = uc_price($price_info, $context);
// }
// else {
// $price_info = array(
// 'price' => $product->weightquote[$mid],
// 'qty' => $product->qty,
// );
// // Add the product-specific rate.
// $product_rate = uc_price($price_info, $context);
// }
$weights += ($product->qty * $product->weight);
// $rate += $product_rate * $product->weight * uc_weight_conversion($product->weight_units, variable_get('uc_weight_unit', 'lb'));
}
$total_weight = $weights;
$kvo_pos=1;
if($total_weight > 30) {
$kvo_pos=ceil($total_weight/30);
}
$rate = $method->base_rate*$kvo_pos;
unset($context['subject']['order_product']);
$altered = uc_price($rate, $context);
$context['revision'] = 'formatted';
$formatted = uc_price($rate, $context);
$quotes[] = array('rate' => $altered, 'format' => $formatted, 'option_label' => check_plain($method->label));
}
return $quotes;
}
- Для комментирования войдите или зарегистрируйтесь
Лучщше conditional настроить.
- Для комментирования войдите или зарегистрируйтесь




Комментарии