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 ALTER
la 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 decimal
e numeric
così:
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.php
file? Ho lo stesso problema e non riesco a trovare una soluzione