2011-03-04 51 views
1

我們有一個網站有2個商店意見:FR和EN。對於EN商店導入後的某些產品catalog_product_flat未刷新。在EAV表中一切都很好。數據重新索引應該截斷這個平坦的表格並用更新的數據填充它。不知何故,它不適用於某些項目。Magento,問題與catalog_product_flat

你們有沒有人有類似的問題?我很感激任何有關此主題的線索或建議。

編輯

我已經做進一步的檢查,我是錯了EAV表。事實證明,catalog_product_entity_varcharcatalog_product_flat一致。所以平坦表具有與EAV表相同的數據,但在管理面板中的值是錯誤的。對於EN商店視圖,它們與默認值相同,僅適用於某些產品(magic?;))。在我的本地PC上,我沒有遇到這樣的問題。這僅限於我們的生產環境。據我所知,我們不使用任何數據庫複製(這可能是這裏的問題)。

回答

0

我錯了什麼是錯的。數據庫一切正常。問題是從數據庫中檢索的屬性順序。

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包含具有屬性屬性的數組。訂單在這裏很重要,因爲如果存儲視圖的屬性(例如「名稱」)例如1將在存儲視圖0之前進行,然後它將被覆蓋。

解決方案是將ORDER BY子句添加到$selects或排序$values數組。

2

確保在導入目錄產品時,產品的必需屬性在導入文件中提供了正確的值。如果這樣做不正確,那麼數據重新索引可能無法正常工作。

而且重建索引之前,它始終是最好&明智的,從「Cache Management」 &從你的Magento安裝目錄下的「cache」文件夾中清除緩存。

希望它有幫助。

+1

幾乎可以確定,EAV表中不存在某些值不明顯的值。 Magento使用複雜的連接來完成重新索引,所以缺少的值將導致不爲平面表創建條目。 – 2011-03-04 15:02:48

3

Magento使用EAV數據庫模型進行輕鬆升級和開發,因爲此模型可以更靈活地使用數據和屬性。

當在Magento中啓用平面目錄時,上述所有產品屬性(id,name,price)都保存在名爲catalog_product_flat的一個表中。然後,Magento從平板表中提取產品數據,而不是加入所有其他較小的表格。

有兩種類型的平板產品目錄的: 1)平目錄產品 2)平目錄類別

  • 平分類推薦用於任何Magento的安裝,以提高性能。
  • Flat Products設計並推薦用於1000多個SKU的目錄。

啓用固定目錄類別:

  • 轉到管理面板 - >系統 - >緩存管理 - >重建平板目錄類別
  • 轉到管理面板 - >系統 - >配置 - >產品目錄 - > Frontend->使用平面目錄類別=是

啓用固定目錄產品:

  • 轉到管理面板 - >系統 - >緩存管理 - >重建平板目錄產品
  • 轉到管理面板 - >系統 - >配置 - >目錄 - > Frontend->使用平面目錄產品=是

記住,最初的

選擇列表

聯繫面板 - >系統 - >配置 - >目錄 - > Frontend->使用平面目錄產品 OR, 管理面板 - >系統 - >配置 - >目錄 - >前端 - >使用平板目錄產品

是不可編輯的。您必須從緩存管理重建平面目錄。只有這樣選擇列表纔可編輯。