Un sito Web che gestisco richiede che i prezzi abbiano 5 decimali. Sono andato avanti e ho modificato almeno una dozzina di file / tabelle per riuscire a raggiungere questo obiettivo. Ma (perché c'è sempre un ma) sembra esserci un problema catalog_product_flat_X.
Mi spiego: per i prezzi sul fronte, la maggior parte delle volte, si tratta di chiamare Mage_Catalog_Model_Product->getPrice(), che, a quanto ho capito, cercherà il prezzo nei tavoli piatti (se hai tavoli piatti abilitati). Il problema è con la reindicizzazione dei dati.
Se la mia tabella piatta ha un prezzo con il formato DECIMAL(12,5), premendo il link "Reindex" sulla riga "Reindex flat data" verrà ripristinata ALTERla tabella piatta DECIMAL(12,4).
Dopo aver cercato per molto tempo, sono arrivato ad una funzione in
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
cui viene chiamato prepareFlatTable($storeId). Questa funzione chiama quindi convertOldColumnDefinition($column)su ogni colonna della tabella piatta (in questo caso).
Infine, osservando questa funzione in
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
essa sembra convertire tutti decimale numericcosì:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
in cui $proposedLengthè il risultato di questo:
$definition = trim($column['type']);
if (!preg_match('/([^(]*)(\\((.*)\\))?/', $definition, $matches)) {
throw Mage::exception(
'Mage_Core',
Mage::helper('core')->__("Wrong old style column type definition: {$definition}.")
);
}
$proposedLength = (isset($matches[3]) && strlen($matches[3])) ? $matches[3] : null;
Non capisco bene cosa stia succedendo qui, inserisco qualcosa di hardcoded ma non voglio interferire con il normale processo di tutti gli indicizzatori.
Qualcuno può illuminarmi su questo argomento e offrirmi una soluzione?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.phpfile? Ho lo stesso problema e non riesco a trovare una soluzione