1

私はいくつかの属性をcsvファイルに書き込むmagento製品エクスポーターを書いています。1 つの属性は「カテゴリ文字列」と呼ばれ、そのメソッドは次のようになります。

...
foreach($products as $_product) {       
        ...

        $productId      = $_product->getSku();
        $productCategory    = getCategoryString($_product['category_ids']);
        ...
}
...

function getCategoryString($numbers) {

    $catString = '';
    $catModel = Mage::getModel('catalog/category')->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID);

    $ex = explode(',', $numbers);

    foreach ($ex as $i =>  $e) {

        if ($i > 0) {

            $catString .= $catModel->load($e)->getName();

            if ($i < (count($ex)-1))
                $catString .= ' > ';
        }
    }

    $ex = NULL;
    $numbers = NULL;

    $catModel->unsetData();
            unset($catModel);
            $catModel = NULL;

    return $catString;
}

しかし、各反復の後、メソッド呼び出しのコストは製品ごとに約 1MB で、約 9000 個の製品があります! $catModel 変数をクリーンアップできません! $catModel = NULL および unset($catModel) 行は効果がありません。私は何を間違っていますか?オブジェクトを強制的に設定解除するにはどうすればよいですか?!

4

2 に答える 2

1

Magento の cron にも同じ問題がありました。これが最善の方法ではないことはわかっていますが、迅速に実行する必要がありました。

私たちの解決策は、単一の操作を実行するために必要なコードを含む新しい PHP ファイルを作成することでした。Magento から製品リストを取得し、exec() を使用してこの外部 PHP ファイルを製品ごとに呼び出します。

このようなもの:

foreach($products as $_product) {       
        ...

        exec("do_the_work.php {$_product->getSku()}");

        ...
}

それが役に立てば幸い。

于 2011-06-02T15:56:15.390 に答える
0

あなたのスクリプトはとてもクールになります

  1. 配列として持っているすべての製品からすべてのカタログ ID を取得します
  2. 必要なカテゴリ名を使用して IN() 句を使用してカテゴリ コレクションをロードします。
  3. 製品コレクションをもう一度 foreach し、プリロードされたコレクションから適切な要素を含む必要なカテゴリ ID を選択します
  4. 利益$$$$は、無制限のようにメモリを使用していないためです

はるかに優れた方法は、カテゴリ名を製品コレクションに直接結合することです。これにより、消費するリソースがさらに少なくなります。

于 2011-06-02T16:46:52.090 に答える