Нужен наблюдение за событием для импорта продукта Сохранить контроллер строки

magento.stackexchange https://magento.stackexchange.com/questions/3337

Вопрос

Как я могу поймать импорт продукта mage_catalog_model_convert_adapter_product Model Saverow () Событие с использованием Observer.

Mage::dispatchEvent('catalog_product_import_profile_after', array('adapter'=>$this));

Я использую это, но не получаю успеха.

Это мой код: в моем app code community compnyname improdproduct controllers adminhtml runprofilecontroller.php

class Compnyname_ImportProduct_Adminhtml_RunProfileController extends Mage_Adminhtml_Controller_action
{
    protected function _initAction() 
    {
        .....
    } 
    public function indexAction() 
    {
         ........
    }
    public function runAction()
    {   
        ...........

    }


    public function batchRunAction()
    {   

        $currentUrl = Mage::helper('core/url')->getCurrentUrl();
        $ids = explode("/", $currentUrl);
        $id=$ids[11];
        $file=explode("?",$id);
        $file_name =  $file[0];
        $path = Mage::getBaseDir('var') . DS . 'import' . DS ;
        $filepath =$path.$file_name;
        $header=array();
        $header1=array();
        $i = 0;
        if(($handle = fopen("$filepath", "r")) !== FALSE) 
        {   
            while(($data = fgetcsv($handle, 1000, ",")) !== FALSE)
            {       
                if($i==0)
                {
                     $header1[$i]=$data;                    
                }  
                else
                {
                     $header[$i]=$data;
                }
                $i++;    
            }
            $array1=array();
            $array2=array();
            for($kd=1;$kd<=count($header);$kd++)
            {
                $jk=0;
                foreach ($header1[0] as $key => $value)
                {   
                    $array1[$value]=$header[$kd][$jk];
                    $jk++;
                }

                 $this->updateData($array1);
            }
        }

        return true;
    }
    public function updateData($data)
    {
        //$importData=$data;

        $collection = Mage::getModel('importproduct/convert_adapter_product')->saveRow($data);
        if($collection)
        {
          $this->batchFinish();
        }else{
          $this->batchError();
        }
        //$j = $j + 1;
        //return "hello";
    }   

    public function batchFinish()
    {
        //$batchId = $this->getRequest()->getParam('id');

        Mage::dispatchEvent('catalog_product_import_profile_after', array('adapter'=>$this));
        //Mage::dispatchEvent('catalog_product_prepare_save', array('adapter'=>$this));
        //catalog_product_prepare_save
    //echo "hello".$var;
        echo "batchfinish....";

    }
    public function batchError()
    {
    echo "error";
    } 

    function testAction()
    {
    echo "testing...";
    }
}

?>

App code community compnyname importProduct model convert adapter product.php

class Compmyname_ImportProduct_Model_Convert_Adapter_Product extends Mage_Catalog_Model_Convert_Adapter_Product
{
 .....
  public function saveRow(array $importData)
  {
    code for save raw
  }
......
}

Я хочу позвонить Observer во время процесса импорта продукта, и вызов наблюдателя после того, как одна строка импортируется. Например, если в CSV есть 500 продуктов, то наблюдательную звоните 500 раз.

Пожалуйста, помогите решить эту проблему.

Это было полезно?

Решение

Выглядит так, как будто вы переписываете метод Mage_Catalog_Model_Convert_Adapter_Product - Добавьте туда свою собственную отправку:

class Compmyname_ImportProduct_Model_Convert_Adapter_Product extends Mage_Catalog_Model_Convert_Adapter_Product
{

  public function saveRow(array $importData)
  {
    //do the work from the parent class
    parent::saveRow($importData);
    //dispatch your own event
    Mage::dispatchEvent('convert_adapter_product_save_row_after', array('import_data'=>$importData, 'product'=>$this));

  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top