문제

고객을위한 Ubercart 2.0 프로젝트에서 일하고 있습니다. 직물 가게를위한 것입니다. 그들은 고객이 1.75m와 같은 분수 수량 (또는 소수량)을 추가 할 수있는 능력을 원합니다. 누구든지가 있습니까? 포괄적 인 코드 변경 목록 이 기능이 허용됩니까?

도움이 되었습니까?

해결책

당신이 의미하는 바를 달성하기 위해 Ubercart 코어를 바꾸는 것 같아요 나쁜 생각. 보안 수정이있을 때 업데이트/업그레이드 할 수있는 기능이없고 다른 모듈에서는 정수를 사용한다고 가정하여 트랙이 어려운 버그 및 PHP 예외를 제공 할 수 있습니다.

나는 이전 포스터로 광범위한 검색을하지 않았지만, 당신의 필요를 직접 구현해야한다면, 내 머리 꼭대기에서 나는 다음과 같습니다.

  1. 백엔드에서 센티미터 (정수)를 논리적 측정 장치로 사용하십시오.
  2. "마스크"의 소수점 기능 add_to_cart 양식 변경 유효성 검사/제출 시간에 사용자 입력을 위해 제출시 1,75m 변환 될 것입니다 175 cm.
  3. 제품, 카탈로그 및 주문 페이지 템플릿을 변경하십시오 그들이 가격 정보를 미터로 표시하기 위해 0.05 €/cm (DB에 저장)는 다음과 같이 표시됩니다. 5 €/m.

내 2 센트 만이지만 Ubercart가 활발한 개발 중이며 최근 출시 후보 상태에서 출구에도 불구하고 여전히 많은 버그가 있습니다. 수정이 나올 때 코드베이스를 업데이트 할 수 있기를 원합니다.

편집하다: 위의 내용을 강조하기 위해 : 일주일 전에이 답변을 썼기 때문에 두 개의 UC 업데이트가 나왔는데, 그 중 하나는 중요한 보안 문제를 해결했습니다 ...

도움이 되었기를 바랍니다!

다른 팁

현재 Uberart (v 2.0)는 수량에 대한 소수를 허용하지 않습니다.

Ubercart 포럼을“소수로 양수”,“수량”및“소수량”에 대한 Ubercart 포럼을 설치하면 일부 타격을받습니다. 이 기사는 "분수 수량"을 카트에 추가 할 수 있도록 설치된 Ubercart 시스템에 대한 몇 가지 변경 사항을 간략하게 설명하기위한 노력입니다.

Lyle과 그의 게시물 답장에 감사드립니다. 이 기사.

Ubercart Core에 추가 하시겠습니까?

Ubercart 개발자가 Ubercart Core에 "분수 수량"의 능력을 구현할 수있는 방법을 찾을 수 있기를 바랍니다. 이 문서 / 기사가 그렇게하는 데 도움이되기를 바랍니다.

데이터베이스 변경

분수 수량을 수락하도록 Ubercart를 변경한다는 것은 일부 테이블 열의 데이터 유형을 정수에서 플로트로 변경해야합니다 (m, d). 플로트 데이터 유형은 소수점을 저장할 수있게합니다. 다음은 설명입니다 http://dev.mysql.com/doc/refman/55.0/en/numeric-types.html

여기서, "(m, d)"평균 값은 총 최대 m 자리로 저장 될 수 있으며, 그 중 d 자리는 소수점 이후에있을 수 있습니다. 예를 들어, float (7,4)로 정의 된 열은 표시 될 때 -999.9999처럼 보입니다. MySQL은 값을 저장할 때 반올림을 수행하므로 999.00009를 플로트 (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

누군가 Robnardo의 메시지에서 해결책이 필요하지만 Drupal 7, Ubercart 3을 신청 해야하는 경우 - Drupal 7, Ubercart 3.1에서 저를 위해 일한 것을 설명했습니다.http://www.ubercart.org/project/uc_decimal_quantities#comment-68750

Mac이 제대로되었습니다. 이러한 접근 방식은 훨씬 간단하고 유지 보수 문제가 발생하기 쉬운 일입니다.

또한 JavaScript를 사용하여 모든 유형의 측정을 지원하여 측정 시스템의 드롭 다운을 생성하고 제출시 변환을 수행하는 것이 중요합니다.

내가 작업중 인 모듈을 게시했습니다. http://www.ubercart.org/issue/6044/abiility_have_decimal_quantities ... 피드백을 남겨주세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top