Magento-переопределить файл шаблона adminhtml

Я прочитал несколько сообщений о переполнении стека

и пару потоков на форуме magento

однако ни один из этих сообщений не пытается сделать то, что я пытаюсь сделать

Я бы как переопределить

app/design/adminhtml/default/default/template/widget/grid.phtml 

file, так как этот файл содержит часть html, которая позволяет любому экспортировать из представления sales->order.

Примечание: мы отключили все параметры экспорта для этой роли пользователя в разрешения->роль

код, отображающий функцию "экспорт в:" - > "CSV/Excel XML", включен в путь, который я перечислил выше. Я хотел бы удалить этот кусок html и переопределить файл, включенный в Magento.

4 ответов


Adminhtml использует тот же тематический резерв, что и интерфейс, поэтому вам нужно только объявить тему пользовательского шаблона для вашей установки в module config XML:

<stores>
    <admin>
        <design>
            <theme>
                <template>custom</template>
            </theme>
        </design>
    </admin>
</stores>

затем вы можете создать app / design/adminhtml/по умолчанию/пользовательский/шаблон/виджет / сетка.phtml, который С любыми настройками, которые вам нравятся, и этот файл будет использоваться в предпочтении к одному из по умолчанию / default тема 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"/>&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; ?>

хотя эта логика может быть более уместно реализована в классе block, система перезаписи класса не учитывает перезапись родительских классов, оставляя вам переписывать каждый подкласс. В этом случае подчинение DRY перевешивает встраивание слишком много логики в шаблоны. Более того, изменения очевидны и легко сохраняются.

В идеале основная команда реализовала бы эту проверку в Mage_Adminhtml_Block_Widget_Grid класса или, по крайней мере при условии общественного сеттера для _exportTypes свойство, которое сделало бы эту логику немного чище для реализации.


это может показаться самым простым решением переписать блок, но это больше грязный хак, чем чистое решение. Перезаписи классов следует использовать очень тщательно и всегда избегать, если это возможно. В противном случае вы быстро столкнетесь с конфликтами, а также обновление Magento получит ад.

обычно вы можете изменить шаблоны с помощью пользовательского обновления макета(т. е. в вашем локальном.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);
        }
    }
}

Magento-переопределить файл шаблона adminhtml добавить ниже код в config.xml файл расширения (созданный вами)

   <stores>
    <admin>
        <design>
            <theme>
                <default>default</default>
                <template>rwd</template>
            </theme>
        </design>
    </admin>
</stores>

Теперь создайте папку rwd в пакете adminhtml/default/rwd. и создать шаблон и файл макета, как вы хотите переопределить.

как будто мы хотим переопределить историю комментариев заказа.файл 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

определение шаблона можно найти здесь

class Mage_Adminhtml_Block_Widget_Grid extends Mage_Adminhtml_Block_Widget

на

public function __construct($attributes=array())

поэтому вам нужно переписать блок сетки продаж, если вы хотите удалить экспорт csv из сетки заказов на продажу (используйте это руководство, если вы не знаете, какhttp://www.magentocommerce.com/wiki/groups/174/changing_and_customizing_magento_code) и изменить _ _ конструкцию, чтобы быть похожим

public function __construct($attributes=array())
{
    parent::__construct($attributes);
    $this->setTemplate('...'); //here is your template
}