我的观察者在config.xml
中定义了两种方法。
如果我想在observer.php中添加其他方法,它们将不会捕获任何事件:
我应该将它们定义为config.xml
吗?而且,如果我放置一些变量,例如private $myvar
,我将能够使用它们吗?
我可以使用构造函数吗?
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>
当您在商店中加载随机类别时,输出为“嗨,我还是猴子”。
观察者是一个PHP类。
仅约束条件是您将其与事件相关联时输入的函数(方法)名称存在。
除此之外,您可以执行PHP允许的任何事情。
您可以在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();
}