Как удалить опцию экспорта из сетки продаж/заказов?
Я хочу удалить следующее из сетки заказов на продажу:
- Новый порядок RSS
- Экспорт в:
- Блок массового воздействия
Для определенной роли администратора.
В настоящее время я использую событие adminhtml_block_html_before
для удаления блока массового действия:
Мой метод наблюдателя:
public function salesOrderVendorLayout($evt){
$tabBlock = $evt->getBlock();
if($tabBlock instanceof Mage_Adminhtml_Block_Sales_Order_Grid){
$tabBlock->setMassactionIdField('');
}
}
Мои вопросы:
- Правильный ли это способ удалить блок массового действия?
- Как я могу удалить оставшиеся два квартала?
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"/> <?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;
}
Я вижу три пути:
Самый простой вариант: 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
, чтобы ничего не делать
Вот что я сделал:
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()
- мой метод вспомогательного класса, который получит идентификатор пользователя и роль пользователя от администратора/сеанса.