И опять актуальная тема Ubercart 3 + Drupal 7 = ?? "а мне нужно заказать 0.5"

Главные вкладки

Аватар пользователя cyberlex404 cyberlex404 2 ноября 2011 в 3:44

Сегодня решил сделать магазинчик.
Всё бы хорошо Ubercart 3 + Drupal 7. Но вот незадача - попытки добавить "0.5" заканчиваются сообщениями об ошибках.
И возникает даже вопрос. Неужели эта тема "0.5" такая не популярная что в Ubercard до сих пор нет этой ноль пятой возможности.

Помогите плиз решить этот вопрос/портировать на 7-ку решение с 6-ки/!!

Комментарии

Аватар пользователя alex_shut alex_shut 2 ноября 2011 в 6:22

они там на западе просто не понимают, как важно славянскому человеку иметь возможность прикупить 0,5... и при этом не раз, а вот так пару тройку по 0,5 ))))

Аватар пользователя cyberlex404 cyberlex404 3 ноября 2011 в 4:43

Как то не смешно уже.. ubercart 3 а такой мелочи сделать не сделали ((
Ковырял кто модуль под семёрку?? где там что переписывать? с d на f

Аватар пользователя Grenuy Grenuy 10 октября 2013 в 18:37

для ubercard 3.5 нашел решения с некоторыми коректировками

// making the product quantities FLOAT instead INTEGER

Drupal 7, Ubercart 3.1

//// DATABASE CHANGES
Four ubercart tables alterations are made from sql terminal
(mysql -u ADMIN_USER -p , use DATABASE_NAME )

1) The UC_CART_PRODUCTS table intersect the UC_CARTS table and the UC_PRODUCTS table. The column ц╒Б┌╛е⌠qtyц╒Б┌╛б² is the one to ajust. Here is the MySQL statement that will modify the column to a FLOAT data type:
ALTER TABLE `uc_cart_products` MODIFY COLUMN `qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;

2) The UC_ORDERS table holds all the orders created. The column to adjust is ц╒Б┌╛е⌠product_countц╒Б┌╛б².
ALTER TABLE `uc_orders` MODIFY COLUMN `product_count` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;

3) The UC_PRODUCTS table contains a default_qty field. This value gets inserted into both the product edit page and the product view page (for the customer). I think it would be a good idea to show the customer how many decimal places one may use.
ALTER TABLE `uc_products` MODIFY COLUMN `default_qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 1.00;

4) The UC_ORDER_PRODUCTS table intersects the UC_ORDERS table and the UC_PRODUCTS table. The column to adjust is the ц╒Б┌╛е⌠qtyц╒Б┌╛б² column. Here is the MySQL statement that will modify the column to a FLOAT data type:
ALTER TABLE `uc_order_products` MODIFY COLUMN `qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;

//// CODE CHANGES

// FIRST

uc_order
->
uc_order.install

//Change array elements in function to:

/**
* Increase maximum order item quantity.
*/
function uc_order_update_7003() {
db_change_field('uc_order_products', 'qty', 'qty', array(
'description' => 'The number of the same product ordered.',
'type' => 'float',
'precision' => 6,
'scale' => 1,
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1.0,
));
}

// SECOND

uc_order
->
uc_order.install

In $schema['uc_order_products'] change:

'qty' => array(
'description' => 'The number of the same product ordered.',
'type' => 'int',
'size' => 'small',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),

To:

'qty' => array(
'description' => 'The number of the same product ordered.',
'type' => 'float',
'precision' => 6,
'scale' => 1,
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1.0,
),

// THIRD

uc_product
->
uc_product.module

//For possibility of using 0.00 to 1.00 quantites

in function uc_product_uc_update_cart_item change:
(string 1052)
if ($qty < 1) {
CHANGE TO:
if ($qty == 0) {

// FOURTH

uc_order
->
uc_order.admin.inc

//Not sure if it's necessary but just in case

(string 1125)
if (!isset($product['remove']) && intval($product['qty']) > 0) {
CHANGE TO:
if (!isset($product['remove']) && ($product['qty']) > 0) {

//FIFTH

uc_cart
->
uc_cart.install

//Not sure if it's necessary but just in case

CHANGE TO FLOATS:

(string 37)

'qty' => array(
'description' => 'The number of this product in the cart.',
'type' => 'float',
'precision' => 6,
'scale' => 1,
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1.0,

AND

(string 126)

function uc_cart_update_7001() {
db_change_field('uc_cart_products', 'qty', 'qty', array(
'description' => 'The number of this product in the cart.',
'type' => 'float',
'precision' => 6,
'scale' => 1,
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1.0,
));
}

/*uc_store\uc_store.module*/

/*chenge */

function uc_store_validate_uc_quantity(&$element, &$form_state) {
if (!preg_match('/^\d+$/', $element['#value'])) {
form_error($element, t('The quantity must be a number.'));
}
elseif (empty($element['#allow_zero']) && !$element['#value']) {
form_error($element, t('The quantity cannot be zero.'));
}
}

/*on*/

function uc_store_validate_uc_quantity(&$element, &$form_state) {
if (!preg_match("/([0-9\.-]+)/", $element['#value'])) {
form_error($element, t('The quantity must be a number.'));
}
elseif (empty($element['#allow_zero']) && !$element['#value']) {
form_error($element, t('The quantity cannot be zero.'));
}
}