Một trang web tôi quản lý yêu cầu giá phải có 5 số thập phân. Tôi đã đi trước và sửa đổi ít nhất một tá tệp / bảng để có thể đạt được điều này. Nhưng (vì luôn luôn có một) nhưng dường như có vấn đề catalog_product_flat_X
.
Hãy để tôi giải thích: đối với giá ở mặt trước, hầu hết thời gian, sẽ đến để gọi Mage_Catalog_Model_Product->getPrice()
, mà theo tôi hiểu, sẽ tìm giá trong các bàn phẳng (nếu bạn đã bật bảng phẳng). Vấn đề là với việc reindexing dữ liệu.
Nếu bảng phẳng của tôi có giá với định dạng DECIMAL(12,5)
, nhấn liên kết "Reindex" trên dòng "Dữ liệu phẳng Reindex" sẽ ALTER
đặt bảng phẳng và đặt lại DECIMAL(12,4)
.
Sau khi tìm kiếm trong một khoảng thời gian khá dài, tôi đã tìm thấy một hàm
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
được gọi prepareFlatTable($storeId)
. Hàm này sau đó gọi convertOldColumnDefinition($column)
trên mỗi cột của bảng phẳng (trong trường hợp này).
Cuối cùng, khi nhìn vào chức năng này,
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
nó dường như đang chuyển đổi mọi thứ decimal
và numeric
như vậy:
case 'decimal':
case 'numeric':
$length = $proposedLength;
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
break;
trong đó $proposedLength
là kết quả của việc này:
$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;
Tôi hoàn toàn không hiểu chuyện gì đang xảy ra ở đây, tôi đã đặt thứ gì đó được mã hóa cứng vào đó nhưng tôi không muốn can thiệp vào quá trình bình thường của tất cả những người lập chỉ mục.
Bất cứ ai có thể khai sáng cho tôi về vấn đề này và cung cấp cho tôi một giải pháp?
app/code/core/Mage/Catalog/Model/Resource/Helper/Abstract.php
tập tin? Tôi có cùng một vấn đề và tôi không thể tìm ra giải pháp