我在自定义模块的Config.xml
中使用Observer Event<controller_action_layout_render_before>
<observers>
<Test_Check_Model_Observer>
<class>Test_Check_Helper_Data</class>
<method>checkValidi</method>
</Test_Check_Model_Observer>
</observers> </controller_action_layout_render_before>
现在在Test / Check / Helper / Data checkValidi方法中我在Content中插入一个块。
&GT;
class Test_Check_Helper_Data extends Mage_Core_Helper_Abstract {
> public function checkValidi($observer) {
> $layout = Mage::app()->getLayout();
> $content = $layout->getBlock('content');
> $block = 'hello! I am Working';
> $content->insert($block);
> }
但是在前端当我填写Checkout结算和其他信息时,它给了我一个错误调用成员函数insert()在你的结帐进度右侧栏中的非对象,请给我任何解决方案,谢谢
答案 0 :(得分:0)
如果查看结帐模块checkout.xml
的布局,您会发现某些句柄没有content
块。例如,checkout_onepage_progress_billing
或checkout_onepage_progress_shipping
因此,您的代码会出现non-object
错误。我想你应该在调用方法之前检查$ block变量。
$layout = Mage::app()->getLayout();
$content = $layout->getBlock('content');
if ($content) {
$block = 'hello! I am Working';
$content->insert($block);
}
答案 1 :(得分:0)
从观察者那里调用帮助器不是一个好主意。
Observer始终调用模型文件,它没有类
我有修改和代码config.xml代码是
<global>
<models>
<testcheck>
<class>Test_Check_Model</class>
</testcheck>
</models>
</global>
<events>
<controller_action_layout_render_before>
<observers>
<test_check_codel_observer>
<type>singleton</type>
<class>testcheck/observer</class>
<method>your_function_name</method>
</test_check_codel_observer>
</observers>
</controller_action_layout_render_before>
</events>
然后在App / code / YourcodePoll / Test / Check / Model /
下创建Observer Observer.php文件及以下 Observer.php中的代码
是
<?php class Test_Check_Model_Observer
{
public function your_function_name($observer){
$block = $this->getLayout()
->createBlock('core/text', 'example-block')
->setText('<h1>This is a text block</h1>');
$observer->getEvent()->getLayout()->getBlock('content')->append($block);
//$observer->getEvent()->getLayout()->getUpdate();
}
}