在非对象Magento上调用成员函数insert()

时间:2014-06-26 08:25:55

标签: magento

我在自定义模块的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()在你的结帐进度右侧栏中的非对象,请给我任何解决方案,谢谢

2 个答案:

答案 0 :(得分:0)

如果查看结帐模块checkout.xml的布局,您会发现某些句柄没有content块。例如,checkout_onepage_progress_billingcheckout_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();


}
}