Разница между продуктом каталога подготовьте сохранение и продуктом каталога сохраните перед


В чем разница между catalog_product_prepare_save и catalog_product_save_before?

У меня есть наблюдатель, который обновляет некоторые атрибуты при сохранении продукта. Это отлично работает, когда я сохраняю продукт от администратора, однако это не работает при сохранении из написанного мной сценария.

В ходе моего исследования при написании "Наблюдателя" я использовал catalog_product_save_before. Кто-то здесь сказал мне, что я должен использовать catalog_product_prepare_save. Хотя в то время это не решило проблему, я продолжал заниматься этим, так как в конце концов получил все работающий.

Мое новое исследование говорит мне, что когда я звоню $product->save(), оно не запускает catalog_product_prepare_save, но оно запускает catalog_product_save_before, поэтому я подумываю о переключении моего наблюдателя на catalog_product_save_before, но не могу найти много документации между ними. Интересно, буду ли я испытывать какое-либо неблагоприятное поведение при переключении, так как я не уверен, почему несколько человек сказали мне использовать catalog_product_prepare_save в первую очередь.

Author: lv2fly, 2017-06-25

1 answers

catalog_product_save_before является одним из стандартных событий, вызываемых классом Mage_Core_Model_Abstract в его методе _beforeSave(). Строка выглядит так:

Mage::dispatchEvent($this->_eventPrefix.'_save_before', $this->_getEventData());

Для каждой модели, которая расширяет Mage_Core_Model_Abstract, запускается набор стандартных событий, к которым могут подключаться другие модули без необходимости записывать их вручную в вашем классе. Это, среди прочего:

  • {$prefix}_save_before
  • {$prefix}_save_after
  • {$prefix}_delete_before
  • {$prefix}_delete_after
  • ${prefix}_save_commit_after
  • ${prefix}_delete_commit_after

.. и т.д. Префикс взят из защищенного свойство _eventPrefix, которое по умолчанию имеет значение core_abstract. Вы должны установить это только в любом из своих классов, чтобы сделать эти стандартные события специфичными для вашей модели.

С другой стороныcatalog_product_prepare_save - это пользовательское событие, вызываемое только в 2 местах в magento: Mage_Catalog_Model_Product_Option_Api и Mage_Adminhtml_Catalog_ProductController, поэтому вы можете использовать их для подключения к обновлению продукта, выполняемому через панель администратора или API, но не любыми другими способами.

 5
Author: Zefiryn, 2017-06-25 19:57:59