Сегодня решил сделать магазинчик.
Всё бы хорошо Ubercart 3 + Drupal 7. Но вот незадача - попытки добавить "0.5" заканчиваются сообщениями об ошибках.
И возникает даже вопрос. Неужели эта тема "0.5" такая не популярная что в Ubercard до сих пор нет этой ноль пятой возможности.
Помогите плиз решить этот вопрос/портировать на 7-ку решение с 6-ки/!!
Комментарии
они там на западе просто не понимают, как важно славянскому человеку иметь возможность прикупить 0,5... и при этом не раз, а вот так пару тройку по 0,5 ))))
Я вот вроде русский, но что такое 0.5 ? Полтовара чтоли?
Полграмма герыча, например.
cyberlex404, а вы из 0.5 сделайте 5 по 0.1.
я о достославных "пол литрах" говорил)
В конкретной ситуации больше 0.5 не нужно. Такой уж магазин.. в котором нет 0.1 0.2 0.3 0.4 etc.
Как то не смешно уже.. ubercart 3 а такой мелочи сделать не сделали ((
Ковырял кто модуль под семёрку?? где там что переписывать? с d на f
для 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.'));
}
}