Un sitio web que administro requiere que los precios tengan 5 decimales. Seguí adelante y modifiqué al menos una docena de archivos / tablas en total para poder lograr esto. Pero (porque siempre hay un pero) parece haber un problema con catalog_product_flat_X
.
Permítanme explicar: para los precios en el frente, la mayoría de las veces se reduce a las llamadas Mage_Catalog_Model_Product->getPrice()
, que, según tengo entendido, buscarán el precio en las mesas planas (si tiene habilitadas las mesas planas). El problema es con la reindexación de datos.
Si mi tabla plana tiene un precio con el formato DECIMAL(12,5)
, al presionar el enlace "Reindex" en la línea "Reindex flat data" aparecerá ALTER
la tabla plana y la volverá a colocar DECIMAL(12,4)
.
Después de buscar una cantidad de tiempo bastante extensa, llegué a una función en la
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
que se llama prepareFlatTable($storeId)
. Esta función luego llama convertOldColumnDefinition($column)
a cada columna de la tabla plana (en este caso).
Por último, cuando se mira en esta función en
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
lo que parece ser la conversión de todos decimal
y numeric
de este modo:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
en cual $proposedLength
es el resultado de esto:
$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;
No entiendo lo que está pasando aquí, pondría algo codificado allí, pero no quiero interferir con el proceso normal de todos los indexadores.
¿Alguien puede iluminarme sobre este asunto y ofrecerme una solución?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
archivo? Tengo el mismo problema y no puedo encontrar una solución