Magento-覆盖adminhtml模板文件
我读过几篇关于堆栈溢出的文章Magento-覆盖adminhtml模板文件,magento,magento-1.7,Magento,Magento 1.7,我读过几篇关于堆栈溢出的文章 还有一些关于magento论坛的帖子 然而,这些帖子都没有试图做我想做的事情 我想推翻 app/design/adminhtml/default/default/template/widget/grid.phtml 文件,因为此文件包含允许任何人从“销售->订单”视图导出的html的一部分 注意:我们已在权限->角色视图中禁用此用户角色的所有导出选项 显示“导出到:”->“CSV/Excel XML”功能的代码包含在上面列出的路径中。我想删除那块h
app/design/adminhtml/default/default/template/widget/grid.phtml
文件,因为此文件包含允许任何人从“销售->订单”视图导出的html的一部分
注意:我们已在权限->角色视图中禁用此用户角色的所有导出选项
显示“导出到:”->“CSV/Excel XML”功能的代码包含在上面列出的路径中。我想删除那块html并覆盖Magento中包含的文件 可以在此处找到模板定义
class Mage_Adminhtml_Block_Widget_Grid extends Mage_Adminhtml_Block_Widget
在
所以,如果您想从销售订单网格中删除导出csv(如果您不知道如何操作,请使用本指南),并将_构造更改为
public function __construct($attributes=array())
{
parent::__construct($attributes);
$this->setTemplate('...'); //here is your template
}
重写块似乎是最简单的解决方案,但这与其说是一个干净的解决方案,不如说是一个肮脏的黑客行为。应非常小心地使用类重写,如果可能,应始终避免此类重写。否则,您将很快遇到冲突,而且更新Magento也会遇到麻烦 通常,您可以通过自定义布局更新(即在本地.xml中)来更改模板,但在本例中,它是一个小部件,不通过布局xml进行配置 因此,输入observer:创建一个模块,在其
config.xml
<adminhtml>
<events>
<adminhtml_block_html_before>
<observers>
<yourmodulename_observer>
<class>yourmodulename/observer</class>
<method>changeWidgetTemplate</method>
</yourmodulename_observer>
</observers>
</adminhtml_block_html_before>
</events>
</adminhtml>
Adminhtml使用与前端相同的主题回退,因此您只需在模块配置XML中声明安装的自定义模板主题:
<stores>
<admin>
<design>
<theme>
<template>custom</template>
</theme>
</design>
</admin>
</stores>
习俗
然后,您可以创建带有任何自定义设置的app/design/adminhtml/default/custom/template/widget/grid.phtml,该文件将优先于default/defaultadminhtml主题中的文件使用。然后,您的解决方案是在呈现导出控制的逻辑中添加ACL检查:
<?php if($this->getExportTypes() && {ACL LOGIC}}): ?>
<td class="export a-right">
<img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/> <?php echo $this->__('Export to:') ?>
<select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
<?php foreach ($this->getExportTypes() as $_type): ?>
<option value="<?php echo $_type->getUrl() ?>"><?php echo $_type->getLabel() ?></option>
<?php endforeach; ?>
</select>
<?php echo $this->getExportButtonHtml() ?>
</td>
<?php endif; ?>
getSkinUrl('images/icon_export.gif')?>“alt=”“class=“v-middle”/
Magento-覆盖adminhtml模板文件
将以下代码添加到扩展名为(您创建的)的config.xml文件中
违约
rwd
现在在adminhtml/default/rwd包下创建rwd文件夹。
并创建要替代的模板和布局文件
就像我们想要覆盖order comment history.phtml文件一样
<root>\app\design\adminhtml\default\default\template\sales\order\view\history.phtml
<root>\app\design\adminhtml\default\rwd\template\sales\order\view\history.phtml
\app\design\adminhtml\default\default\template\sales\order\view\history.phtml
\app\design\adminhtml\default\rwd\template\sales\order\view\history.phtml
在管理布局路径中使用local.xml执行此操作可能会更好。@FabianBlechschmidt如果您知道如何在local.xml中配置小部件,请告诉我。这确实是一个更好的解决方案。不需要小部件。这可能会起作用:newTemplate.phtmlI将尝试添加一个local.xml,或者更好地在扩展名中添加一个新的layout.xmlnd更改模板,并删除导出内容。之后,您需要实现一个观察器,该观察器侦听controller\u action\u predispatch\u adminhtml\u sales\u order\u export\u excel
和controller\u action\u predispatch\u adminhtml\u sales\u order\u export\u csv
,如果管理员用户组是wrong@FabianBlechschmidt而不是编辑核心文件什么是最好的替代方法,例如更改app/design/frontend/default/theme而不是app/design/frontend/default/default@zus这就是benmarks在接受的解决方案中所描述的。定义一个管理主题,然后像前端主题一样使用它-复制文件并更改所需内容。这将不起作用。阻止重写ing不适用于父类。是的,fab建议的解决方案更好。但是这个例子会起作用,因为您直接重写Mage_Adminhtml_Block_Widget_网格,调用它的u构造(第一次设置模板),然后设置模板。您似乎误解了类重写在Magento中的工作方式。createBlock(“组/名称”)
使用config对象,但这将仅自动加载重写的类定义,然后通过名称指定父类。自动加载程序(在加载父类时全权负责)不会以任何方式评估配置XML中的类重写。请使用Mage\u Admin子类进行简单测试html_Block_Widget_Grid
你会明白我的意思。是的,我知道它是如何工作的,这是我的错误。在这个问题中,销售订单网格需要直接重写。我更改了我的答案。@freento不是编辑核心文件,而是修改app/design/frontend/default/theme而不是app/design/frontend/default/def,最好的替代方法是什么aultIs是否可以将多个主题声明为回退树?如果将core adminhtml主题从“default/default”移动到“base/default”,则可以指定三个自定义主题。@benmarks不是编辑核心文件,而是更改app/design/frontend/default/主题而不是app/design/frontend/default/default,最好的替代方法是什么
<?php if($this->getExportTypes() && {ACL LOGIC}}): ?>
<td class="export a-right">
<img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/> <?php echo $this->__('Export to:') ?>
<select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
<?php foreach ($this->getExportTypes() as $_type): ?>
<option value="<?php echo $_type->getUrl() ?>"><?php echo $_type->getLabel() ?></option>
<?php endforeach; ?>
</select>
<?php echo $this->getExportButtonHtml() ?>
</td>
<?php endif; ?>
<stores>
<admin>
<design>
<theme>
<default>default</default>
<template>rwd</template>
</theme>
</design>
</admin>
</stores>
<root>\app\design\adminhtml\default\default\template\sales\order\view\history.phtml
<root>\app\design\adminhtml\default\rwd\template\sales\order\view\history.phtml