我管理的网站要求价格必须有5位小数。我继续修改了至少十二个文件/表,以实现此目的。但是(因为总是有一个but)似乎有问题catalog_product_flat_X
。
让我解释一下:对于最前面的价格,大多数时候都归结为调用Mage_Catalog_Model_Product->getPrice()
,据我所知,它将在平面表中查找价格(如果启用了平面表)。问题在于数据的重新索引编制。
如果我的平面桌具有以下格式的价格,则DECIMAL(12,5)
点击“ Reindex平面数据”行上的“ Reindex”链接会将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
文件中做了什么更改?我有同样的问题,但找不到解决方案