Подтвердить что ты не робот

Magento - Заменить файл шаблона adminhtml

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

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

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

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

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

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

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

Код, отображающий функцию "Экспорт в:" → "CSV/Excel XML", включен в указанный мной путь. Я хотел бы удалить этот фрагмент html и переопределить файл, включенный в Magento.

4b9b3361

Ответ 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"/>&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, что сделало бы эту логику более чистым для реализации.

Ответ 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
}