【问题标题】:Magento : Mage::getModel clear dataMagento : Mage::getModel 清除数据
【发布时间】:2012-11-03 21:14:05
【问题描述】:

我必须开发一个 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') 他需要很多资源? 我可以强制它加载子数据吗?

谢谢 ;)

【问题讨论】:

    标签: magento model product


    【解决方案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();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多