在 core_block_abstract_to_html_after 事件上使用观察者获取自定义 phtml 内容

Get custom phtml content using observer on core_block_abstract_to_html_after event

我有一个自定义块,我想将其添加到 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;
        }

获得布局后,创建块相当容易(只需使用您想要的块类型调用 createBlock() 并使用您想要使用的模板调用 setTemplate() 即可)。
而且您始终可以从另一个块中获取布局。

所以在你的情况下:

$observer->getEvent()
         ->getBlock()
         ->getLayout()
         ->createBlock('adminhtml/template')
         ->setTemplate('custommodulefolder/customhtmlfileforadminorderview.phtml')
         ->toHtml();