Разница между продуктом каталога подготовьте сохранение и продуктом каталога сохраните перед
В чем разница между 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
в первую очередь.
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, но не любыми другими способами.