2012-11-08 65 views
5

我正在確定以編程方式將類別添加到產品的最佳方式。這些類別是從magento安裝之外的第三方數據中獲得的,然後我解析這些數據並想更新magento:「catalog_category_product」表,將找到的類別與其各自的產品相關聯。Magento,以編程方式向SQL腳本中的產品添加類別

將「catalog_category_product」中的產品關聯類別添加爲測試後,該類別未出現在magento前端網站上。在更多搜索後,我在「catalog_category_product_index」表中添加了一個條目,產品現在顯示在前端網站的正確類別中。

這就是這一切必要的嗎?恐怕還有與產品和類別相關的附加magento事件掛鉤,它們可能會更新我不知道的其他表。

我可以用SQL無差錯地向這兩個表添加行,還是需要加載magento應用程序並通過EAV產品和類別模型執行此操作?我在正確的軌道上嗎?

更新

我實際上不是 '進口' 的任何新數據。產品和類別已經在系統中就地存在。我還沒有添加任何自定義觀察員,並且正在使用香草產品和類別模型。

我解析文本文件以獲取正確的值,然後使用普通的SQL UPDATE語句。

我只想確保通過採用此路線,我需要以編程方式更新的唯一表格是'catalog_category_product'和'catalog_category_product_index'。

回答

4

我個人不建議你使用普通的SQL,而使用的API,如:

define('MAGENTO', realpath(dirname(__FILE__))); 
require_once MAGENTO . '/app/Mage.php'; 
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

// Load products 
$products = Mage::getModel('catalog/product') 
      ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) 
      ->getAll(); 

// Load categories 
$category = Mage::getModel('catalog/category'); 
      ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID); 
$categories = $category->getAll(); 
foreach($products as $product) { 
    // Get relevant category 
    $product->setCategoryIds(array($category->getId())); 
    $product->save(); 
} 

上面的代碼是非常粗略的例子,但有一些調整,應該做這項工作。如果您使用普通SQL,那麼您有可能破壞數據或關係,但使用API​​ Magento應該爲您處理。

+1

非常感謝。我想我會走下這條路線的一些變化。 – Jarrod

0

如何鏈接您的類別和產品?你是否編寫了特定的代碼?如果是:顯示一些代碼。

無論如何,magento提供了許多方法來執行您在STANDARD中所需的操作。看在後臺辦公室中的菜單系統/進口 - 出口

有2點型動物的方法在Magento:

  • 數據流模式:它的工作原理與模式,是相當緩慢的(但通過調用 - >保存()和 - > load()在你所有的模型上,它確保你添加的任何觀察者將被稱爲!!)

  • 新的導入/導出配置文件:它適用於純SQL查詢,速度非常快硬編碼,所以...說再見任何加載/保存您添加的自定義觀察員)

就像你說的,Magento獲得了與產品和類別(以及所有其他模型)相關的事件掛鉤。在保存後,再打的產品和類別,例如,Magento的將重新索引所有相關的索引就像你試圖手動添加catalog_category_index ..

所以:

  • 不這樣做你自己,使用magento導入/導出配置文件,數據流配置文件或API。
  • 取決於您擁有的產品/類別的數量,選擇正確的導入以使用(請參閱上面的差異)。數據流是慢,但使用模型..
+0

謝謝你,我已經更新了最初的帖子,試圖回答你的一些迴應。我無法發佈代碼,因爲它是專有的,但是它是一個純PHP腳本,用於處理文本數據並使用SQL更新magento表。 – Jarrod

相關問題