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