【发布时间】:2013-12-07 12:30:48
【问题描述】:
config.xml 中定义的观察者中有两个方法。
如果我想在observer.php中添加其他方法,它们不会捕获任何事件:
我应该将它们定义为config.xml吗?
如果我输入一些变量,例如private $myvar,我可以使用它们吗?
我可以使用构造函数吗?
【问题讨论】:
标签: magento magento-1.7
config.xml 中定义的观察者中有两个方法。
如果我想在observer.php中添加其他方法,它们不会捕获任何事件:
我应该将它们定义为config.xml吗?
如果我输入一些变量,例如private $myvar,我可以使用它们吗?
我可以使用构造函数吗?
【问题讨论】:
标签: magento magento-1.7
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();
}
【讨论】: