2

私はクライアントのためにUbercart2.0プロジェクトに取り組んでいます。生地屋さん用です。彼らは、顧客が1.75 mのような小数(または小数)を追加できることを望んでいます。この機能を可能にするコード変更の包括的なリストを持っている人はいますか?

4

5 に答える 5

3

私はあなたが意味することを達成するためにubercartコアを変更することは悪い考えだと思います。基本的に、セキュリティ修正がある場合は更新/アップグレードする機能がないことを運命づけており、おそらく他のモジュールは整数を使用していると想定し、追跡が難しいバグやphp例外に道を譲ります。

前のポスターのように広範囲にわたる検索はしませんでしたが、自分であなたのニーズを実行する必要がある場合は、頭のてっぺんから次のようにします。

  1. バックエンドの論理測定単位としてセンチメートル(整数)を使用します。
  2. 検証/送信時にユーザー入力用にadd_to_cartフォームを変更して、小数機能を「マスク」します。これにより、送信時に1,75mが175cmに変換されます。
  3. 価格情報をメートル単位で表示するように、製品、カタログ、および注文ページのテンプレートを変更して、 0.05€/ cm(DBに保存)の値が5€/mとして表示されるようにします。

私の2セントですが、ubercartは活発に開発中であり、リリース候補の状態が最近終了したにもかかわらず、まだ多くのバグがあります。修正が行われたときにコードベースを更新できるようにする必要があります。

編集:上記のことを強調するだけです:私がこの回答を1週間以内に書いたので、2つのUCアップデートが出ており、そのうちの1つは重大なセキュリティ問題を修正しています...

お役に立てれば!

于 2009-11-14T12:33:38.207 に答える
1

誰かがrobnardoのメッセージからの解決策を必要としているが、drupal 7、ubercart 3-に申し込む場合に備えて、Drupal 7、Ubercart 3.1で何がうまくいったかをここで説明しました: http ://www.ubercart.org/project/uc_decimal_quantities#comment -68750

于 2012-07-19T10:34:00.543 に答える
1

現在のUberart(v 2.0)では、数量に小数を使用できません。

Ubercartフォーラムで「小数としての数量」、「数量の分数」、および「小数の数量」を検索すると、いくつかのヒットが得られます。この記事は、カートに「小数」を追加できるようにするために、インストール済みのUbercartシステムに加えられる可能性のあるいくつかの変更の概要を説明するための取り組みです。

この記事を始めるのに役立ったライルと彼の投稿返信に感謝します。

Ubercartコアに追加しますか?

Ubercart開発者が、UbercartCoreに「小数」の機能を実装する方法を見つけられることを願っています。このドキュメント/記事がそれを実現するのに役立つことを願っています!

データベースの変更

小数を受け入れるように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

于 2009-11-13T20:56:40.753 に答える
0

macはそれを正しく理解しています。このアプローチははるかに単純で、メンテナンスの問題が発生しにくくなっています。

また、JavaScriptを使用して測定システムのドロップダウンを生成し、送信時に変換を実行することで、あらゆるタイプの測定をサポートすることも簡単になります。

于 2009-11-17T18:01:18.663 に答える
0

作業中のモジュールをhttp://www.ubercart.org/issue/6044/abiility_have_decimal_quantitiesに投稿しました...フィードバックを残してください。

于 2010-01-05T05:22:14.487 に答える