我在config.xml
中定义的观察者中有两种方法。
如果我想在observer.php中添加其他方法,它们将不会捕获任何事件:
我应该将它们定义为config.xml
吗?
如果我放了一些像private $myvar
这样的变量,我能用它们吗?
我可以使用构造函数吗?
答案 0 :(得分:3)
Magento的观察员就像任何其他人一样。您可以添加构造函数,私有变量或任何其他您喜欢的类元素,而不必将它们添加到config.xml。
例如,您可以创建一个这样的观察者类:
<?php
class Companyname_Modulename_Model_Observer {
private $monkey = 'hi, I am a monkey';
public function __construct() {
$this->monkey = 'hi, I am still a monkey';
}
public function myObserverFunction($observer) {
var_dump($this->showMonkeyString());
}
private function showMonkeyString() {
return $this->monkey;
}
}
在config.xml中,您只添加要在事件发生时执行的函数,例如:
<frontend>
<events>
<catalog_category_load_after>
<observers>
<does_not_matter_what_we_call_this_tag>
<type>singleton</type>
<class>Companyname_Modulename_Model_Observer</class>
<method>myObserverFunction</method>
</does_not_matter_what_we_call_this_tag>
</observers>
</catalog_category_load_after>
</events>
</frontend>
在商店中加载随机类别时的输出将是“嗨,我还是一只猴子”。
答案 1 :(得分:0)
观察者是一个PHP类。
只有约束是您在将事件与事件关联时输入的功能(方法)名称应该在那里。
除此之外,你可以做任何PHP允许的事情。
答案 2 :(得分:0)
您可以在Observer中使用构造函数
请参阅Magento1中的以下Observer类
class Mage_CatalogIndex_Model_Observer extends Mage_Core_Model_Abstract
{
protected $_parentProductIds = array();
protected $_productIdsMassupdate = array();
protected function _construct() {}
和
class Mage_Rss_Model_Observer
{
/**
* Factory instance
*
* @var Mage_Core_Model_Abstract
*/
protected $_factory;
/**
* Application instance
*
* @var Mage_Core_Model_App
*/
protected $_app;
/**
* @param array $args
*/
public function __construct(array $args = array())
{
$this->_factory = !empty($args['factory']) ? $args['factory'] : Mage::getSingleton('core/factory');
$this->_app = !empty($args['app']) ? $args['app'] : Mage::app();
}