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 ALTER
a 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 decimal
e numeric
assim:
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.php
arquivo? Eu tenho o mesmo problema e eu não consigo encontrar uma solução