我正在为客户开发Ubercart 2.0项目。这是一个面料商店。他们希望客户能够添加1.75米的小数量(或十进制数量)。有没有人有一个全面的代码更改列表,这将允许这个功能?
答案 0 :(得分:3)
我认为改变ubercart核心来实现你的意思是坏主意。当有安全修复时,你基本上没有能力更新/升级,并且可能一些其他模块会假设你使用整数,让位于难以跟踪的错误和php异常。
我没有像以前的海报那样进行广泛的搜索,但如果我必须自己实现你的需求,我会想到:
只是我的两分钱,但考虑到ubercart正在积极开发中 - 尽管最近退出候选版本状态 - 它仍然有很多错误:你真的希望能够在修复程序出现时更新你的代码库。 / p>
编辑:只是为了强调上述内容:因为我在不到一周前写了这个答案,两个UC更新已经出来,其中一个修复了一个严重的安全问题......
希望这有帮助!
答案 1 :(得分:1)
当前的Uberart(v 2.0)不允许其数量的小数。
如果您在Ubercart论坛上搜索“数量为十进制”,“数量分数”和“十进制数量”,您会得到一些点击。本文旨在概述可能对您安装的Ubercart系统进行的一些更改,以允许向您的购物车添加“小数量”。
感谢Lyle和他的帖子回复,帮助我开始this article。
添加到Ubercart核心?
我希望Ubercart开发人员能够找到一种方法来实现Ubercart Core的“小数量”能力。我希望这份文件/文章能够帮助实现这一目标!
数据库更改
更改Ubercart以接受小数量意味着某些表列的数据类型必须从INTEGER更改为FLOAT(M,D)。 FLOAT数据类型允许存储小数。以下是http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
的说明这里,“(M,D)”表示值可以 最多存储M位数, 其中D位数可能在。之后 小数点。例如,一列 定义为FLOAT(7,4)的样子 显示时为-999.9999。 MySQL在存储值时执行舍入, 所以如果你插入999.00009 FLOAT(7,4)栏,近似 结果是999.0001。
以下是对允许2位小数和6位总数的表的更改。应用以下数据库表更改不应影响现有数据,除非数量大于6位 - 在这种情况下,您可以增加M值。
// # UC_CART_PRODUCTS
ALTER TABLE `uc_cart_products` MODIFY COLUMN `qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;
UC_ORDERS
// # UC_ORDERS
ALTER TABLE `uc_orders` MODIFY COLUMN `product_count` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;
// # UC_PRODUCTS
ALTER TABLE `uc_products` MODIFY COLUMN `default_qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 1.00;
// # UC_ORDER_PRODUCTS
ALTER TABLE `uc_order_products` MODIFY COLUMN `qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;
代码更改
// # uc_cart.module (line 1445)
db_query("UPDATE {uc_cart_products} SET qty = %d, changed = UNIX_TIMESTAMP(), data = '%s' WHERE cart_item_id = %d",
为...
db_query("UPDATE {uc_cart_products} SET qty = %f, changed = UNIX_TIMESTAMP(), data = '%s' WHERE cart_item_id = %d",
-
// # uc_cart.module (line 1509)
db_query("INSERT INTO {uc_cart_products} (cart_id, nid, qty, changed, data) VALUES ('%s', %d, %d, %d, '%s')", $cid, $node->nid, $qty, time(), serialize($data));
为...
db_query("INSERT INTO {uc_cart_products} (cart_id, nid, qty, changed, data) VALUES ('%s', %d, %f, %d, '%s')", $cid, $node->nid, $qty, time(), serialize($data));
-
// # uc_order.module (line 1043)
db_query("UPDATE {uc_orders} SET uid = %d, order_status = '%s', order_total = %f, product_count = %d, primary_email = '%s', "
为...
db_query("UPDATE {uc_orders} SET uid = %d, order_status = '%s', order_total = %f, product_count = %f, primary_email = '%s', "
-
// # uc_order.module (line 1143)
db_query("UPDATE {uc_orders} SET product_count = %d WHERE order_id = %d", $count, $order->order_id);
为...
db_query("UPDATE {uc_orders} SET product_count = %f WHERE order_id = %d", $count, $order->order_id);
-
// # uc_order.install (replace lines 48 to 51)
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
...与
'type' => 'float',
'precision' => '6',
'scale' => '2',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1.00,
-
// # uc_product.module (line 1207)
db_query("UPDATE {uc_cart_products} SET qty = %d, changed = %d WHERE nid = %d AND cart_id = '%s' AND data = '%s'", $qty, time(), $nid, $cid, serialize($data));
为...
db_query("UPDATE {uc_cart_products} SET qty = %f, changed = %d WHERE nid = %d AND cart_id = '%s' AND data = '%s'", $qty, time(), $nid, $cid, serialize($data));
-
想法 - 其他更改
添加一些功能以允许选择是否允许某个产品类型/类别接受“小数量”可能是个好主意。也许在uc_product_classes表或uc_products表中添加了一个布尔列(如“allow_frac_qty”)。然后,当然会有更多的代码添加/更改来实现这一点。此外,uc_products表中的“pkg_qty”列也可能需要更改
其他Ubercart论坛帖子
http://www.ubercart.org/forum/support/4651/use_fractions_quantity_15_yards
http://www.ubercart.org/forum/support/6074/decimal_quantities_items
http://www.ubercart.org/issue/6044/abiility_have_decimal_quantities
http://www.ubercart.org/forum/ideas_and_suggestions/3283/comma_values_quantity_field
答案 2 :(得分:1)
以防有人需要robnardo留言的解决方案,但申请drupal 7,ubercart 3 - 我在Drupal 7,Ubercart 3.1中描述了什么对我有用: http://www.ubercart.org/project/uc_decimal_quantities#comment-68750
答案 3 :(得分:0)
使用JavaScript支持任何类型的测量以生成测量系统的下拉并在提交时进行转换也是微不足道的。
答案 4 :(得分:0)
我已在http://www.ubercart.org/issue/6044/abiility_have_decimal_quantities发布了我正在处理的模块...请留下您的反馈。