Jef*_*rts 12 magento magento-1.7
我已经阅读了几篇有关堆栈溢出的帖子
和magento论坛上的几个主题
但是,这些帖子都没有尝试做我想做的事情
我想覆盖
app/design/adminhtml/default/default/template/widget/grid.phtml
Run Code Online (Sandbox Code Playgroud)
文件,因为此文件包含一部分html,允许任何人从sales-> order视图中导出.
注意:我们已在权限 - >角色视图中禁用了此用户角色的所有导出选项
显示"导出到:" - >"CSV/Excel XML"功能的代码包含在上面列出的路径中.我想删除那块html并覆盖Magento附带的文件.
ben*_*rks 24
Adminhtml使用与前端相同的主题后备,因此您只需要在模块配置XML中为安装声明自定义模板主题:
<stores>
<admin>
<design>
<theme>
<template>custom</template>
</theme>
</design>
</admin>
</stores>
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用您喜欢的任何自定义项创建app/design/adminhtml/default/custom/template/widget/grid.phtml,此文件将优先于默认/默认 adminhtml主题中使用的文件.然后,您的解决方案是在呈现导出控件的逻辑中添加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; ?>
Run Code Online (Sandbox Code Playgroud)
虽然这个逻辑可能在块类中更合适地实现,但类重写系统不适合重写父类,让您重写每个子类.在这种情况下,服从DRY超过了在模板中嵌入太多逻辑.而且,变化是显而易见的并且易于维护.
理想情况下,核心团队可以在Mage_Adminhtml_Block_Widget_Grid课堂上实施此检查,或者至少为该_exportTypes属性提供公共设置器,这将使该逻辑更加清晰.
这似乎是重写块的最简单的解决方案,但这更像是一个肮脏的黑客,而不是一个干净的解决方案.应该非常小心地使用类重写,并且如果可能的话总是避免使用.否则你很快就会遇到冲突,并且更新Magento会变得很糟糕.
通常,您可以通过自定义布局更新(即在local.xml中)更改模板,但在这种情况下,它是一个窗口小部件,它不是通过布局XML配置的.
因此,输入观察者:创建一个包含以下内容的模块 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>
Run Code Online (Sandbox Code Playgroud)
如果您不理解上述任何内容,请阅读有关Magento Events和Observers的信息.
现在您将需要观察者本身来实际更改模板,但仅适用于此块类型:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18316 次 |
| 最近记录: |