А чем отличается customer_save_after от customer_save_before?
						
						
						
					
					
				Чем различаются события save_before и save_after?
14.07.2011 19:40
						События с суфиксом before возникают до сохранения модели, а с суффиксом after - после сохранения модели.
						
						
						
					
					
				14.07.2011 19:44
						Я так думал, и предположил, что в обработке события с суфиксом before 
						
					
					
				$observer->getEvent()->getCustomer()вернет данные до сохранения, а в обработчике события с суфиксом after соответственно новые данные. Но, мои надежды не оправдались. Как отследить изменение email, например?
14.07.2011 20:50
						Вы плохо понимаете смысл сохранения.
Сохранение в данном контексте - это операция записи данных объекта в базу данных.
При этом сам объект остаётся неизменным.
Если вам нужно отследить изменения в БД, то вам нужно в обработчике before_save загрузить вторую копию объекта из БД и сравнить два объекта друг с другом.
						
					
					
				Сохранение в данном контексте - это операция записи данных объекта в базу данных.
При этом сам объект остаётся неизменным.
Если вам нужно отследить изменения в БД, то вам нужно в обработчике before_save загрузить вторую копию объекта из БД и сравнить два объекта друг с другом.
14.07.2011 20:59
						Более того, можно даже не загружать вторую копию объекта из БД, потому что у моделей помимо метода getData имеется метод getOrigData, который возвращает состояние объекта на момент загрузки из БД.
Сравнивая значения характеристик, полученные методами getData и getOrigData, можно установить, был ли объект изменён в период после загрузки из БД.
						
					
					
				Сравнивая значения характеристик, полученные методами getData и getOrigData, можно установить, был ли объект изменён в период после загрузки из БД.
14.07.2011 22:07
						Последовал вашему совету, сначала попробовал следующий вариант
в итоге переменная $oldvar пуста, т.е. getOrigData('subscriber_status') не возвращает желаемого результата.
Потом сделал по первоначальной вашей идее
Второй пример показал более радостные результаты.
						
					
					
				
    public function subscriberSaveAfter($observer)
    {
        $subscriber = $observer->getEvent()->getSubscriber();
        $newvar = $subscriber->getData('subscriber_status');
        $oldvar = $subscriber->getOrigData('subscriber_status');
    }
в итоге переменная $oldvar пуста, т.е. getOrigData('subscriber_status') не возвращает желаемого результата.
Потом сделал по первоначальной вашей идее
    public function subscriberSaveAfter($observer)
    {
	$subscriber = $observer->getEvent()->getSubscriber();
	$customer =  Mage::getSingleton('customer/customer')->load($subscriber->getData('customer_id'));
	$subscribe = Mage::getModel ('newsletter/subscriber');
	$subscribe->loadByCustomer ($customer);
	$oldvar = $subscribe->getData('subscriber_status');
	$newvar = $subscriber->getData('subscriber_status');
Второй пример показал более радостные результаты.
15.07.2011 03:59
						Это потому, что вы невнимательно прочитали моё сообщение.
Я писал, что сравнивать getData и getOrigData надо до сохранения модели, а не после.
						
					
					
				Я писал, что сравнивать getData и getOrigData надо до сохранения модели, а не после.
15.07.2011 10:06
						Извините, ввел вас немного в заблуждение. В config.xml следуеющее:
Это всё в разделе global, может поэтому проблемы?
						
					
					
				<newsletter_subscriber_save_before> <observers> <newsletter_subscriber_save_after> <type>singleton</type> <class>mynamespace_mymodule/observer</class> <method>subscriberSaveAfter</method> </newsletter_subscriber_save_after> </observers> </newsletter_subscriber_save_before>
Это всё в разделе global, может поэтому проблемы?
15.07.2011 10:10
						Нет.
А вот несогласованность имён (метод subscriberSaveAfter обрабатывает событие newsletter_subscriber_save_before) явно усложнит сопровождение кода.
						
					
					
				А вот несогласованность имён (метод subscriberSaveAfter обрабатывает событие newsletter_subscriber_save_before) явно усложнит сопровождение кода.
15.07.2011 10:17
						Я знаю.  Уже исправил, просто вчера пока копал, не успевал названия функции менять, менял только событие для неё, чтобы быстрее получить результат. А для чего вообше в описании события в вот этот выделенный код?
 Уже исправил, просто вчера пока копал, не успевал названия функции менять, менял только событие для неё, чтобы быстрее получить результат. А для чего вообше в описании события в вот этот выделенный код?
<newsletter_subscriber_save_before>
<observers>
<newsletter_subscriber_save_before>
<type>singleton</type>
<class>mynamespace_mymodule/observer</class>
<method>subscriberSaveBefore</method>
</newsletter_subscriber_save_before>
</observers>
</newsletter_subscriber_save_before>
						
					
					
				 Уже исправил, просто вчера пока копал, не успевал названия функции менять, менял только событие для неё, чтобы быстрее получить результат. А для чего вообше в описании события в вот этот выделенный код?
 Уже исправил, просто вчера пока копал, не успевал названия функции менять, менял только событие для неё, чтобы быстрее получить результат. А для чего вообше в описании события в вот этот выделенный код?<newsletter_subscriber_save_before>
<observers>
<newsletter_subscriber_save_before>
<type>singleton</type>
<class>mynamespace_mymodule/observer</class>
<method>subscriberSaveBefore</method>
</newsletter_subscriber_save_before>
</observers>
</newsletter_subscriber_save_before>
15.07.2011 10:26
						Такая же (
						
					
					
				http://stackoverflow.com/questions/2414610/viewing-magento-model-data-changes-on-before-after-save-event) ситуация с getOrigData, и пошли они тем же путем, не решив, а обойдя проблему.

 Вход
 Вход Регистрация
 Регистрация Помощь
 Помощь

 
			
			

