Magento - Заменить файл шаблона adminhtml
Я прочитал несколько сообщений о переполнении стека
и пару потоков на форуме magento
Однако ни одно из этих сообщений не пытается сделать то, что я пытаюсь сделать
Я хотел бы переопределить
app/design/adminhtml/default/default/template/widget/grid.phtml
так как этот файл содержит часть html, которая позволяет любому пользователю экспортировать из представления sales- > order.
Примечание. Мы отключили все параметры экспорта этой роли пользователя в представлении разрешений- > ролей
Код, отображающий функцию "Экспорт в:" → "CSV/Excel XML", включен в указанный мной путь. Я хотел бы удалить этот фрагмент html и переопределить файл, включенный в Magento.
Ответы
Ответ 1
Adminhtml использует ту же тематическую резервную копию, что и frontend, поэтому вам нужно только объявить настраиваемую тему шаблона для вашей установки в модуле config XML:
<stores>
<admin>
<design>
<theme>
<template>custom</template>
</theme>
</design>
</admin>
</stores>
Затем вы можете создать 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; ?>
Хотя эта логика может быть более адекватно реализована в блочном классе, система перезаписи класса не учитывает переписывание родительских классов, оставляя вам переписывать каждый подкласс. В этом случае подчинение DRY перевешивает вложение слишком много логики в шаблоны. Более того, изменение очевидно и легко поддерживается.
В идеале основная команда выполнила бы эту проверку в классе Mage_Adminhtml_Block_Widget_Grid
или, по крайней мере, предоставила публичный сеттер для свойства _exportTypes
, что сделало бы эту логику более чистым для реализации.
Ответ 2
Это может показаться простейшим решением переписать блок, но это более грязный взломать, чем простое решение. Перезаписи классов следует использовать очень осторожно и всегда избегать, если это возможно. В противном случае вы быстро столкнетесь с конфликтами, а также обновите 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>
Если вы ничего не понимаете, прочитайте о событиях и наблюдателях Magento.
Теперь вам понадобится сам наблюдатель для фактического изменения шаблона, но только для этого типа блока:
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);
}
}
}
Ответ 3
Magento - Заменить файл шаблона adminhtml
добавьте ниже код в файл config.xml расширения (вы создали)
<stores>
<admin>
<design>
<theme>
<default>default</default>
<template>rwd</template>
</theme>
</design>
</admin>
</stores>
Теперь создайте папку rwd в пакете adminhtml/default/rwd.
и создайте файл шаблона и макета, который вы хотите переопределить.
так как мы хотим переопределить файл истории заказов. файл .ftml.
<root>\app\design\adminhtml\default\default\template\sales\order\view\history.phtml
<root>\app\design\adminhtml\default\rwd\template\sales\order\view\history.phtml
Ответ 4
Определение шаблона можно найти здесь
class Mage_Adminhtml_Block_Widget_Grid extends Mage_Adminhtml_Block_Widget
в
public function __construct($attributes=array())
Итак, вам нужно переписать блок сетки продаж, если вы хотите удалить экспорт csv из Set Order Grid (используйте это руководство, если вы не знаете, как http://www.magentocommerce.com/wiki/groups/174/changing_and_customizing_magento_code) и изменить __construct как
public function __construct($attributes=array())
{
parent::__construct($attributes);
$this->setTemplate('...'); //here is your template
}