2

製品をエクスポートするには、Magento プラグインを開発する必要があります。他のプラグインが既に存在することは知っていますが、それを行う必要があります。

製品のエクスポートはそれほど難しくありません。私はそのようなものを使用します (要約) :

public function __construct()
{
    $this->_productModel = Mage::getModel('catalog/product');

    //Other actions ..
}

public function _toHtml()
{
    $products = $this->_productModel->getCollection()
    ->addStoreFilter($storeId)
    ->addAttributeToFilter('type_id',array('in'=>$_types))
    ->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array('qty'=>'qty','is_in_stock' => 'is_in_stock'), $this->_getStockSQL(), 'inner');

    foreach($product_list as $product)
    {
        $_p = $this->_productModel->load($product);
        $p = $_p->getData();

        //Export data, parse and return it ..
    }
}

ご覧のとおり、プライベート変数を使用して Mage::getModel('catalog/product') オブジェクトをストックしています。多くのリソースを消費するたびにこのメソッドを呼び出すことを考えました。それがこの変数を格納したかったことです。

しかし、このプロセスでは、製品が構成可能な製品の子である場合、データはデータであり、親のものです。

では、このオブジェクトをクリアできますか? Mage::getModel('catalog/product') と呼ばれ、多くのリソースが必要ですか? 子データを強制的にロードできますか?

ありがとう ;)

4

1 に答える 1

1

はい、できます。

Mage_Catalog_Model_Convert_Adapter_Product標準的な例については、 をご覧ください。

次のことがわかります。

1) 製品モデルをキャッシュします:

public function getProductModel() {
  if (is_null($this->_productModel)) {
    $productModel = Mage::getModel('catalog/product');
    $this->_productModel = Mage::objects()->save($productModel);
  }
  return Mage::objects()->load($this->_productModel);
}

2) 必要になるたびにリセットします (saveRow メソッドの開始時):

$product = $this->getProductModel()->reset();

于 2012-11-15T10:29:22.847 に答える