Um site que eu gerencio exige que os preços tenham 5 casas decimais. Fui em frente e modifiquei pelo menos uma dúzia de arquivos / tabelas para conseguir isso. Mas (porque sempre há um mas) parece haver um problema catalog_product_flat_X.
Deixe-me explicar: para os preços na frente, na maioria das vezes, é a chamada Mage_Catalog_Model_Product->getPrice(), que, pelo que entendi, procurará o preço nas mesas planas (se você tiver as mesas planas ativadas). O problema está na reindexação dos dados.
Se minha mesa plana tiver um preço com o formato DECIMAL(12,5), clicar no link "Reindexar" na linha "Reindexar dados simples" fará com que ALTERa mesa plana seja colocada novamente DECIMAL(12,4).
Depois de pesquisar por uma quantidade bastante extensa de tempo, cheguei a uma função na
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
qual é chamada prepareFlatTable($storeId). Essa função chama convertOldColumnDefinition($column)todas as colunas da tabela plana (neste caso).
Finalmente, quando se olha para esta função em
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
que parece ser converter todos os decimale numericassim:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
em que $proposedLengthé o resultado disso:
$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;
Eu não entendo direito o que está acontecendo aqui, eu colocaria algo codificado lá, mas não quero interferir no processo normal de todos os indexadores.
Alguém pode me esclarecer sobre esse assunto e me oferecer uma solução?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.phparquivo? Eu tenho o mesmo problema e eu não consigo encontrar uma solução