私が管理しているWebサイトでは、価格に小数点以下5桁が必要です。私は先に進んで、これを達成できるように、少なくとも12のファイル/テーブルを完全に変更しました。しかし(常にaが存在するため)、に問題があるようcatalog_product_flat_X
です。
説明させてください:前面の価格の場合、ほとんどの場合、それはを呼び出すMage_Catalog_Model_Product->getPrice()
ことになります。これは、私が理解しているように、フラットテーブルで価格を探します(フラットテーブルが有効になっている場合)。問題は、データの再インデックス付けです。
フラットテーブルにフォーマット付きの価格がある場合、DECIMAL(12,5)
[フラットデータの再インデックス]行の[再インデックス]リンクをクリックするとALTER
、フラットテーブルがに戻りDECIMAL(12,4)
ます。
時間のかなりextented量のために検索した後、私は、関数accros来た
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
ファイルで何を変更しましたか?同じ問題があり、解決策が見つからない