首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento -覆盖adminhtml模板文件

Magento -覆盖adminhtml模板文件
EN

Stack Overflow用户
提问于 2013-01-21 23:21:07
回答 4查看 20.4K关注 0票数 12

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

以及magento论坛上的几条线索

  • http://www.magentocommerce.com/boards/viewthread/21978/

然而,这些帖子中没有一篇试图做我想做的事。

我想覆盖

代码语言:javascript
复制
app/design/adminhtml/default/default/template/widget/grid.phtml 

文件,因为该文件包含html的一部分,允许任何人从sales->order视图导出。

注意:我们已经在权限->角色视图中禁用了该用户角色的所有导出选项。

显示"Export:“-> "CSV/Excel”特性的代码包含在我前面列出的路径中。我想删除该块html并覆盖Magento中包含的文件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-22 13:47:34

Adminhtml使用与前端相同的主题回退,因此您只需要在模块配置XML中为安装声明一个自定义模板主题:

代码语言:javascript
复制
<stores>
    <admin>
        <design>
            <theme>
                <template>custom</template>
            </theme>
        </design>
    </admin>
</stores>

然后,您可以创建具有任意自定义的app/design/adminhtml/default/custom/template/widget/grid.phtml,并且该文件将优先使用default/default adminhtml主题中的文件。然后,您的解决方案将是在呈现导出控件的逻辑中添加一个ACL检查:

代码语言:javascript
复制
<?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; ?>

虽然在块类中实现这个逻辑可能更合适,但类重写系统不适合重写父类,因此需要重写每个子类。在这种情况下,服从DRY比在模板中嵌入太多的逻辑更重要。而且,这种变化是显而易见的,而且易于维护。

理想情况下,核心团队应该在Mage_Adminhtml_Block_Widget_Grid类中实现此检查,或者至少为_exportTypes属性提供一个公共设置器,这将使这种逻辑的实现更加清晰。

票数 25
EN

Stack Overflow用户

发布于 2013-01-22 00:04:17

重写块似乎是最简单的解决方案,但与其说是干净的解决方案,不如说是肮脏的攻击。应非常小心地使用类重写,并在可能的情况下始终避免。否则,您将很快遇到冲突,并更新Magento得到地狱。

通常,您可以通过定制的布局更新(即在local.xml中)更改模板,但在这种情况下,它是一个小部件,它不是通过布局XML配置的。

因此,输入观察者:创建一个在其config.xml中包含以下内容的模块

代码语言:javascript
复制
<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>

如果您不了解上述任何内容,请阅读有关Magento事件和观察者的文章。

现在,您将需要观察者本身来实际更改模板,但仅用于此块类型:

代码语言:javascript
复制
class Your_Modulename_Observer
{
    public function changeWidgetTemplate(Varien_Event_Observer $observer)
    {
        $block = $observer->getEvent()->getBlock();
        if ($block instanceof Mage_Adminhtml_Block_Widget_Grid) {
            // consider getting the template name from configuration
            $template = '...';
            $block->setTemplate($template);
        }
    }
}
票数 5
EN

Stack Overflow用户

发布于 2017-11-03 13:43:28

Magento -覆盖adminhtml模板文件,将下面的代码添加到扩展名为config.xml的文件中(您创建了)

代码语言:javascript
复制
   <stores>
    <admin>
        <design>
            <theme>
                <default>default</default>
                <template>rwd</template>
            </theme>
        </design>
    </admin>
</stores>

现在在adminhtml/default/rwd包下创建rwd文件夹。并根据需要创建模板和布局文件。

就像我们想重写order注释history.phtml文件一样。

代码语言:javascript
复制
<root>\app\design\adminhtml\default\default\template\sales\order\view\history.phtml
<root>\app\design\adminhtml\default\rwd\template\sales\order\view\history.phtml
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14448983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档