run 3 июля 2010 в 16:21 В Ubercart есть возможность установить минимальную сумму заказа. Как задать максимальную сумму заказа? Drupal6 Блог Войдите или зарегистрируйтесь, чтобы отправлять комментарии
run 3 июля 2010 в 16:47 "<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote: Можно попытаться создать новое правило admin/store/ca Как это может выглядеть?
volocuga@drupal.org 3 июля 2010 в 22:56 Там простейшая логика: Если Событие И Условие То Действие Действием может быть соответствующая надпись или редирект на левую страницу или свой php или ещё чего. Я не делал то, что вам нужно, я допускаю, что это можно сделать таким способом. Также неплохо бы посмотреть эти модули: http://drupal.org/project/uc_product_minmax http://drupal.org/project/uc_restrict_qty на предмет нужных фич
run 11 июля 2010 в 0:10 volocuga@drupal.org спасибо, буду смотреть также в сторону модуля http://drupal.org/project/uc_multiflatrate
guitmann1 15 июля 2010 в 19:56 Получилось это выполнить, может способ и не самый лучший. В файлах корзины uc_cart.admin.inc, uc_cart.module и uc_cart.pages.inc выполнил это по аналогии с "минимальным заказом".
guitmann1 16 июля 2010 в 10:26 volocuga@drupal.org : ага он самый, если интересно могу выложить описание.
run 16 июля 2010 в 12:21 "guitmann1" wrote: если интересно могу выложить описание. Интересно описание. Выкладывайте!
guitmann1 16 июля 2010 в 16:04 в файле sites\all\modules\ubercart\uc_cart\uc_cart.module : на 257 строке фунцкиця: <?phpfunction uc_cart_init() { global $conf; $conf['i18n_variables'][] = 'uc_cart_breadcrumb_text'; $conf['i18n_variables'][] = 'uc_cart_help_text'; $conf['i18n_variables'][] = 'uc_cart_new_account_details'; $conf['i18n_variables'][] = 'uc_checkout_instructions'; $conf['i18n_variables'][] = 'uc_checkout_review_instructions'; $conf['i18n_variables'][] = 'uc_continue_shopping_text'; $conf['i18n_variables'][] = 'uc_minimum_subtotal_text'; $conf['i18n_variables'][] = 'uc_msg_continue_shopping'; $conf['i18n_variables'][] = 'uc_msg_order_existing_user'; $conf['i18n_variables'][] = 'uc_msg_order_logged_in'; $conf['i18n_variables'][] = 'uc_msg_order_new_user'; $conf['i18n_variables'][] = 'uc_msg_order_submit';}?> добавляем в нее строку <?php $conf['i18n_variables'][] = 'uc_maximum_subtotal_text'; ?> потом в админке корзины sites\all\modules\ubercart\uc_cart\uc_cart.admin.inc : строка 70 (добавление формы ввода минимальной суммы заказа) : <?php$form['general']['uc_minimum_subtotal'] = array( '#type' => 'textfield', '#title' => t('Minimum order subtotal'), '#description' => t('Optionally specify a minimum allowed subtotal for a cart to proceed to checkout.'), '#summary' => t('The minimum subtotal is subtotal', array('subtotal' => uc_price(variable_get('uc_minimum_subtotal', 0), $context))), '#default_value' => variable_get('uc_minimum_subtotal', 0), '#size' => 16, '#field_prefix' => variable_get('uc_sign_after_amount', FALSE) ? '' : variable_get('uc_currency_sign', '$'), '#field_suffix' => variable_get('uc_sign_after_amount', FALSE) ? variable_get('uc_currency_sign', '$') : '', ); ?> сразу за ней вставляем форму ввода максимального заказа: <?php$form['general']['uc_maximum_subtotal'] = array( '#type' => 'textfield', '#title' => t('Maximum order subtotal'), '#description' => t('Optionally specify a maximum allowed subtotal for a cart to proceed to checkout.'), '#summary' => t('The maximum subtotal is subtotal', array('subtotal' => uc_price(variable_get('uc_maximum_subtotal', 0), $context))), '#default_value' => variable_get('uc_maximum_subtotal', 0), '#size' => 16, '#field_prefix' => variable_get('uc_sign_after_amount', FALSE) ? '' : variable_get('uc_currency_sign', '$'), '#field_suffix' => variable_get('uc_sign_after_amount', FALSE) ? variable_get('uc_currency_sign', '$') : '', ); ?> затем в sites\all\modules\ubercart\uc_cart\uc_cart.pages.inc : на строке 69 проверка суммы товара уже в самой корзине (проверка минимальной суммы): <?phpif (($min = uc_price(variable_get('uc_minimum_subtotal', 0), $context)) > 0) { $subtotal = 0; if (is_array($items) && count($items) > 0) { foreach ($items as $item) { $data = module_invoke($item->module, 'cart_display', $item); if (!empty($data)) { $subtotal += $data['#total']; } } } if ($subtotal < $min) { $context = array( 'revision' => 'formatted-original', 'type' => 'amount', ); drupal_set_message(variable_get('uc_minimum_subtotal_text', t('The minimum order subtotal for checkout is !min.', array('!min' => uc_price($min, $context)))), 'error'); drupal_goto('cart'); } } ?> за ней вставляем нашу проверку уже максимальной суммы заказа: <?php if (($max = uc_price(variable_get('uc_maximum_subtotal', 0), $context)) > 0) { $subtotal = 0; if (is_array($items) && count($items) > 0) { foreach ($items as $item) { $data = module_invoke($item->module, 'cart_display', $item); if (!empty($data)) { $subtotal += $data['#total']; } } } if ($subtotal > $max) { $context = array( 'revision' => 'formatted-original', 'type' => 'amount', ); drupal_set_message(variable_get('uc_maximum_subtotal_text', t('The maximum order subtotal for checkout is !max.', array('!max' => uc_price($max, $context)))), 'error'); drupal_goto('cart'); } } ?> вот и все
Комментарии
Можно попытаться создать новое правило admin/store/ca
Как это может выглядеть?
Там простейшая логика: Если Событие И Условие То Действие
Действием может быть соответствующая надпись или редирект на левую страницу или свой php или ещё чего.
Я не делал то, что вам нужно, я допускаю, что это можно сделать таким способом.
Также неплохо бы посмотреть эти модули:
http://drupal.org/project/uc_product_minmax
http://drupal.org/project/uc_restrict_qty
на предмет нужных фич
volocuga@drupal.org спасибо, буду смотреть также в сторону модуля http://drupal.org/project/uc_multiflatrate
Получилось это выполнить, может способ и не самый лучший. В файлах корзины uc_cart.admin.inc, uc_cart.module и uc_cart.pages.inc выполнил это по аналогии с "минимальным заказом".
guitmann1: т.е хак ядра?
volocuga@drupal.org : ага он самый, если интересно могу выложить описание.
Интересно описание. Выкладывайте!
в файле sites\all\modules\ubercart\uc_cart\uc_cart.module :
на 257 строке фунцкиця:
<?php
function uc_cart_init() {
global $conf;
$conf['i18n_variables'][] = 'uc_cart_breadcrumb_text';
$conf['i18n_variables'][] = 'uc_cart_help_text';
$conf['i18n_variables'][] = 'uc_cart_new_account_details';
$conf['i18n_variables'][] = 'uc_checkout_instructions';
$conf['i18n_variables'][] = 'uc_checkout_review_instructions';
$conf['i18n_variables'][] = 'uc_continue_shopping_text';
$conf['i18n_variables'][] = 'uc_minimum_subtotal_text';
$conf['i18n_variables'][] = 'uc_msg_continue_shopping';
$conf['i18n_variables'][] = 'uc_msg_order_existing_user';
$conf['i18n_variables'][] = 'uc_msg_order_logged_in';
$conf['i18n_variables'][] = 'uc_msg_order_new_user';
$conf['i18n_variables'][] = 'uc_msg_order_submit';
}
?>
добавляем в нее строку
<?php $conf['i18n_variables'][] = 'uc_maximum_subtotal_text'; ?>
потом в админке корзины sites\all\modules\ubercart\uc_cart\uc_cart.admin.inc :
строка 70 (добавление формы ввода минимальной суммы заказа) :
<?php
$form['general']['uc_minimum_subtotal'] = array(
'#type' => 'textfield',
'#title' => t('Minimum order subtotal'),
'#description' => t('Optionally specify a minimum allowed subtotal for a cart to proceed to checkout.'),
'#summary' => t('The minimum subtotal is subtotal', array('subtotal' => uc_price(variable_get('uc_minimum_subtotal', 0), $context))),
'#default_value' => variable_get('uc_minimum_subtotal', 0),
'#size' => 16,
'#field_prefix' => variable_get('uc_sign_after_amount', FALSE) ? '' : variable_get('uc_currency_sign', '$'),
'#field_suffix' => variable_get('uc_sign_after_amount', FALSE) ? variable_get('uc_currency_sign', '$') : '',
);
?>
сразу за ней вставляем форму ввода максимального заказа:
<?php
$form['general']['uc_maximum_subtotal'] = array(
'#type' => 'textfield',
'#title' => t('Maximum order subtotal'),
'#description' => t('Optionally specify a maximum allowed subtotal for a cart to proceed to checkout.'),
'#summary' => t('The maximum subtotal is subtotal', array('subtotal' => uc_price(variable_get('uc_maximum_subtotal', 0), $context))),
'#default_value' => variable_get('uc_maximum_subtotal', 0),
'#size' => 16,
'#field_prefix' => variable_get('uc_sign_after_amount', FALSE) ? '' : variable_get('uc_currency_sign', '$'),
'#field_suffix' => variable_get('uc_sign_after_amount', FALSE) ? variable_get('uc_currency_sign', '$') : '',
);
?>
затем в sites\all\modules\ubercart\uc_cart\uc_cart.pages.inc :
на строке 69 проверка суммы товара уже в самой корзине (проверка минимальной суммы):
<?php
if (($min = uc_price(variable_get('uc_minimum_subtotal', 0), $context)) > 0) {
$subtotal = 0;
if (is_array($items) && count($items) > 0) {
foreach ($items as $item) {
$data = module_invoke($item->module, 'cart_display', $item);
if (!empty($data)) {
$subtotal += $data['#total'];
}
}
}
if ($subtotal < $min) {
$context = array(
'revision' => 'formatted-original',
'type' => 'amount',
);
drupal_set_message(variable_get('uc_minimum_subtotal_text', t('The minimum order subtotal for checkout is !min.', array('!min' => uc_price($min, $context)))), 'error');
drupal_goto('cart');
}
}
?>
за ней вставляем нашу проверку уже максимальной суммы заказа:
<?php
?>
if (($max = uc_price(variable_get('uc_maximum_subtotal', 0), $context)) > 0) {
$subtotal = 0;
if (is_array($items) && count($items) > 0) {
foreach ($items as $item) {
$data = module_invoke($item->module, 'cart_display', $item);
if (!empty($data)) {
$subtotal += $data['#total'];
}
}
}
if ($subtotal > $max) {
$context = array(
'revision' => 'formatted-original',
'type' => 'amount',
);
drupal_set_message(variable_get('uc_maximum_subtotal_text', t('The maximum order subtotal for checkout is !max.', array('!max' => uc_price($max, $context)))), 'error');
drupal_goto('cart');
}
}
вот и все