Domanda

Sto lavorando su un progetto Ubercart 2.0 per un cliente. E 'per un negozio di tessuti. Vogliono la possibilità per i clienti di aggiungere quantità frazionarie (o quantità decimale) come 1,75 m. Qualcuno ha un elenco completo delle modifiche al codice che permetteranno per questa funzionalità?

È stato utile?

Soluzione

Credo che cambiare Ubercart nucleo per ottenere quello che vuoi dire è un cattiva idea . Tu sei fondamentalmente condannando te stesso per non avere la possibilità di aggiornare / upgrade quando ci sono aggiornamenti di sicurezza e, probabilmente, qualche altro modulo assumerebbero si utilizza intero, lasciando il posto a bug difficili da pista ed eccezioni php.

non ho fatto una lunga ricerca come la recensione precedente, ma se dovessi implementare il vostro bisogno di me, la parte superiore della mia testa mi sarebbe:

  1. Usa centimetri (interi) come unità di misura logica nel back-end.
  2. "Mask" la funzionalità decimale alterando le forme add_to_cart in validazione / presentare il tempo, per l'input dell'utente, in modo che il submit 1,75 m otterrebbe convertito in 175 centimetri .
  3. altera il prodotto, catalogo e Ordine pagine template in modo per loro di visualizzare i prezzi in metri, in modo che il valore di 0,05 € / cm (memorizzato nel DB ) verrebbe visualizzato come 5 € / m .

Solo i miei due centesimi, ma ritengono che Ubercart è in fase di sviluppo e - nonostante la recente uscita dallo stato di Release Candidate - ha ancora un sacco di bug: si vuole veramente essere in grado di aggiornare il codice di base quando correzioni escono <. / p>

Modifica semplicemente sottolineare quanto sopra: da quando ho scritto questa risposta di meno di una settimana fa, due aggiornamenti UC sono usciti, di cui una fissazione di un problema di sicurezza critica ...

Spero che questo aiuti!

Altri suggerimenti

L'Uberart corrente (v 2.0) non consente decimali per le loro quantità.

Se si Seach forum Ubercart per “quantità di decimali”, “frazioni per quantità”, e “le quantità decimali” si ottiene alcuni colpi. Questo articolo è un tentativo di delineare alcune modifiche che potrebbero essere apportate al sistema Ubercart installato per consentire l'aggiunta di "quantità frazionaria" al carrello.

Grazie a Lyle e la sua risposta post che mi ha aiutato a iniziare a questo articolo .

Aggiungi a Ubercart Nucleo?

Mi auguro che gli sviluppatori Ubercart possono trovare un modo per implementare la possibilità per “quantità frazionarie” a Ubercart Nucleo. Mi auguro che questo documento / articolo vi aiuterà a realizzare questo!

Database modifiche

Modifica Ubercart accettare quantità frazionarie indica il tipo di dati di alcune colonne della tabella deve essere modificato da INTEGER a FLOAT (M, D). Il tipo di dati FLOAT consente decimale da memorizzare. Ecco una descrizione da http://dev.mysql.com /doc/refman/5.0/en/numeric-types.html

  

Qui, “(M, D)”, i valori che possono essere   immagazzinato fino a M cifre in totale,   dei quali cifre D può essere successiva   punto decimale. Ad esempio, una colonna   definita come FLOAT (7,4) sarà simile   -999.9999 quando vengono visualizzati. MySQL esegue arrotondamento quando memorizzare i valori,   quindi se si inserisce in un 999,00,009 mila   FLOAT (7,4) della colonna, l'approssimativa   risultato è 999,0001.

Di seguito sono elencate le modifiche alle tabelle da effettuare per consentire 2 decimali e 6 cifre totali. Applicando le seguenti modifiche delle tabelle del database non dovrebbe pregiudicare i dati esistenti, a meno che non si dispone di quantità superiori a 6 cifre -. In questo caso si potrebbe aumentare il valore 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;

Codice modifiche

// # uc_cart.module (line 1445)
db_query("UPDATE {uc_cart_products} SET qty = %d, changed = UNIX_TIMESTAMP(), data = '%s' WHERE cart_item_id = %d",

per ...

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));

per ...

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', "

per ...

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);

per ...

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,

con ...

'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));

per ...

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));

-

Pensieri - Ulteriori modifiche

Probabilmente sarebbe una buona idea di aggiungere alcune funzionalità per consentire una scelta o meno di un certo tipo di prodotto / classe è autorizzato ad accettare “quantità frazionaria”. Forse l'aggiunta di una colonna booleana (come “allow_frac_qty”) nella tabella uc_product_classes o la tabella uc_products. Poi, naturalmente, ci sarebbero più di codice aggiunte / modifiche per consentire per questo. Inoltre, la colonna “pkg_qty” nella tabella uc_products può anche avere bisogno di essere cambiato

Altri Messaggi del Forum 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

Nel caso in cui qualcuno ha bisogno di una soluzione dal messaggio di robnardo ma di applicare per Drupal 7, Ubercart 3 - Ho descritto ciò che aveva lavorato per me in Drupal 7, Ubercart 3.1 qui: http://www.ubercart.org/project/uc_decimal_quantities#comment-68750

mac ce l'ha proprio. Questo approccio è molto più semplice e meno soggetto a problemi di manutenzione.

Sarebbe anche rendere banale per supportare qualsiasi tipo di misura utilizzare JavaScript per generare un menu a discesa del sistema di misurazione e di fare una conversione a presentare.

Ho inviato un modulo di cui sto lavorando a http://www.ubercart.org / problema / 6044 / abiility_have_decimal_quantities ... Si prega di lasciare il tuo feedback.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top