Magento,catalog_product_flat的问题

时间:2011-03-04 11:32:22

标签: magento product

我们的网站有2个商店浏览次数:FR和EN。对于某些产品,导入catalog_product_flat后,EN商店视图不会刷新。在EAV表中一切都很好。数据重新索引应截断此平面表并用更新的数据填充它。不知怎的,它对某些项目不起作用。

你们有没有人遇到过类似的问题?我很感激有关这个主题的任何线索或建议。

修改

我已经做了进一步的检查,我对EAV表错了。事实证明,catalog_product_entity_varcharcatalog_product_flat一致。因此,平面表与EAV表具有相同的数据,但在管理面板中的值是错误的。对于EN商店视图,它们与默认值相同,仅适用于某些产品(魔术?;))。在我的本地PC上我没有遇到这样的问题。这仅适用于我们的生产环境。据我所知,我们不使用任何数据库复制(这可能是这里的问题)。

3 个答案:

答案 0 :(得分:3)

Magento使用EAV数据库模型进行简单的升级和开发,因为该模型可以更灵活地使用数据和属性。

在Magento中启用平面目录后,所有上述产品属性(ID,名称,价格)都保存在一个名为catalog_product_flat的表中。然后Magento从平面表中获取产品数据,而不是连接所有其他较小的表。

平面目录有两种类型: 1)扁平目录产品 2)扁平目录类别

  • 建议任何Magento安装使用Flat Categories以提高性能。
  • Flat Products适用于拥有超过1000个SKU的目录。

启用Flat Catalog类别:

  • 转到管理面板 - >系统 - >缓存管理 - >重建平面目录类别
  • 转到管理员面板 - >系统 - >配置 - >目录 - >前端 - >使用平面目录类别=是

启用Flat Catalog产品:

  • 转到管理面板 - >系统 - >缓存管理 - >重建平面目录产品
  • 转到管理员面板 - >系统 - >配置 - >目录 - >前端 - >使用平面目录产品=是

请记住,最初是

的选择列表

管理员面板 - >系统 - >配置 - >目录 - >前端 - >使用平面目录产品 要么, 管理员面板 - >系统 - >配置 - >目录 - >前端 - >使用平面目录产品

不可编辑。您必须从缓存管理重建Flat Catalog。只有这样,选择列表才变得可编辑。

答案 1 :(得分:2)

确保在导入目录产品时,在导入文件中为产品的必需属性提供了正确的值。如果未正确完成,则数据重新索引可能无法正常运行。

在重新编制索引之前,始终建议&明智地从“Cache Management”&中清除缓存从Magento安装目录的“cache”文件夹中。

希望它有所帮助。

答案 2 :(得分:0)

我错了。数据库一切正常。问题是从DB检索的属性顺序。

Mage_Eav_Model_Entity_Abstract我们可以找到:


$selects = array();
foreach ($this->getAttributesByTable() as $table=>$attributes) {
   $selects[] = $this->_getLoadAttributesSelect($object, $table);
}
if (!empty($selects)) {
   $values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));

   foreach ($values as $valueRow) {
      $this->_setAttribteValue($object, $valueRow);
   }
}

implode(' UNION ', $selects)连接所有select语句。但是没有ORDER BY,因此可以按随机顺序检索数据。事实上,对于某些产品来说就像这样。该选择获取商店视图0(始终)和所选商店视图(当前一个)的属性值。

数组$values包含具有属性属性的数组。订单在这里很重要,因为如果商店视图的属性(例如'name'),例如1将在商店视图0之前进行,然后它将被覆盖。

解决方案是将ORDER BY子句添加到$selects或排序$values数组。