Không, không có gì được tích hợp sẵn trong hệ thống để thực hiện việc này. Quy ước Magento là tạo đối tượng vận chuyển stdClass
hoặc Varien_Object
.
Hãy nhìn vào mã sự kiện khối
#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();
...
Kể từ self::$_transportObject
là một đối tượng, và PHP đối tượng cư xử theo một tài liệu tham khảo như cách, bất kỳ thay đổi nào đối tượng vận chuyển trong một quan sát viên sẽ được duy trì. Vì vậy, trong ví dụ trên, nếu một nhà phát triển quan sát viên nói
$html = $observer->getTransport()-setHtml('<p>New Block HTML');
Sao lưu trong hệ thống mã khối self::$_transportObject
sẽ chứa mã HTML mới. Hãy nhớ rằng nhiều người quan sát sẽ có cơ hội thay đổi giá trị này và các trình theo dõi đơn đặt hàng kích hoạt trong Magento sẽ khác nhau đối với mỗi hệ thống được định cấu hình.
Cách tiếp cận thứ hai bạn có thể thực hiện là sử dụng mẫu đăng ký của Magento. Đăng ký biến trước dispatchEvent
Nguồn
2012-11-07 20:23:31
Tuyệt vời. Cảm ơn. – Ryan
@Ivan: Tôi có thể sử dụng phương pháp này để sửa đổi bộ sưu tập của mình trong một người quan sát không. Coz sau khi sửa đổi bộ sưu tập và cố gắng 'trả $ this' từ người quan sát của tôi, bộ sưu tập vẫn giữ nguyên. Tôi đang làm việc với bộ sưu tập sản phẩm. Nếu có thể, bạn có thể tóm tắt nó – zamil