등록 저장 후 이벤트를 전달하는 제품 등록 확장이 있습니다. 또 다른 확장 프로그램은 가상 제품이 등록 된 제품과 관련된 경우 해당 이벤트를 사용하여 가상 제품의 쿠폰을 생성합니다.Magento의 이벤트 관찰자에서 발송자에게 데이터를 다시 반환하십시오.
생성 된 쿠폰에 대한 데이터를 가져 와서 제품 등록 세부 정보와 함께 이메일로 사용자에게 보내야합니다.
관찰자의 데이터를 이벤트가 전달되는 곳으로 되 돌리는 방법이 있습니까?
등록 저장 후 이벤트를 전달하는 제품 등록 확장이 있습니다. 또 다른 확장 프로그램은 가상 제품이 등록 된 제품과 관련된 경우 해당 이벤트를 사용하여 가상 제품의 쿠폰을 생성합니다.Magento의 이벤트 관찰자에서 발송자에게 데이터를 다시 반환하십시오.
생성 된 쿠폰에 대한 데이터를 가져 와서 제품 등록 세부 정보와 함께 이메일로 사용자에게 보내야합니다.
관찰자의 데이터를 이벤트가 전달되는 곳으로 되 돌리는 방법이 있습니까?
Magento에서 유용한 트릭이 있습니다. 이벤트 데이터를 제품 또는 카테고리 모델과 같은 옵서버에게 전달할 수 있으므로이 데이터를 얻을 수있는 컨테이너를 만들 수도 있습니다.
는 예를 들어 같은 조치는 디스패처에서 수행 할 수 있습니다
$couponContainer = new Varien_Object();
Mage::dispatchEvent('event_name', array('coupon_container' => $couponContainer));
if ($couponContainer->getCode()) {
// If some data was set by observer...
}
그리고 관찰자 방법은 다음과 같이 할 수 있습니다
public function observerName(Varien_Event_Observer $observer)
{
$couponContainer = $observer->getEvent()->getCouponContainer();
$couponContainer->setCode('some_coupon_code');
}
이 즐기고 재미를!
아니요,이 작업을 수행하기 위해 시스템에 내장 된 기능은 없습니다. Magento 규칙은 stdClass
또는 Varien_Object
전송 개체를 만드는 것입니다.
self::$_transportObject
이후
#File: app/code/core/Mage/Core/Block/Abstract.php
...
if (self::$_transportObject === null)
{
self::$_transportObject = new Varien_Object;
}
self::$_transportObject->setHtml($html);
Mage::dispatchEvent('core_block_abstract_to_html_after',
array('block' => $this, 'transport' => self::$_transportObject));
$html = self::$_transportObject->getHtml();
...
개체 인 블록 이벤트 코드를 살펴 및 PHP는 방식 등을 기준으로 동작 목적, 관찰자의 전송 오브젝트에 대한 변경은 유지 될 것이다. 따라서, 위의 예에서 경우 관찰자 개발자는 새로운 HTML을 포함됩니다 백업 시스템 블록 코드 self::$_transportObject
에서
$html = $observer->getTransport()-setHtml('<p>New Block HTML');
말했다. 옵저버는이 값을 변경할 수 있으며 Magento의 주문 관찰자는 구성된 시스템마다 다를 것임을 명심하십시오.
두 번째 방법은 Magento의 레지스트리 패턴을 사용하는 것입니다. dispatchEvent
우수 전에 변수를 등록하십시오. 감사. – Ryan
@Ivan :이 방법을 사용하여 관찰자에서 내 컬렉션을 수정할 수 있습니까? Coz을 수정 한 후 내 관찰자에게서'return $ this'을 시도하면 컬렉션은 그대로 유지됩니다. 나는 제품 콜렉션을 가지고 일하고있다. 가능한 한 간단히 요약 할 수있다. – zamil