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

我读过几篇关于堆栈溢出的文章

还有一些关于magento论坛的帖子

然而,这些帖子都没有试图做我想做的事情

我想推翻

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"/>&nbsp; <?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"/>&nbsp; <?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