Как удалить опцию экспорта из сетки продаж/заказов?


Я хочу удалить следующее из сетки заказов на продажу:

  • Новый порядок RSS
  • Экспорт в:
  • Блок массового воздействия

Для определенной роли администратора.

В настоящее время я использую событие adminhtml_block_html_before для удаления блока массового действия:

Мой метод наблюдателя:

    public function salesOrderVendorLayout($evt){
        $tabBlock = $evt->getBlock();
        if($tabBlock instanceof Mage_Adminhtml_Block_Sales_Order_Grid){
            $tabBlock->setMassactionIdField('');
        }
    }

enter image description here

Мои вопросы:

  1. Правильный ли это способ удалить блок массового действия?
  2. Как я могу удалить оставшиеся два квартала?
Author: Shathish, 2013-11-11

3 answers

Я не думаю, что есть способ удалить ссылку rss и типы экспорта через наблюдателя.
Например, код, который показывает типы экспорта, выглядит следующим образом:

<?php if($this->getExportTypes()): ?>
    <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; ?>

Единственный способ заставить его не появляться - это заставить getExportTypes возвращать null или false, и метод выглядит так:

public function getExportTypes()
{
    return empty($this->_exportTypes) ? false : $this->_exportTypes;
}

_exportTypes защищен, и единственными общедоступными методами доступа к нему являются getExportTypes для извлечения и addExportType для добавления нового типа экспорта. Нет никакого способа удалить их. То же самое относится и к Списки RSS.
Вот что я бы сделал в вашем случае. Я бы переписал блок сетки заказов Mage_Adminhtml_Block_Sales_Order_Grid и добавил следующие методы:

public function getExportTypes(){
    return false;
}
public function getRssLists(){
    return false;
}
protected function _prepareMassaction(){
    return $this;
}

Еще лучше, я бы реализовал способ по-прежнему показывать их, изменив настройки конфигурации в бэкэнде (при необходимости).

public function getExportTypes(){
    if (!Mage::getStoreConfigFlag('some/config/path')){ //if some flag is not set let it behave as default.
        return parent::getExportTypes();
    }
    return false;
}
 6
Author: Marius, 2013-11-11 12:35:56

Я вижу три пути:

Самый простой вариант: CSS

Просто добавьте новый файл css и скройте все, что вы хотите

Изменить шаблон

Существует стандартный шаблон, который используется для каждой сетки и ее контейнера:

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

Просто измените шаблон в своем собственном файле layout.xml, скопируйте шаблон и удалите ненужные части

Перепишите блок

Перепишите блок \Mage_Adminhtml_Block_Catalog_Product_Grid и измените метод \Mage_Adminhtml_Block_Catalog_Product_Grid::_prepareMassaction, чтобы ничего не делать

 4
Author: Fabian Blechschmidt, 2020-06-15 08:30:17

Вот что я сделал:

class Mynamespace_Mymodule_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid{

    protected $_idArray = array();

    public function __construct()
    {
        parent::__construct();
        $this->_idArray = Mage::helper('mymodule')->getUserInfo();
    }

    public function getExportTypes(){
        if($this->_idArray['user_role'] == 'xyz'){
            return false;
        } else{
            return $this->_exportTypes;
        }
    }

    public function getRssLists(){
        if($this->_idArray['user_role'] == 'xyz'){
            return false;
        } else{
            return $this->_rssLists;
        }
    }

    protected function _prepareMassaction(){
        if($this->_idArray['user_role'] == 'xyz'){
            return $this;
        } else{
            parent::_prepareMassaction();
        }
    }

}

Где getUserInfo() - мой метод вспомогательного класса, который получит идентификатор пользователя и роль пользователя от администратора/сеанса.

 3
Author: Shathish, 2013-11-12 05:33:02