5

私は、プログラムでカテゴリを製品に追加するための最良の方法を決定している最中です。カテゴリは、magentoインストール以外のサードパーティのデータから取得されます。次に、このデータを解析して、magento: "catalog_category_product"テーブルを更新し、見つかったカテゴリをそれぞれの製品に関連付けます。

テストとして「catalog_category_product」の商品の関連付けにカテゴリを追加した後、そのカテゴリはmagentoフロントエンドサイトに表示されませんでした。さらに検索した後、「catalog_category_product_index」テーブルにエントリを追加すると、製品がフロントエンドサイトの適切なカテゴリに表示されるようになりました。

必要なのはこれだけですか?製品とカテゴリに関連付けられた追加のmagentoイベントフックがあり、それらが私が知らない追加のテーブルを更新している可能性があります。

SQLを使用してこれら2つのテーブルに問題なく行を追加できますか、それともmagentoアプリをロードして、EAV製品モデルとカテゴリモデルを介してこれを行う必要がありますか?私は正しい方向に進んでいますか?

アップデート

私は実際には新しいデータを「インポート」していません。製品とカテゴリはすでにシステムに組み込まれています。また、カスタムオブザーバーを追加しておらず、バニラの製品モデルとカテゴリモデルを使用しています。

テキストファイルを解析して適切な値を取得してから、プレーンなSQLUPDATEステートメントを使用しています。

このルートを使用して、プログラムで更新する必要があるテーブルは「catalog_category_product」と「catalog_category_product_index」だけであることを確認したいだけです。

4

2 に答える 2

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を使用する場合、データや関係を壊すリスクがありますが、APIMagentoを使用すると適切に処理されます。

于 2012-11-08T21:26:19.763 に答える
0

カテゴリと製品をどのようにリンクしますか?特定の何かをコーディングしましたか?はいの場合:コードを表示します。

とにかく、magentoはSTANDARDで必要なことを行うための多くの方法を提供します。メニューのバックオフィスを見てください:システム/インポート-エクスポート

Magentoには2つの異なる方法があります:

  • データフロープロファイル:モデルで動作し、かなり低速です(ただし、すべてのモデルで-> save()および-> load()を呼び出すことにより、追加したオブザーバーが確実に呼び出されます!!)

  • 新しいインポート/エクスポートプロファイル:純粋なSQLクエリで動作し、かなり高速です(ただし、ハードコーディングされているため、追加したカスタムオブザーバーの読み込み/保存にさようならを言ってください)

あなたが言ったように、Magentoは製品とカテゴリー(そして他のすべてのモデル)にリンクされたイベントフックを手に入れました。たとえば、製品とカテゴリの保存後のコールバックでは、magentoは、手動で追加しようとしたcatalog_category_indexなどの関連するすべてのINDEXESのインデックスを再作成します。

それで :

  • 自分でそれを行わないでください。magentoのインポート/エクスポートプロファイル、Dataflowプロファイル、またはAPIを使用してください。
  • 使用している製品/カテゴリの量に応じて、使用する適切なインポートを選択します(上記の違いを参照)。データフローは遅くなりますが、モデルを使用します。
于 2012-11-08T20:02:54.323 に答える