在core_block_abstract_to_html_after事件中使用observer获取自定义phtml内容

时间:2015-05-11 19:11:29

标签: php magento magento-1.7 magento-1.8

我有一个自定义块,我想在Magento管理面板的订单视图页面的现有核心块下添加。

我开发了自定义模块。

为了避免修改核心模板phtml文件以加载我的自定义块,我尝试遵循最佳实践,并在core_block_abstract_to_html_after上构建了一个观察者

如果你想知道为什么阅读上面的两篇优秀文章

http://www.atwix.com/magento/best-practices/

http://inchoo.net/magento/how-you-could-build-your-magento-extensions-without-view-files/

然而,虽然我想要附加的块,将包含大量的html,我想将这个html放在自定义的phtml文件中,而不是直接放在php中,以便更容易为设计人员定制。

我在以下文件夹中创建了一个phtm文件

app\design\adminhtml\default\default\template\custommodulefolder\customhtmlfileforadminorderview.phtml

但是如何从观察者那里加载这个phtml内容?

<adminhtml>
        <events>
            <core_block_abstract_to_html_after>
                <observers>
                    <custommodule>
                        <class>NameSpace_CustomModule_Model_Observer</class>
                        <method>RenderBlockCustomdAdmin</method>
                    </referencefield>
                </custommodule>
            </core_block_abstract_to_html_after>
        </events>
    </adminhtml>

我的Observer.php

中的方法
    public function RenderBlockCustomdAdmin($observer = NULL)
        {
            if (!$observer) {
                return;
            }

            if ('order_info' == $observer->getEvent()->getBlock()->getNameInLayout()) {

                if (!Mage::getStoreConfig('advanced/modules_disable_output/'.self::MODULE_NAME)) {

                    $transport = $observer->getEvent()->getTransport();

// here I would like to find a way to load the content of a custom of phtml
                    $htmfromablock= function_which_will_allow-me_to_get_content_phtmlfile() 
                    $transportOldHtml =$transport->getHtml();
                    $transport->setHtml($transportOldHtml.'<br />'.$htmfromablock);
                }
            }

            return $this;
        }

1 个答案:

答案 0 :(得分:1)

当您获得布局时,创建一个块非常简单(只需要使用您想要的块类型调用$observer->getEvent() ->getBlock() ->getLayout() ->createBlock('adminhtml/template') ->setTemplate('custommodulefolder/customhtmlfileforadminorderview.phtml') ->toHtml(); 并使用您想要使用的模板调用{{1}})。 /> 而且你总是可以从另一个块获得布局。

所以在你的情况下:

{{1}}