Веб-сайт, которым я управляю, требует, чтобы цены имели 5 десятичных знаков. Я пошел дальше и изменил как минимум дюжину файлов / таблиц, чтобы добиться этого. Но (потому что всегда есть но), кажется, есть проблема с catalog_product_flat_X
.
Позвольте мне объяснить: для цен на фронте большую часть времени это сводится к коллу Mage_Catalog_Model_Product->getPrice()
, который, как я понимаю, будет искать цену в плоских столах (если у вас включены плоские столы). Проблема в переиндексации данных.
Если у моего плоского стола есть цена в формате DECIMAL(12,5)
, то нажатие на ссылку «Reindex» в строке «Reindex flat data» приведет ALTER
к отображению плоского стола и возврату к нему DECIMAL(12,4)
.
После поиска довольно продолжительного времени я пришел к функции, в
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
которой вызывается prepareFlatTable($storeId)
. Затем эта функция вызывает convertOldColumnDefinition($column)
каждый столбец плоской таблицы (в данном случае).
Наконец, когда вы смотрите на эту функцию,
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
она, кажется, конвертирует все decimal
и numeric
так:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
в котором $proposedLength
результат этого:
$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;
Я не совсем понимаю, что здесь происходит, я бы добавил туда что-то жестко закодированное, но я не хочу мешать нормальному процессу всех индексаторов.
Может ли кто-нибудь просветить меня по этому вопросу и предложить мне решение?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
файле? У меня та же проблема, и я не могу найти решение