Für eine von mir verwaltete Website müssen die Preise 5 Dezimalstellen haben. Ich habe mindestens ein Dutzend Dateien / Tabellen geändert, um dies zu erreichen. Aber (weil es immer ein Aber gibt) scheint es ein Problem mit zu geben catalog_product_flat_X
.
Lassen Sie mich erklären: Bei den Preisen auf der Vorderseite kommt es meistens auf den Anruf an Mage_Catalog_Model_Product->getPrice()
, bei dem nach meinem Verständnis der Preis in den flachen Tischen gesucht wird (wenn Sie flache Tische aktiviert haben). Das Problem ist die Neuindizierung von Daten.
Wenn mein flacher Tisch einen Preis mit dem Format hat DECIMAL(12,5)
, wird ALTER
der flache Tisch durch Klicken auf den Link "Reindex" in der Zeile "Reindex flache Daten" wieder angezeigt DECIMAL(12,4)
.
Nachdem ich ziemlich lange gesucht hatte, kam ich zu einer Funktion,
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
die aufgerufen wird prepareFlatTable($storeId)
. Diese Funktion ruft dann convertOldColumnDefinition($column)
jede Spalte der flachen Tabelle auf (in diesem Fall).
Wenn man sich diese Funktion in betrachtet
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
, scheint sie schließlich alle zu konvertieren decimal
und numeric
so:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
in dem $proposedLength
ist das Ergebnis davon:
$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;
Ich verstehe nicht ganz, was hier vor sich geht, ich würde dort etwas fest codiertes einfügen, aber ich möchte den normalen Prozess aller Indexer nicht stören.
Kann mich jemand in dieser Angelegenheit aufklären und mir eine Lösung anbieten?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
Datei geändert ? Ich habe das gleiche Problem und kann keine Lösung finden