在我的Magento网上商店的后端,我想为System-> Config的块设置模板。因此,我使用Mage_Adminhtml_System_ConfigController
的布局句柄,我认为adminhtml_system_config_index
。问题是,没有任何反应。即使想要删除块,也没有任何反应:
<adminhtml_system_config_index>
<reference name="left">
<action method="setTemplate">
<template>myModule/template.phtml</template>
</action>
</reference>
</adminhtml_system_config_index>
删除块:
<adminhtml_system_config_index>
<remove name="left" />
</adminhtml_system_config_index>
我做错了什么?我甚至尝试system_config_index
作为布局句柄。
答案 0 :(得分:3)
你在这里做了三件坏事。
第一个提示:您是否正在编辑正确的XML文件?
许多常见的布局问题来自您正在编辑的XML文件,而不是系统加载的XML文件。在您的网站中启用开发人员模式,将display_errors
设置为1
,然后故意在XML文件中引入格式错误并尝试加载页面。
<!-- note the trailing greater than sign at the end -->
<adminhtml_system_config_index>
...
</adminhtml_system_config_index> >
如果页面加载时没有错误,那么您就不会加载您认为的XML文件。
第二个提示:您使用的是正确的布局句柄吗?
我不确定你是谁。尽管默认系统配置页面使用index
操作,但此操作实际上会将页面转发到edit
操作。
#File: app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php
public function indexAction()
{
$this->_forward('edit');
}
转发意味着有一个内部重新发送,但没有http重定向。这意味着你的实际句柄是
`adminhtml_system_config_edit`
这就是我使用(免责声明:构建并销售)Commerce Bug的原因。 “布局”选项卡始终显示当前句柄,我可以避免做出让我走错路的假设。
第三提示:您是否将名为left
的块与左侧列混淆了?
通常,Magento的容器块(left
,content
,right
等)是不模板块。相反,它们是容器块(准确的text/list
块),它们包含多个模板块。
这是我使用Commerce Bug的另一个地方,specifically the new Graphviz feature。这将显示任何特定页面的块结构。在出厂默认系统中,您会在“系统配置”页面中看到类似的内容
如您所见,左侧区块没有模板,因此更改其模板将无效。您可能需要的块是left.child1
。
第四个提示:您尝试修改的块是否由布局XML添加。
如果没有深入到布局渲染(take a book),那么在布局生成所有块之后,会添加一些块。如果是这种情况,您的块将无法在布局XML文件中使用。
如果您查看editAction
方法,则可以看到在调用 loadLayout
之后添加了标签块(查找adminhtml/system_config_tabs
)。这意味着它在布局xml文件中不可用。
public function editAction()
{
//...
//the `loadLayout` method call creates blocks based on layout XML files
$this->loadLayout();
$this->_setActiveMenu('system/config');
$this->getLayout()->getBlock('menu')->setAdditionalCacheKeyInfo(array($current));
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('System'), Mage::helper('adminhtml')->__('System'),
$this->getUrl('*/system'));
//this line add the `child1` block to the layout. (child one is the
//name chosen since the block has no explicit name
$this->getLayout()->getBlock('left')
->append($this->getLayout()->createBlock('adminhtml/system_config_tabs')->initTabs());
//...
这意味着您无法从布局XML文件修改此块的模板。您需要使用侦听适当事件的自定义模块,然后通过PHP进行更改。我会尝试使用类似
的PHP代码来事件controller_action_layout_render_before
或controller_action_layout_render_before_adminhtml_system_config_edit
$block = Mage::getSingleton('core/layout')->getBlock('child1');
if($block)
{
$block->setTemplate('foo.phtml');
}