質問

販売注文グリッドから以下を削除したい:

  • 新しい注文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. 残りの2つのブロックを削除するにはどうすればよいですか?
役に立ちましたか?

解決

オブザーバーを介して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;
}

他のヒント

私は3つの方法を見ます:

簡単なもの: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() 私のヘルパークラスのメソッドが取得されます ユーザーIDユーザーロール から 管理/セッション.

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top