Ubercart 2.0-允许小数转换的代码更改列表?

Asked
Viewd665

2

我正在为客户进行Ubercart 2.0项目。它是用于布料商店。他们希望客户能够添加1.75 m之类的小数(或小数)数量。有没有人能提供全面的代码更改列表以实现此功能?

  • 嗨,mac,我创建了一个自定义模块来处理此问题。感谢您的询问。

    robnardoOctober 30, 2011 19:47
  • 很好奇……您最终是怎么做到的?

    macDecember 16, 2009 20:01

5 个答案

3

我认为更改ubercart核心以实现您的意思是一个坏主意。当存在安全修复程序时,您基本上注定了自己无法更新/升级,并且可能其他模块会假定您使用整数,而让难以跟踪的错误和php异常让步。

我没有像以前的海报那样进行广泛的搜索,但是如果我必须自己实现您的需求,那么我就会:

  1. 使用厘米(整数)作为后端的逻辑度量单位。
  2. 通过在验证/提交时更改add_to_cart表单来“掩盖”十进制功能,以供用户输入,以便在提交 1.75m 时进行转换在 175厘米中。
  3. 更改产品,目录和订购页面模板,以使它们以米为单位显示价格信息,以便将 0.05€/ cm 的值存储在数据库中)显示为 5€/ m

仅需2美分,但请考虑ubercart处于积极开发中,并且-尽管最近已退出候选发布状态-但它仍然存在许多错误:您确实希望能够在修补程序发布时更新代码库。 / p>

编辑:只是为了强调上述内容:自从我不到一周前编写此答案以来,已经发布了两个UC更新,其中一个解决了关键的安全问题...

希望这会有所帮助!

  • 是的,这很有意义。如果我必须重新访问此问题,我会采用这种方式。我可能应该把这个答案归功于你。robnardoOctober 30, 2011 19:50
1

以防万一有人需要robnardo消息中的解决方案但要申请drupal 7,ubercart 3-我在这里描述了在Drupal 7,Ubercart 3.1中对我有用的方法: http://www.ubercart.org/project/uc_decimal_quantities#comment-68750

0

mac没错。这种方法更加简单,并且不易出现维护问题。

使用JavaScript支持任何类型的度量以生成度量系统下拉列表并在提交时进行转换也将变得很简单。

1

当前的Uberart(v 2.0)不允许使用小数位数。

如果您在Ubercart论坛上搜索“以十进制表示的数量”,“以分数表示的数量”和“以十进制表示的数量”,那么您会获得一些成功。本文旨在概述可能对已安装的Ubercart系统进行的一些更改,以允许在购物车中添加“小数”。

谢谢莱尔(Lyle)和他的帖子答复,帮助我开始了这篇文章

添加到Ubercart Core?

我希望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