Un site Web que je gère exige que les prix aient 5 décimales. Je suis allé de l'avant et j'ai modifié au moins une douzaine de fichiers / tables pour pouvoir y parvenir. Mais (parce qu'il y a toujours un mais) il semble y avoir un problème avec catalog_product_flat_X
.
Je m'explique: pour les prix sur le devant, la plupart du temps, cela revient à appeler Mage_Catalog_Model_Product->getPrice()
, qui, si je comprends bien, recherchera le prix dans les tables plates (si vous avez activé les tables plates). Le problème concerne la réindexation des données.
Si ma table plate a un prix avec le format DECIMAL(12,5)
, cliquer sur le lien "Réindexer" sur la ligne "Données plates de réindexer" fera apparaître ALTER
la table plate et la remettre DECIMAL(12,4)
.
Après avoir cherché un temps assez long, je suis venu avec une fonction dans
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
laquelle on appelle prepareFlatTable($storeId)
. Cette fonction fait ensuite appel convertOldColumnDefinition($column)
à chaque colonne de la table plate (dans ce cas).
Enfin, quand on regarde cette fonction,
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
elle semble convertir tout le monde decimal
et numeric
ainsi:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
dans lequel $proposedLength
est le résultat de ceci:
$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;
Je ne comprends pas très bien ce qui se passe ici, j'y mettrais quelque chose de codé en dur mais je ne veux pas interférer avec le processus normal de tous les indexeurs.
Quelqu'un peut-il m'éclairer sur ce sujet et me proposer une solution?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
dossier? J'ai le même problème et je ne trouve pas de solution